{"version":3,"file":"useFormSelect-D3gVO4jJ.mjs","names":[],"sources":["../src/composables/useFormSelect.ts"],"sourcesContent":["import {computed, type MaybeRefOrGetter, toValue} from 'vue'\nimport {get} from '../utils/object'\nimport type {ComplexSelectOptionRaw, SelectOption} from '../types'\n\nexport const useFormSelect = (\n  options: MaybeRefOrGetter<ReadonlyArray<unknown>>,\n  props: MaybeRefOrGetter<{\n    valueField: string\n    textField: string\n    disabledField: string\n    optionsField?: string\n    labelField?: string\n  }>\n) => {\n  const isComplex = (option: unknown): option is ComplexSelectOptionRaw =>\n    typeof option === 'object' &&\n    option !== null &&\n    'options' in option &&\n    Array.isArray((option as Record<string, unknown>).options)\n\n  const normalizeOption = (option: unknown): ComplexSelectOptionRaw | SelectOption => {\n    const propsValue = toValue(props)\n\n    if (typeof option === 'string') {\n      return {value: option, text: option} satisfies SelectOption\n    }\n    if (typeof option === 'number' || typeof option === 'boolean') {\n      return {value: option, text: `${option}`} satisfies SelectOption\n    }\n    if (option instanceof Date) {\n      return {value: option, text: option.toLocaleString()} satisfies SelectOption\n    }\n\n    const value: unknown = get(option, propsValue.valueField)\n    const text: string = get(option, propsValue.textField)\n    const disabled: boolean = get(option, propsValue.disabledField)\n\n    const opts: undefined | unknown[] = propsValue.optionsField\n      ? get(option, propsValue.optionsField)\n      : undefined\n    const label: string | undefined =\n      (propsValue.labelField ? get(option, propsValue.labelField) : undefined) || text\n\n    if (opts !== undefined && Array.isArray(opts)) {\n      return {\n        label,\n        options: opts,\n      } as ComplexSelectOptionRaw\n    }\n\n    return {\n      ...(typeof option === 'object' ? option : undefined),\n      value,\n      text,\n      disabled,\n    } satisfies SelectOption\n  }\n\n  const normalizeOptions = (\n    opts: ReadonlyArray<unknown>\n  ): (ComplexSelectOptionRaw | SelectOption)[] => opts.map((option) => normalizeOption(option))\n\n  const normalizedOptions = computed(() => normalizeOptions(toValue(options)))\n\n  return {normalizedOptions, isComplex}\n}\n"],"mappings":";;;AAIA,IAAa,iBACX,SACA,UAOG;CACH,MAAM,aAAa,WACjB,OAAO,WAAW,YAClB,WAAW,QACX,aAAa,UACb,MAAM,QAAS,OAAmC,QAAQ;CAE5D,MAAM,mBAAmB,WAA2D;EAClF,MAAM,aAAa,QAAQ,MAAM;AAEjC,MAAI,OAAO,WAAW,SACpB,QAAO;GAAC,OAAO;GAAQ,MAAM;GAAO;AAEtC,MAAI,OAAO,WAAW,YAAY,OAAO,WAAW,UAClD,QAAO;GAAC,OAAO;GAAQ,MAAM,GAAG;GAAS;AAE3C,MAAI,kBAAkB,KACpB,QAAO;GAAC,OAAO;GAAQ,MAAM,OAAO,gBAAgB;GAAC;EAGvD,MAAM,QAAiB,IAAI,QAAQ,WAAW,WAAW;EACzD,MAAM,OAAe,IAAI,QAAQ,WAAW,UAAU;EACtD,MAAM,WAAoB,IAAI,QAAQ,WAAW,cAAc;EAE/D,MAAM,OAA8B,WAAW,eAC3C,IAAI,QAAQ,WAAW,aAAa,GACpC,KAAA;EACJ,MAAM,SACH,WAAW,aAAa,IAAI,QAAQ,WAAW,WAAW,GAAG,KAAA,MAAc;AAE9E,MAAI,SAAS,KAAA,KAAa,MAAM,QAAQ,KAAK,CAC3C,QAAO;GACL;GACA,SAAS;GACV;AAGH,SAAO;GACL,GAAI,OAAO,WAAW,WAAW,SAAS,KAAA;GAC1C;GACA;GACA;GACD;;CAGH,MAAM,oBACJ,SAC8C,KAAK,KAAK,WAAW,gBAAgB,OAAO,CAAC;AAI7F,QAAO;EAAC,mBAFkB,eAAe,iBAAiB,QAAQ,QAAQ,CAAC,CAAC;EAEjD;EAAU"}