{"version":3,"file":"useSelectOptions.mjs","sources":["../../../../components/select/hooks/useSelectOptions.ts"],"sourcesContent":["import { computed, Slots, Ref, ref } from 'vue';\nimport { get, omit, isArray, isFunction } from 'lodash-es';\n\nimport { useChildComponentSlots } from '@tdesign/hooks';\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 restOption = omit(option, [value, label, disabled]) as Partial<TdOptionProps>;\n          const res = {\n            ...restOption,\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","restOption","omit","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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"}