{"version":3,"file":"useSearchOptions.cjs","sources":["../../../../../../../packages/vue-components/vc-cascader/src/hooks/useSearchOptions.ts"],"sourcesContent":["import type { Ref } from 'vue';\nimport type { DefaultOptionType, InternalFieldNames, ShowSearchType } from '../Cascader';\nimport { isNumber } from 'lodash-es';\nimport { computed } from 'vue';\n\nexport const SEARCH_MARK = '__rc_cascader_search_mark__';\n\nconst defaultFilter: ShowSearchType['filter'] = (search, options, { label }) => options.some(opt => String(opt[label]).toLowerCase().includes(search.toLowerCase()));\n\nconst defaultRender: ShowSearchType['render'] = ({ path, fieldNames }) =>\n  path.map(opt => opt[fieldNames.label]).join(' / ');\n\nexport default (\n  search: Ref<string>,\n  options: Ref<DefaultOptionType[]>,\n  fieldNames: Ref<InternalFieldNames>,\n  prefixCls: Ref<string>,\n  config: Ref<ShowSearchType>,\n  changeOnSelect: Ref<boolean>,\n) => {\n  return computed(() => {\n    const { filter = defaultFilter, render = defaultRender, limit = 50, sort } = config.value;\n    const filteredOptions: DefaultOptionType[] = [];\n    if (!search.value)\n      return [];\n\n    function dig(list: DefaultOptionType[], pathOptions: DefaultOptionType[]) {\n      list.forEach((option) => {\n        // Perf saving when `sort` is disabled and `limit` is provided\n        if (!sort && isNumber(limit) && limit > 0 && filteredOptions.length >= limit)\n          return;\n\n        const connectedPathOptions = [...pathOptions, option];\n        const children = option[fieldNames.value.children];\n\n        // If current option is filterable\n        if (\n          // If is leaf option\n          !children\n          || children.length === 0\n          // If is changeOnSelect\n          || changeOnSelect.value\n        ) {\n          if (filter(search.value, connectedPathOptions, { label: fieldNames.value.label })) {\n            filteredOptions.push({\n              ...option,\n              [fieldNames.value.label as 'label']: render({\n                inputValue: search.value,\n                path: connectedPathOptions,\n                prefixCls: prefixCls.value,\n                fieldNames: fieldNames.value,\n              }),\n              [SEARCH_MARK]: connectedPathOptions,\n            });\n          }\n        }\n\n        if (children)\n          dig(option[fieldNames.value.children] as DefaultOptionType[], connectedPathOptions);\n      });\n    }\n\n    dig(options.value, []);\n\n    // Do sort\n    if (sort) {\n      filteredOptions.sort((a, b) => {\n        return sort(a[SEARCH_MARK], b[SEARCH_MARK], search.value, fieldNames.value);\n      });\n    }\n\n    return isNumber(limit) && limit > 0 ? filteredOptions.slice(0, limit as number) : filteredOptions;\n  });\n};\n"],"names":["computed","isNumber"],"mappings":"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"}