You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

0 lines
8.3 KiB

1 month ago
  1. {"ast":null,"code":"import { ref, computed } from 'vue';\nimport { useProps } from './useProps.mjs';\nfunction useAllowCreate(props, states) {\n const {\n aliasProps,\n getLabel,\n getValue\n } = useProps(props);\n const createOptionCount = ref(0);\n const cachedSelectedOption = ref();\n const enableAllowCreateMode = computed(() => {\n return props.allowCreate && props.filterable;\n });\n function hasExistingOption(query) {\n const hasOption = option => getLabel(option) === query;\n return props.options && props.options.some(hasOption) || states.createdOptions.some(hasOption);\n }\n function selectNewOption(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 function createNewOption(query) {\n if (enableAllowCreateMode.value) {\n if (query && query.length > 0) {\n if (hasExistingOption(query)) {\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 function removeNewOption(option) {\n if (!enableAllowCreateMode.value || !option || !option.created || option.created && props.reserveKeyword && states.inputValue === getLabel(option)) {\n return;\n }\n const idx = states.createdOptions.findIndex(it => getValue(it) === getValue(option));\n if (~idx) {\n states.createdOptions.splice(idx, 1);\n createOptionCount.value--;\n }\n }\n function clearAllNewOption() {\n if (enableAllowCreateMode.value) {\n states.createdOptions.length = 0;\n createOptionCount.value = 0;\n }\n }\n return {\n createNewOption,\n removeNewOption,\n selectNewOption,\n clearAllNewOption\n };\n}\nexport { useAllowCreate };","map":{"version":3,"names":["useAllowCreate","props","states","aliasProps","getLabel","getValue","useProps","createOptionCount","ref","cachedSelectedOption","enableAllowCreateMode","computed","allowCreate","filterable","hasExistingOption","query","hasOption","option","options","some","createdOptions","selectNewOption","value","multiple","created","createNewOption","length","newOption","label","disabled","push","selectedOption","removeNewOption","reserveKeyword","inputValue","idx","findIndex","it","splice","clearAllNewOption"],"sources":["../../../../../../packages/components/select-v2/src/useAllowCreate.ts"],"sourcesContent":["import { computed, ref } from 'vue'\nimport { useProps } from './useProps'\nimport type { ISelectV2Props } from './token'\nimport type { Option, SelectStates } from './select.types'\n\nexport function useAllowCreate(props: ISelectV2Props, 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 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\