element-plus
Version:
A Component Library for Vue 3
1 lines • 6.49 kB
Source Map (JSON)
{"version":3,"file":"useAllowCreate.mjs","sources":["../../../../../../packages/components/select-v2/src/useAllowCreate.ts"],"sourcesContent":["import { computed, ref, watch } from 'vue'\nimport { useProps } from './useProps'\n\nimport type { SelectV2Props } from './token'\nimport type { Option, SelectStates } from './select.types'\n\nexport function useAllowCreate(props: SelectV2Props, states: SelectStates) {\n const { aliasProps, getLabel, getValue } = useProps(props)\n\n const createOptionCount = ref(0)\n const cachedSelectedOption = ref<Option>()\n\n const enableAllowCreateMode = computed(() => {\n return props.allowCreate && props.filterable\n })\n\n watch(\n () => props.options,\n (options) => {\n const optionLabelsSet = new Set(options.map((option) => getLabel(option)))\n states.createdOptions = states.createdOptions.filter(\n (createdOption) => !optionLabelsSet.has(getLabel(createdOption))\n )\n }\n )\n\n function hasExistingOption(query: string) {\n const hasOption = (option: Option) => getLabel(option) === query\n return (\n (props.options && props.options.some(hasOption)) ||\n states.createdOptions.some(hasOption)\n )\n }\n\n function selectNewOption(option: Option) {\n if (!enableAllowCreateMode.value) {\n return\n }\n if (props.multiple && option.created) {\n createOptionCount.value++\n } else {\n cachedSelectedOption.value = option\n }\n }\n\n function createNewOption(query: string) {\n if (enableAllowCreateMode.value) {\n if (query && query.length > 0) {\n if (hasExistingOption(query)) {\n states.createdOptions = states.createdOptions.filter(\n (createdOption) => getLabel(createdOption) !== states.previousQuery\n )\n return\n }\n const newOption = {\n [aliasProps.value.value]: query,\n [aliasProps.value.label]: query,\n created: true,\n [aliasProps.value.disabled]: false,\n }\n if (states.createdOptions.length >= createOptionCount.value) {\n states.createdOptions[createOptionCount.value] = newOption\n } else {\n states.createdOptions.push(newOption)\n }\n } else {\n if (props.multiple) {\n states.createdOptions.length = createOptionCount.value\n } else {\n const selectedOption = cachedSelectedOption.value\n states.createdOptions.length = 0\n if (selectedOption && selectedOption.created) {\n states.createdOptions.push(selectedOption)\n }\n }\n }\n }\n }\n\n function removeNewOption(option: Option) {\n if (\n !enableAllowCreateMode.value ||\n !option ||\n !option.created ||\n (option.created &&\n props.reserveKeyword &&\n states.inputValue === getLabel(option))\n ) {\n return\n }\n const idx = states.createdOptions.findIndex(\n (it) => getValue(it) === getValue(option)\n )\n if (~idx) {\n states.createdOptions.splice(idx, 1)\n createOptionCount.value--\n }\n }\n\n function clearAllNewOption() {\n if (enableAllowCreateMode.value) {\n states.createdOptions.length = 0\n createOptionCount.value = 0\n }\n }\n\n return {\n createNewOption,\n removeNewOption,\n selectNewOption,\n clearAllNewOption,\n }\n}\n"],"names":[],"mappings":"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"}