xdesign-vue-next
Version:
XDesign Component for vue-next
1 lines • 9.32 kB
Source Map (JSON)
{"version":3,"file":"useSelectOptions.mjs","sources":["../../../src/select/hooks/useSelectOptions.ts"],"sourcesContent":["import { computed, Slots, VNode, Ref, ref } from 'vue';\nimport isArray from 'lodash/isArray';\nimport get from 'lodash/get';\nimport isFunction from 'lodash/isFunction';\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\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),\n };\n dynamicIndex++;\n return res;\n };\n if ((option as SelectOptionGroup).group && (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 = (group.children as Slots).default();\n if (!(isArray(res) && !!res[0]?.children)) continue;\n for (const child of res?.[0]?.children as VNode[]) {\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).group) {\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 displayOptions = computed(() => {\n if (!inputValue.value || !(props.filterable || isFunction(props.filter))) return options.value;\n\n const filterMethods = (option: SelectOption) => {\n if (isFunction(props.filter)) {\n return props.filter(`${inputValue.value}`, option);\n }\n\n return option.label?.toLowerCase?.().indexOf(`${inputValue.value}`.toLowerCase()) > -1;\n };\n\n const res: SelectOption[] = [];\n\n options.value.forEach((option) => {\n if ((option as SelectOptionGroup).group && (option as SelectOptionGroup).children) {\n res.push({\n ...option,\n children: (option as SelectOptionGroup).children.filter(filterMethods),\n });\n }\n if (filterMethods(option)) {\n res.push(option);\n }\n });\n\n return res;\n });\n\n return {\n options,\n optionsMap,\n optionsList,\n optionsCache,\n displayOptions,\n };\n};\n"],"names":["index","label","value","disabled","dynamicIndex","isArray","children","_iterator2","innerOptions","_iterator","_iterator3","getOptionsList","res","_iterator4","optionsCache","isFunction","options","optionsMap","optionsList","displayOptions"],"mappings":"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"}