initTreeNode.tsx 1.69 KB
Newer Older
DarkForst's avatar
DarkForst committed
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55
import _ from 'lodash';
import style from './style.less'

const getTreeList = (data: any, dataList: any[])=> {
  data?.forEach((item: any) => {
    if (_.isUndefined(item?.selectable) || item?.selectable) dataList.push(item);
    if (item?.children) {
      getTreeList(item.children, dataList);
    }
  })
  return dataList
};

export const initTreeNode = (data: any[], searchValue?: string , searchCode?: boolean): any[] => {
  if (searchValue) {
    const allData = getTreeList(data, []);
    const finalData = allData.filter(item =>{
      if(searchCode){
        return item?.title?.toLowerCase()?.indexOf(searchValue?.toLowerCase() as string) > -1 ||
        item?.code?.indexOf(searchValue) > -1
      }
        return item?.title?.toLowerCase()?.indexOf(searchValue?.toLowerCase() as string) > -1
    }
    )
    return finalData?.map(item => {
      const index = item?.title?.toLowerCase()?.indexOf(searchValue?.toLowerCase() as string);
      const beforeStr = item?.title?.substr(0, index);
      const afterStr = item?.title?.substr(index + searchValue.length);
      const title = index > -1 ? (
        <span>
          {beforeStr}
          <span className={style.search_value_keyword}>{searchValue}</span>
          {afterStr}
        </span>
      ) : item.title;
      const extraItem = _.omit(item, ['children'])
      return {
        ...extraItem,
        title,
        extraTitle: item.title,
      };
    }) || [];
  }
  return data?.map(item => {
    const extraItem = _.omit(item, ['children'])
    return item?.children?.length > 0 ? ({
      ...extraItem,
      extraTitle: item.title,
      children: initTreeNode(item.children)
    }) : ({
      ...extraItem,
      extraTitle: item.title,
    })
  })
}