{"version":3,"file":"useAllowCreate.mjs","sources":["../../../../../packages/components/select/src/useAllowCreate.ts"],"sourcesContent":["import { computed, ref } from 'vue'\nimport type { ISelectProps } from './token'\nimport type { Option } from './select.types'\nimport type { ComputedRef } from 'vue'\n\nexport function useAllowCreate(\n  props: ISelectProps,\n  states: Record<string, any>,\n  optionsMap: ComputedRef<\n    Map<\n      string | number,\n      {\n        index: number\n        option: Option\n      }\n    >\n  >\n) {\n  const createOptionCount = ref(0)\n  const cachedSelectedOption = ref<any>(null)\n\n  const enableAllowCreateMode = computed(() => {\n    return props.allowCreate && props.filterable\n  })\n\n  function hasExistingOption(query: string) {\n    // const hasValue = option => option[props.valueKey] === query\n    return optionsMap.value.has(query)\n    // return (\n    //   (props.options && props.options.some(hasValue)) ||\n    //   states.createdOptions.some(hasValue)\n    // )\n  }\n\n  function selectNewOption(option: any) {\n    if (!enableAllowCreateMode.value) return\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) return\n\n    if (query && query.length > 0 && !hasExistingOption(query)) {\n      const newOption = {\n        [props.valueKey]: query,\n        [props.labelKey]: query,\n        created: true,\n        disabled: false\n      }\n\n      if (states.createdOptions.length >= createOptionCount.value) {\n        states.createdOptions[createOptionCount.value] = newOption\n      } else {\n        states.createdOptions.push(newOption)\n      }\n      return newOption\n    } else {\n\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 (\n      !enableAllowCreateMode.value ||\n      !option ||\n      !option.created ||\n      (option.created &&\n        props.reserveKeyword &&\n        states.inputValue === option[props.labelKey])\n    ) {\n      return\n    }\n    const idx = states.createdOptions.findIndex(\n      it => it.value === option[props.valueKey]\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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"}