initAreaTreeNode.tsx 1.19 KB
import type {ReactNode} from "react";
import styles from "../index.less";


type DeviceTreeNode = {
  title: ReactNode
  key: string | number;
  icon?: ReactNode;
  location?: any[];
  project?: API.Store;
  children?: DeviceTreeNode[];
}

const initTreeNode = (data: any[], searchValue: string | undefined): DeviceTreeNode[] => {
  return data?.map(item => {
    const index = item?.title?.indexOf(searchValue);
    const beforeStr = item?.title?.substr(0, index);
    const afterStr = item?.title?.substr(index + searchValue?.length);
    const title =
      index > -1 ? (
        <span>
          {beforeStr}
          <span className={styles.searchValueKeyword}>{searchValue}</span>
          {afterStr}
        </span>
      ) : (
        <span>{item.title}</span>
      );
    const treeItem = {
      title,
      key: item.key,
      icon: item.icon,
    }
    if (item.project) {
      treeItem['project'] = item.project
    } else {
      treeItem['location'] = item?.location || []
    }
    if (item.children && item.children?.length > 0) {
      return {
        ...treeItem,
        children: initTreeNode(item.children, searchValue)
      };
    }
    return treeItem
  });
}

export default initTreeNode