tav-ui
Version:
1 lines • 12.1 kB
Source Map (JSON)
{"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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"}