{"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":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAcO,IAAA,gBAAA,GAAA,SAAA,gBAAA,CAAA,KAAA,EAAA,IAAA,EAAA,UAAA,EAAA;AACL,EAAA,IAAA,sBAAA,GAAA,sBAAA,EAAA,CAAA;AACM,EAAA,IAAA,YAAA,GAAA,GAAA,CAAA,EAAA,CAAA,CAAA;AAEA,EAAA,IAAA,OAAA,GAAA,QAAA,CAAA,YAAA;AAAyB,IAAA,IAAA,cAAA,CAAA;;AAI7B,IAAA,IAAA,YAAA,GAAA,CAAA,CAAA,cAAA,GAAA,KAAA,CAAA,OAAA,MAAA,IAAA,IAAA,cAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,cAAA,CAAA,GAAA,CAAA,UAAA,MAAA,EAAA;AAEU,MAAA,IAAA,eAAA,GAAA,SAAA,eAAA,CAAA,OAAA,EAAA;AACJ,QAAA,IAAA,WAAA,GAAA,IAAA,CAAA,KAAA;;;;AACA,QAAA,IAAA,GAAA,GAAA,aAAA,CAAA,aAAA,CAAA,EAAA,EAAA,OAAA,CAAA,EAAA,EAAA,EAAA;AAEEA,UAAAA,KAAAA,EAAAA,YAAAA;AACAC,UAAAA,KAAAA,EAAAA,KAAAA,CAAAA,OAAAA,EAAAA,KAAAA,CAAAA;AACAC,UAAAA,KAAAA,EAAAA,KAAAA,CAAAA,OAAAA,EAAAA,KAAAA,CAAAA;AACAC,UAAAA,QAAAA,EAAAA,KAAAA,CAAAA,OAAAA,EAAAA,QAAAA,CAAAA;;AAEFC,QAAAA,YAAAA,EAAAA,CAAAA;AACO,QAAA,OAAA,GAAA,CAAA;;AAEJ,MAAA,IAAA,MAAA,CAAA,KAAA,IAAA,MAAA,CAAA,QAAA,EAAA;AACI,QAAA,OAAA,aAAA,CAAA,aAAA,CAAA,EAAA,EAAA,MAAA,CAAA,EAAA,EAAA,EAAA;;;AAEiF,WAAA,CAAA;AAAA,SAAA,CAAA,CAAA;AAE1F,OAAA;;;AAKE,IAAA,IAAA,YAAA,GAAA,sBAAA,CAAA,QAAA,CAAA,CAAA;AACA,IAAA,IAAA,UAAA,GAAA,sBAAA,CAAA,aAAA,CAAA,CAAA;AAEF,IAAA,IAAAC,SAAA,CAAA,UAAA,CAAA,EAAA;AAAqB,MAAA,IAAA,SAAA,GAAA,0BAAA,CAAA,UAAA,CAAA;;AACS,MAAA,IAAA;;AAAA,UAAA,IAAA,YAAA,EAAA,KAAA,EAAA,MAAA,CAAA;AAAA,UAAA,IAAA,KAAA,GAAA,KAAA,CAAA,KAAA,CAAA;AAC9B,UAAA,IAAA,WAAA,GAAA,aAAA,CAAA,aAAA,CAAA;;;AAGEC,YAAAA,QAAAA,EAAAA,EAAAA;;AAEI,UAAA,IAAA,GAAA,GAAA,KAAA,CAAA,QAAA,CAAA,SAAA,CAAA,EAAA,CAAA;;AACqC,UAAA,IAAA,UAAA,GAAA,0BAAA,CAAA,GAAA,KAAA,IAAA,IAAA,GAAA,KAAA,KAAA,CAAA,IAAA,CAAA,MAAA,GAAA,GAAA,CAAA,CAAA,CAAA,MAAA,IAAA,IAAA,MAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,MAAA,CAAA,QAAA,CAAA;;AACQ,UAAA,IAAA;;AAAA,cAAA,IAAA,KAAA,GAAA,MAAA,CAAA,KAAA,CAAA;;;AAI/CN,gBAAAA,KAAAA,EAAAA,YAAAA;AAAO,eAAA,CAAA,CAAA,CAAA;AAETI,cAAAA,YAAAA,EAAAA,CAAAA;AACF,aAAA;AAAA,WAAA,CAAA,OAAA,GAAA,EAAA;;AAAA,WAAA,SAAA;AAAAG,YAAAA,UAAAA,CAAAA,CAAAA,EAAAA,CAAAA;AAAA,WAAA;AAEAC,UAAAA,YAAAA,CAAAA,IAAAA,CAAAA,WAAAA,CAAAA,CAAAA;AACF,SAAA;AAAA,OAAA,CAAA,OAAA,GAAA,EAAA;;AAAA,OAAA,SAAA;AAAAC,QAAAA,SAAAA,CAAAA,CAAAA,EAAAA,CAAAA;AAAA,OAAA;AACF,KAAA;AACI,IAAA,IAAAJ,SAAA,CAAA,YAAA,CAAA,EAAA;AAAuB,MAAA,IAAA,UAAA,GAAA,0BAAA,CAAA,YAAA,CAAA;;AACS,MAAA,IAAA;;AAAA,UAAA,IAAA,MAAA,GAAA,MAAA,CAAA,KAAA,CAAA;;;AAI9BL,YAAAA,KAAAA,EAAAA,YAAAA;AAAO,WAAA,CAAA,CAAA,CAAA;AAETI,UAAAA,YAAAA,EAAAA,CAAAA;AACF,SAAA;AAAA,OAAA,CAAA,OAAA,GAAA,EAAA;;AAAA,OAAA,SAAA;AAAAM,QAAAA,UAAAA,CAAAA,CAAAA,EAAAA,CAAAA;AAAA,OAAA;AACF,KAAA;AACO,IAAA,OAAA,YAAA,CAAA;AACT,GAAA,CAAA,CAAA;AAEM,EAAA,IAAA,WAAA,GAAA,QAAA,CAAA,YAAA;;AAEE,IAAA,IAAA,cAAA,GAAA,SAAA,cAAA,CAAA,QAAA,EAAA;AAA+C,MAAA,IAAA,UAAA,GAAA,0BAAA,CAAA,QAAA,CAAA;;AACrB,MAAA,IAAA;;AAAA,UAAA,IAAA,MAAA,GAAA,MAAA,CAAA,KAAA,CAAA;;AAE1BC,YAAAA,cAAAA,CAAAA,MAAAA,CAAAA,QAAAA,CAAAA,CAAAA;AACF,WAAA,MAAA;AACEC,YAAAA,GAAAA,CAAAA,IAAAA,CAAAA,MAAAA,CAAAA,CAAAA;AACF,WAAA;AACF,SAAA;AAAA,OAAA,CAAA,OAAA,GAAA,EAAA;;AAAA,OAAA,SAAA;AAAAC,QAAAA,UAAAA,CAAAA,CAAAA,EAAAA,CAAAA;AAAA,OAAA;;AAEFF,IAAAA,cAAAA,CAAAA,OAAAA,CAAAA,KAAAA,CAAAA,CAAAA;AACO,IAAA,OAAA,GAAA,CAAA;AACT,GAAA,CAAA,CAAA;AAEM,EAAA,IAAA,UAAA,GAAA,QAAA,CAAA,YAAA;AACE,IAAA,IAAA,GAAA,kBAAA,IAAA,GAAA,EAAA,CAAA;AAENG,IAAAA,YAAAA,CAAAA,KAAAA,CAAAA,MAAAA,CAAAA,WAAAA,CAAAA,KAAAA,CAAAA,CAAAA,OAAAA,CAAAA,UAAAA,MAAAA,EAAAA;;AAEA,KAAA,CAAA,CAAA;AACO,IAAA,OAAA,GAAA,CAAA;AACT,GAAA,CAAA,CAAA;AAEM,EAAA,IAAA,cAAA,GAAA,QAAA,CAAA,YAAA;;AAGE,IAAA,IAAA,aAAA,GAAA,SAAA,aAAA,CAAA,MAAA,EAAA;;AACA,MAAA,IAAAC,YAAA,CAAA,KAAA,CAAA,MAAA,CAAA,EAAA;;AAEJ,OAAA;AAEO,MAAA,OAAA,CAAA,CAAA,aAAA,GAAA,MAAA,CAAA,KAAA,MAAA,IAAA,IAAA,aAAA,KAAA,KAAA,CAAA,IAAA,CAAA,qBAAA,GAAA,aAAA,CAAA,WAAA,MAAA,IAAA,IAAA,qBAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,qBAAA,CAAA,IAAA,CAAA,aAAA,CAAA,CAAA,OAAA,CAAA,EAAA,CAAA,MAAA,CAAA,UAAA,CAAA,KAAA,CAAA,CAAA,WAAA,EAAA,CAAA,IAAA,CAAA,CAAA,CAAA;;;AAKDC,IAAAA,OAAAA,CAAAA,KAAAA,CAAAA,OAAAA,CAAAA,UAAAA,MAAAA,EAAAA;AACD,MAAA,IAAA,MAAA,CAAA,KAAA,IAAA,MAAA,CAAA,QAAA,EAAA;AACHJ,QAAAA,GAAAA,CAAAA,IAAAA,CAAAA,aAAAA,CAAAA,aAAAA,CAAAA,EAAAA,EAAAA,MAAAA,CAAAA,EAAAA,EAAAA,EAAAA;AAEEN,UAAAA,QAAAA,EAAAA,MAAAA,CAAAA,QAAAA,CAAAA,MAAAA,CAAAA,aAAAA,CAAAA;AAAqE,SAAA,CAAA,CAAA,CAAA;AAEzE,OAAA;AACI,MAAA,IAAA,aAAA,CAAA,MAAA,CAAA,EAAA;AACFM,QAAAA,GAAAA,CAAAA,IAAAA,CAAAA,MAAAA,CAAAA,CAAAA;AACF,OAAA;AACF,KAAA,CAAA,CAAA;AAEO,IAAA,OAAA,GAAA,CAAA;AACT,GAAA,CAAA,CAAA;;AAGEI,IAAAA,OAAAA,EAAAA,OAAAA;AACAC,IAAAA,UAAAA,EAAAA,UAAAA;AACAC,IAAAA,WAAAA,EAAAA,WAAAA;AACAJ,IAAAA,YAAAA,EAAAA,YAAAA;AACAK,IAAAA,cAAAA,EAAAA,cAAAA;;AAEJ;;;;"}