{"version":3,"file":"use-request2.mjs","sources":["../../../../../../../../packages/components/cascade-pro/src/hooks/use-request.ts"],"sourcesContent":["import { computed, ref, unref } from 'vue'\nimport { debounce } from 'lodash-es'\nimport { DebounceDely, RequestErrorTip } from '../constants'\nimport type {\n  CascadeProOption,\n  ISearchData,\n  IUseFieldRequest,\n  IUseSelectRecordsReturn,\n} from '../types'\n\n/** 缓存 */\nconst CASCADE_PRO_CACHE: Map<string, any> = new Map()\n\n/**\n * 根据得到的 fields 数据与当前选中数据，把当前数据的所有父级取出来，放入selectrecords 方便做选中状态处理\n *\n * @param records\n */\nconst handleSelectRecordsAfterGetFields = (\n  records: CascadeProOption[][],\n  selectRecord: CascadeProOption,\n  idPathSplitResult: string[],\n  setSelectRecords: IUseSelectRecordsReturn['setSelectRecords'],\n  type: 'init' | 'normal'\n) => {\n  if (type === 'init') {\n    setSelectRecords([], 'recover')\n  } else {\n    const allParentRecords: CascadeProOption[] = []\n    for (let i = 0; i < idPathSplitResult.length - 1; i++) {\n      const options = records[i]\n      const parentRecord = options.find((option) => option.id === idPathSplitResult[i])\n      parentRecord && allParentRecords.push(parentRecord)\n    }\n\n    if (allParentRecords.length > 0) {\n      setSelectRecords([...allParentRecords, unref(selectRecord)], 'normal')\n    } else {\n      setSelectRecords([unref(selectRecord)], 'normal')\n    }\n  }\n}\n\n/**\n * 排序，默认降序\n *\n * @param options\n * @returns\n */\nfunction getFirstLetterSortedOptions(options: CascadeProOption[]) {\n  return options.sort((a, b) => {\n    const nameA = a.firstLetter?.toUpperCase()\n    const nameB = b.firstLetter?.toUpperCase()\n    if (nameA && nameB) {\n      if (nameA < nameB) {\n        return -1\n      }\n      if (nameA > nameB) {\n        return 1\n      }\n    }\n    return 0\n  })\n}\n\nfunction handleOptionsWithFirstLetterVisible(options: CascadeProOption[]) {\n  const handledFirstLetterSort = getFirstLetterSortedOptions(options)\n  const firstLetters = [\n    ...new Set(handledFirstLetterSort.map((option) => option.firstLetter)),\n  ] as string[]\n  const firstLettersMap = firstLetters.reduce((result, cur) => {\n    result[cur] = 0\n    return result\n  }, {} as Record<string, number>)\n  const groupByFirstLetterOptions = handledFirstLetterSort.map((option) => {\n    const { firstLetter } = option\n    if (firstLettersMap[firstLetter!] === 0) {\n      firstLettersMap[firstLetter!]++\n      return { ...option, firstLetterGroup: firstLetter }\n    } else {\n      return { ...option, firstLetterGroup: '' }\n    }\n  })\n\n  return groupByFirstLetterOptions\n}\n\nfunction searchData(param: ISearchData): CascadeProOption[][] | null {\n  const firstLetterVisible = unref(param.firstLetterVisible)\n  const { id, pid, fieldIndex, idPathSplitResult } = unref(param.selectRecordFibers)\n  const tree = unref(param.options).tree\n\n  // 初始化 selectRecord idPath = ''\n  if (id === '' && pid === '' && fieldIndex === 0) {\n    if (firstLetterVisible) {\n      if (!CASCADE_PRO_CACHE.has(unref(param.id))) {\n        CASCADE_PRO_CACHE.set(unref(param.id), {\n          firstFieldFirstLetterResult: handleOptionsWithFirstLetterVisible(tree),\n        })\n      }\n      const cache = CASCADE_PRO_CACHE.get(unref(param.id))\n\n      handleSelectRecordsAfterGetFields(\n        [cache['firstFieldFirstLetterResult']],\n        unref(param.selectRecord),\n        idPathSplitResult,\n        param.setSelectRecords,\n        'init'\n      )\n      return [cache['firstFieldFirstLetterResult']]\n    } else {\n      handleSelectRecordsAfterGetFields(\n        [tree],\n        unref(param.selectRecord),\n        idPathSplitResult,\n        param.setSelectRecords,\n        'init'\n      )\n      return [tree]\n    }\n  } else {\n    const currentFieldLength = idPathSplitResult.length\n\n    // 取下一级\n    const nextFieldLength = currentFieldLength + 1\n\n    const records: CascadeProOption[][] = []\n    for (let i = 0; i < nextFieldLength; i++) {\n      if (i === 0) {\n        if (firstLetterVisible) {\n          if (!CASCADE_PRO_CACHE.has(unref(param.id))) {\n            CASCADE_PRO_CACHE.set(unref(param.id), {\n              firstFieldFirstLetterResult: handleOptionsWithFirstLetterVisible(tree),\n            })\n          }\n          const cache = CASCADE_PRO_CACHE.get(unref(param.id))\n\n          records.push(cache['firstFieldFirstLetterResult'])\n        } else {\n          records.push(tree)\n        }\n      } else {\n        // 回溯 TODO 能否cache优化？\n        const currentOptions = records[i - 1].find(\n          (option) => option.id === idPathSplitResult[i - 1]\n        )?.children\n        records.push(currentOptions!)\n      }\n    }\n\n    const response = records.filter(Boolean)\n    handleSelectRecordsAfterGetFields(\n      response,\n      unref(param.selectRecord),\n      idPathSplitResult,\n      param.setSelectRecords,\n      'normal'\n    )\n    return response\n  }\n}\n\n/**\n * 根据当前点击，获取即将渲染的数据\n *\n * @param param\n * @returns\n */\nexport function useFieldRequest(param: IUseFieldRequest) {\n  const resultRef = ref<CascadeProOption[][]>([])\n  const errorRef = ref<string>('')\n\n  const onClick = (selected: CascadeProOption) => {\n    const selectRecord = selected\n    param.setSelectRecord(selectRecord)\n    param.setLoading(true)\n\n    const response = searchData({\n      firstLetterVisible: param.firstLetterVisible,\n      selectRecord: param.selectRecord,\n      setSelectRecords: param.setSelectRecords,\n      selectRecordFibers: param.selectRecordFibers,\n      options: param.options,\n      id: param.id,\n    })\n    if (Array.isArray(response)) {\n      resultRef.value = response\n      errorRef.value = ''\n    } else if (response === null) {\n      // 返回 null 什么都不做\n    } else {\n      resultRef.value = []\n      errorRef.value = RequestErrorTip\n    }\n    param.setLoading(false)\n  }\n\n  if (param.immediate) {\n    onClick(unref(param.selectRecord))\n  }\n\n  const result = computed(() => unref(resultRef))\n  const error = computed(() => unref(errorRef))\n\n  return {\n    result,\n    error,\n    onClick: debounce(onClick, DebounceDely),\n  }\n}\n"],"names":[],"mappings":"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"}