UNPKG

element-plus

Version:

A Component Library for Vue 3

72 lines (70 loc) 2.87 kB
Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' }); const require_runtime = require('../../../_virtual/_rolldown/runtime.js'); const require_useProps = require('./useProps.js'); let vue = require("vue"); //#region ../../packages/components/select-v2/src/useAllowCreate.ts function useAllowCreate(props, states) { const { aliasProps, getLabel, getValue } = require_useProps.useProps(props); const createOptionCount = (0, vue.ref)(0); const cachedSelectedOption = (0, vue.ref)(); const enableAllowCreateMode = (0, vue.computed)(() => { return props.allowCreate && props.filterable; }); (0, vue.watch)(() => props.options, (options) => { const optionLabelsSet = new Set(options.map((option) => getLabel(option))); states.createdOptions = states.createdOptions.filter((createdOption) => !optionLabelsSet.has(getLabel(createdOption))); }); function hasExistingOption(query) { const hasOption = (option) => getLabel(option) === query; return props.options && props.options.some(hasOption) || states.createdOptions.some(hasOption); } function selectNewOption(option) { if (!enableAllowCreateMode.value) return; if (props.multiple && option.created) createOptionCount.value++; else cachedSelectedOption.value = option; } function createNewOption(query) { if (enableAllowCreateMode.value) if (query && query.length > 0) { if (hasExistingOption(query)) { states.createdOptions = states.createdOptions.filter((createdOption) => getLabel(createdOption) !== states.previousQuery); return; } const newOption = { [aliasProps.value.value]: query, [aliasProps.value.label]: query, created: true, [aliasProps.value.disabled]: false }; if (states.createdOptions.length >= createOptionCount.value) states.createdOptions[createOptionCount.value] = newOption; else states.createdOptions.push(newOption); } else if (props.multiple) states.createdOptions.length = createOptionCount.value; else { const selectedOption = cachedSelectedOption.value; states.createdOptions.length = 0; if (selectedOption && selectedOption.created) states.createdOptions.push(selectedOption); } } function removeNewOption(option) { if (!enableAllowCreateMode.value || !option || !option.created || option.created && props.reserveKeyword && states.inputValue === getLabel(option)) return; const idx = states.createdOptions.findIndex((it) => getValue(it) === getValue(option)); if (~idx) { states.createdOptions.splice(idx, 1); createOptionCount.value--; } } function clearAllNewOption() { if (enableAllowCreateMode.value) { states.createdOptions.length = 0; createOptionCount.value = 0; } } return { createNewOption, removeNewOption, selectNewOption, clearAllNewOption }; } //#endregion exports.useAllowCreate = useAllowCreate; //# sourceMappingURL=useAllowCreate.js.map