{"version":3,"file":"useAllowCreate.mjs","sources":["../../../../../../packages/components/select-v2/src/useAllowCreate.ts"],"sourcesContent":["import { computed, ref } from 'vue'\nimport type { ISelectProps } from './token'\nimport type { Option } from './select.types'\n\nexport function useAllowCreate(props: ISelectProps, states) {\n  const createOptionCount = ref(0)\n  const cachedSelectedOption = ref<Option>(null)\n\n  const enableAllowCreateMode = computed(() => {\n    return props.allowCreate && props.filterable\n  })\n\n  function hasExistingOption(query: string) {\n    const hasValue = (option) => option.value === query\n    return (\n      (props.options && props.options.some(hasValue)) ||\n      states.createdOptions.some(hasValue)\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 && !hasExistingOption(query)) {\n        const newOption = {\n          value: query,\n          label: query,\n          created: true,\n          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 (!enableAllowCreateMode.value || !option || !option.created) {\n      return\n    }\n    const idx = states.createdOptions.findIndex(\n      (it) => it.value === option.value\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":";;wBAI+B,OAAqB,QAAQ;AAC1D,QAAM,oBAAoB,IAAI;AAC9B,QAAM,uBAAuB,IAAY;AAEzC,QAAM,wBAAwB,SAAS,MAAM;AAC3C,WAAO,MAAM,eAAe,MAAM;AAAA;AAGpC,6BAA2B,OAAe;AACxC,UAAM,WAAW,CAAC,WAAW,OAAO,UAAU;AAC9C,WACG,MAAM,WAAW,MAAM,QAAQ,KAAK,aACrC,OAAO,eAAe,KAAK;AAAA;AAI/B,2BAAyB,QAAgB;AACvC,QAAI,CAAC,sBAAsB,OAAO;AAChC;AAAA;AAEF,QAAI,MAAM,YAAY,OAAO,SAAS;AACpC,wBAAkB;AAAA,WACb;AACL,2BAAqB,QAAQ;AAAA;AAAA;AAIjC,2BAAyB,OAAe;AACtC,QAAI,sBAAsB,OAAO;AAC/B,UAAI,SAAS,MAAM,SAAS,KAAK,CAAC,kBAAkB,QAAQ;AAC1D,cAAM,YAAY;AAAA,UAChB,OAAO;AAAA,UACP,OAAO;AAAA,UACP,SAAS;AAAA,UACT,UAAU;AAAA;AAEZ,YAAI,OAAO,eAAe,UAAU,kBAAkB,OAAO;AAC3D,iBAAO,eAAe,kBAAkB,SAAS;AAAA,eAC5C;AACL,iBAAO,eAAe,KAAK;AAAA;AAAA,aAExB;AACL,YAAI,MAAM,UAAU;AAClB,iBAAO,eAAe,SAAS,kBAAkB;AAAA,eAC5C;AACL,gBAAM,iBAAiB,qBAAqB;AAC5C,iBAAO,eAAe,SAAS;AAC/B,cAAI,kBAAkB,eAAe,SAAS;AAC5C,mBAAO,eAAe,KAAK;AAAA;AAAA;AAAA;AAAA;AAAA;AAOrC,2BAAyB,QAAgB;AACvC,QAAI,CAAC,sBAAsB,SAAS,CAAC,UAAU,CAAC,OAAO,SAAS;AAC9D;AAAA;AAEF,UAAM,MAAM,OAAO,eAAe,UAChC,CAAC,OAAO,GAAG,UAAU,OAAO;AAE9B,QAAI,CAAC,KAAK;AACR,aAAO,eAAe,OAAO,KAAK;AAClC,wBAAkB;AAAA;AAAA;AAItB,+BAA6B;AAC3B,QAAI,sBAAsB,OAAO;AAC/B,aAAO,eAAe,SAAS;AAC/B,wBAAkB,QAAQ;AAAA;AAAA;AAI9B,SAAO;AAAA,IACL;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA;AAAA;;;;"}