element-plus
Version:
A Component Library for Vue 3
1 lines • 6.34 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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"}