{"version":3,"file":"useOptions.cjs","sources":["../../../src/components/Combobox/useOptions.ts"],"sourcesContent":["import { useCallback, useId, useMemo } from 'react'\nimport innerText from 'react-innertext'\n\nimport { areItemsEqual, convertMatchableString } from './helper'\n\nimport type { ComboboxItem, ComboboxOption } from './types'\n\nconst defaultIsItemSelected = <T>(\n  targetItem: ComboboxItem<T>,\n  selectedItems: Array<ComboboxItem<T>>,\n) => selectedItems.some((item) => areItemsEqual(item, targetItem))\n\ntype BaseUseOptionsProps<T> = {\n  items: Array<ComboboxItem<T>>\n  creatable?: boolean\n  inputValue?: string\n  isFilteringDisabled?: boolean\n}\n\nexport const useSingleOptions = <T>({\n  selected,\n  ...rest\n}: BaseUseOptionsProps<T> & {\n  selected: ComboboxItem<T> | null\n}) => {\n  const isSelected = useCallback(\n    (item: ComboboxItem<T>) => selected !== null && areItemsEqual(selected, item),\n    [selected],\n  )\n\n  return useOptions<T>(rest, isSelected)\n}\n\nexport const useMultiOptions = <T>({\n  selected,\n  isItemSelected = defaultIsItemSelected,\n  ...rest\n}: BaseUseOptionsProps<T> & {\n  selected: Array<ComboboxItem<T>>\n  isItemSelected?: (targetItem: ComboboxItem<T>, selectedItems: Array<ComboboxItem<T>>) => boolean\n}) => {\n  const isSelected = useCallback(\n    (item: ComboboxItem<T>) => isItemSelected(item, selected),\n    [selected, isItemSelected],\n  )\n\n  return useOptions<T>(rest, isSelected)\n}\n\nfunction useOptions<T>(\n  { items, creatable, inputValue = '', isFilteringDisabled = false }: BaseUseOptionsProps<T>,\n  isSelected: (item: ComboboxItem<T>) => boolean,\n) {\n  const newItemId = useId()\n  const optionIdPrefix = useId()\n\n  const existedOptions: Array<ComboboxOption<T>> = useMemo(\n    () =>\n      items.map((item, i) => ({\n        id: `${optionIdPrefix}-${i}`,\n        selected: isSelected(item),\n        isNew: false,\n        item,\n      })),\n    [isSelected, items, optionIdPrefix],\n  )\n  const addingOption: ComboboxOption<T> | null = useMemo(\n    () =>\n      creatable && inputValue && items.every((item) => item.label !== inputValue)\n        ? {\n            id: newItemId,\n            isNew: true,\n            selected: false,\n            item: { label: inputValue, value: inputValue },\n          }\n        : null,\n    [inputValue, items, creatable, newItemId],\n  )\n\n  const allOptions: Array<ComboboxOption<T>> = useMemo(\n    () => (addingOption ? [addingOption, ...existedOptions] : existedOptions),\n    [existedOptions, addingOption],\n  )\n\n  const options = useMemo(() => {\n    if (isFilteringDisabled || !inputValue) {\n      return allOptions\n    }\n\n    return allOptions.filter(({ item: { label } }) =>\n      convertMatchableString(innerText(label)).includes(convertMatchableString(inputValue)),\n    )\n  }, [allOptions, inputValue, isFilteringDisabled])\n\n  return {\n    options,\n  }\n}\n"],"names":["areItemsEqual","useCallback","useId","useMemo","convertMatchableString","innerText"],"mappings":";;;;;;AAOA,MAAM,qBAAqB,GAAG,CAC5B,UAA2B,EAC3B,aAAqC,KAClC,aAAa,CAAC,IAAI,CAAC,CAAC,IAAI,KAAKA,wCAAa,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC;AAS3D,MAAM,gBAAgB,GAAG,CAAI,EAClC,QAAQ,EACR,GAAG,IAAI,EAGR,KAAI;IACH,MAAM,UAAU,GAAGC,iBAAW,CAC5B,CAAC,IAAqB,KAAK,QAAQ,KAAK,IAAI,IAAID,wCAAa,CAAC,QAAQ,EAAE,IAAI,CAAC,EAC7E,CAAC,QAAQ,CAAC,CACX;AAED,IAAA,OAAO,UAAU,CAAI,IAAI,EAAE,UAAU,CAAC;AACxC;AAEO,MAAM,eAAe,GAAG,CAAI,EACjC,QAAQ,EACR,cAAc,GAAG,qBAAqB,EACtC,GAAG,IAAI,EAIR,KAAI;IACH,MAAM,UAAU,GAAGC,iBAAW,CAC5B,CAAC,IAAqB,KAAK,cAAc,CAAC,IAAI,EAAE,QAAQ,CAAC,EACzD,CAAC,QAAQ,EAAE,cAAc,CAAC,CAC3B;AAED,IAAA,OAAO,UAAU,CAAI,IAAI,EAAE,UAAU,CAAC;AACxC;AAEA,SAAS,UAAU,CACjB,EAAE,KAAK,EAAE,SAAS,EAAE,UAAU,GAAG,EAAE,EAAE,mBAAmB,GAAG,KAAK,EAA0B,EAC1F,UAA8C,EAAA;AAE9C,IAAA,MAAM,SAAS,GAAGC,WAAK,EAAE;AACzB,IAAA,MAAM,cAAc,GAAGA,WAAK,EAAE;AAE9B,IAAA,MAAM,cAAc,GAA6BC,aAAO,CACtD,MACE,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC,MAAM;AACtB,QAAA,EAAE,EAAE,CAAA,EAAG,cAAc,CAAA,CAAA,EAAI,CAAC,CAAA,CAAE;AAC5B,QAAA,QAAQ,EAAE,UAAU,CAAC,IAAI,CAAC;AAC1B,QAAA,KAAK,EAAE,KAAK;QACZ,IAAI;KACL,CAAC,CAAC,EACL,CAAC,UAAU,EAAE,KAAK,EAAE,cAAc,CAAC,CACpC;IACD,MAAM,YAAY,GAA6BA,aAAO,CACpD,MACE,SAAS,IAAI,UAAU,IAAI,KAAK,CAAC,KAAK,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,KAAK,KAAK,UAAU;AACxE,UAAE;AACE,YAAA,EAAE,EAAE,SAAS;AACb,YAAA,KAAK,EAAE,IAAI;AACX,YAAA,QAAQ,EAAE,KAAK;YACf,IAAI,EAAE,EAAE,KAAK,EAAE,UAAU,EAAE,KAAK,EAAE,UAAU,EAAE;AAC/C;AACH,UAAE,IAAI,EACV,CAAC,UAAU,EAAE,KAAK,EAAE,SAAS,EAAE,SAAS,CAAC,CAC1C;AAED,IAAA,MAAM,UAAU,GAA6BA,aAAO,CAClD,OAAO,YAAY,GAAG,CAAC,YAAY,EAAE,GAAG,cAAc,CAAC,GAAG,cAAc,CAAC,EACzE,CAAC,cAAc,EAAE,YAAY,CAAC,CAC/B;AAED,IAAA,MAAM,OAAO,GAAGA,aAAO,CAAC,MAAK;AAC3B,QAAA,IAAI,mBAAmB,IAAI,CAAC,UAAU,EAAE;AACtC,YAAA,OAAO,UAAU;QACnB;AAEA,QAAA,OAAO,UAAU,CAAC,MAAM,CAAC,CAAC,EAAE,IAAI,EAAE,EAAE,KAAK,EAAE,EAAE,KAC3CC,iDAAsB,CAACC,KAAS,CAAC,KAAK,CAAC,CAAC,CAAC,QAAQ,CAACD,iDAAsB,CAAC,UAAU,CAAC,CAAC,CACtF;IACH,CAAC,EAAE,CAAC,UAAU,EAAE,UAAU,EAAE,mBAAmB,CAAC,CAAC;IAEjD,OAAO;QACL,OAAO;KACR;AACH;;;;;"}