UNPKG

tdesign-vue-next

Version:
1 lines 12.9 kB
{"version":3,"file":"useSelectOptions.mjs","sources":["../../../../components/select/hooks/useSelectOptions.ts"],"sourcesContent":["import { computed, Slots, Ref, ref } from 'vue';\nimport { isArray } from 'lodash-es';\nimport { get } from 'lodash-es';\nimport { isFunction } from 'lodash-es';\n\nimport { useChildComponentSlots } from '../../hooks/slot';\nimport { TdSelectProps, TdOptionProps, SelectOptionGroup, SelectValue, SelectOption } from '../type';\nimport { KeysType } from '../../common';\n\ntype UniOption = (TdOptionProps | SelectOptionGroup) & {\n index?: number;\n slots?: Slots;\n};\n\nexport const useSelectOptions = (props: TdSelectProps, keys: Ref<KeysType>, inputValue: Ref<string>) => {\n const getChildComponentSlots = useChildComponentSlots();\n const optionsCache = ref<SelectOption[]>([]);\n\n const options = computed(() => {\n let dynamicIndex = 0;\n // 统一处理 keys,处理通用数据\n const innerOptions: UniOption[] =\n props.options?.map((option) => {\n const getFormatOption = (option: TdOptionProps) => {\n const { value, label, disabled } = keys.value;\n const res = {\n ...option,\n index: dynamicIndex,\n label: get(option, label),\n value: get(option, value),\n disabled: get(option, disabled) || false,\n };\n dynamicIndex++;\n return res;\n };\n if ((option as SelectOptionGroup).children) {\n return {\n ...option,\n children: (option as SelectOptionGroup).children.map((child) => getFormatOption(child)),\n };\n }\n return getFormatOption(option);\n }) || [];\n\n // 处理 slots\n const optionsSlots = getChildComponentSlots('Option');\n const groupSlots = getChildComponentSlots('OptionGroup');\n\n if (isArray(groupSlots)) {\n for (const group of groupSlots) {\n const groupOption = {\n group: group.props?.label,\n ...group.props,\n children: [] as TdOptionProps[],\n };\n const res = getChildComponentSlots('Option', group.children as Slots);\n if (!isArray(res)) continue;\n for (const child of res) {\n groupOption.children.push({\n ...child.props,\n slots: child.children,\n index: dynamicIndex,\n } as TdOptionProps);\n dynamicIndex++;\n }\n\n innerOptions.push(groupOption);\n }\n }\n if (isArray(optionsSlots)) {\n for (const child of optionsSlots) {\n innerOptions.push({\n ...child.props,\n slots: child.children,\n index: dynamicIndex,\n } as TdOptionProps);\n dynamicIndex++;\n }\n }\n return innerOptions;\n });\n\n const optionsList = computed(() => {\n const res: TdOptionProps[] = [];\n const getOptionsList = (options: TdOptionProps[]) => {\n for (const option of options) {\n if ((option as SelectOptionGroup).children) {\n getOptionsList((option as SelectOptionGroup).children);\n } else {\n res.push(option);\n }\n }\n };\n getOptionsList(options.value);\n return res;\n });\n\n const optionsMap = computed(() => {\n const res = new Map<SelectValue, TdOptionProps>();\n // map以最新的为主 避免存在重复value更新的场景 https://github.com/Tencent/tdesign-vue-next/issues/2646\n optionsCache.value.concat(optionsList.value).forEach((option: TdOptionProps) => {\n res.set(option.value, option);\n });\n return res;\n });\n\n const filterMethods = (option: SelectOption) => {\n if (isFunction(props.filter)) {\n return props.filter(`${inputValue.value}`, option);\n }\n return option.label?.toLowerCase?.().indexOf(`${inputValue.value}`.toLowerCase()) > -1;\n };\n\n const displayOptions = computed(() => {\n if (props.onSearch && props.filterable) return options.value; // 远程搜索时,不执行内部的过滤,不干预用户的自行处理,如输入首字母搜索中文的场景等\n\n if (!inputValue.value || !(props.filterable || isFunction(props.filter))) return options.value;\n\n let checkAllOption: SelectOption;\n\n let res: SelectOption[] = [];\n\n options.value.forEach((option) => {\n if ((option as SelectOptionGroup).children) {\n res.push({\n ...option,\n children: (option as SelectOptionGroup).children.filter(filterMethods),\n });\n }\n\n if ((option as TdOptionProps)?.checkAll === true) checkAllOption = option;\n\n if (filterMethods(option)) {\n res.push(option);\n }\n });\n\n if (!isFunction(props.filter)) {\n // 使用默认 filter,增加表现,调整全等项到首尾,避免全等项位于最后\n // inputValue: ab\n // options abcde, abcd, abc, ab\n const exactMatch = res.filter((item) => item.label === inputValue.value);\n const fuzzyMatch = res.filter((item) => item.label !== inputValue.value);\n res = exactMatch.concat(fuzzyMatch);\n }\n\n return res.length && checkAllOption ? [checkAllOption, ...res] : res;\n });\n\n return {\n options,\n optionsMap,\n optionsList,\n optionsCache,\n displayOptions,\n filterMethods,\n };\n};\n"],"names":["useSelectOptions","props","keys","inputValue","getChildComponentSlots","useChildComponentSlots","optionsCache","ref","options","computed","_props$options","dynamicIndex","innerOptions","map","option","getFormatOption","_keys$value","value","label","disabled","res","_objectSpread","index","get","children","child","optionsSlots","groupSlots","isArray","_iterator","_createForOfIteratorHelper","_step","s","n","done","_group$props","group","groupOption","_iterator2","_step2","push","slots","err","e","f","_iterator3","_step3","optionsList","getOptionsList","_iterator4","_step4","optionsMap","Map","concat","forEach","set","filterMethods","_option$label","_option$label$toLower","isFunction","filter","toLowerCase","call","indexOf","displayOptions","onSearch","filterable","checkAllOption","checkAll","exactMatch","item","fuzzyMatch","length","_toConsumableArray"],"mappings":"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"}