{"version":3,"file":"useOptions.cjs","sources":["../../../../../../../packages/vue-components/vc-select/src/hooks/useOptions.ts"],"sourcesContent":["import type { Ref } from 'vue';\nimport type { FieldNames, RawValueType } from '../Select';\nimport { shallowRef, toRaw, watch, watchEffect } from 'vue';\nimport { convertChildrenToData } from '../utils/legacyUtil';\n\n/**\n * Parse `children` to `options` if `options` is not provided.\n * Then flatten the `options`.\n */\nexport default function useOptions<OptionType>(\n  options: Ref<OptionType[]>,\n  children: Ref<any>,\n  fieldNames: Ref<FieldNames>,\n) {\n  const mergedOptions = shallowRef();\n  const valueOptions = shallowRef();\n  const labelOptions = shallowRef();\n  const tempMergedOptions = shallowRef([]);\n  watch(\n    [options, children],\n    () => {\n      if (options.value)\n        tempMergedOptions.value = toRaw(options.value).slice();\n      else\n        tempMergedOptions.value = convertChildrenToData(children.value);\n    },\n    { immediate: true, deep: true },\n  );\n  watchEffect(() => {\n    const newOptions = tempMergedOptions.value;\n\n    const newValueOptions = new Map<RawValueType, OptionType>();\n    const newLabelOptions = new Map<any, OptionType>();\n    const fieldNamesValue = fieldNames.value;\n    function dig(optionList: OptionType[], isChildren = false) {\n      // for loop to speed up collection speed\n      for (let i = 0; i < optionList.length; i += 1) {\n        const option = optionList[i];\n        if (!option[fieldNamesValue.options] || isChildren) {\n          newValueOptions.set(option[fieldNamesValue.value], option);\n          newLabelOptions.set(option[fieldNamesValue.label], option);\n        } else {\n          dig(option[fieldNamesValue.options], true);\n        }\n      }\n    }\n    dig(newOptions);\n    mergedOptions.value = newOptions;\n    valueOptions.value = newValueOptions;\n    labelOptions.value = newLabelOptions;\n  });\n  return {\n    options: mergedOptions,\n    valueOptions,\n    labelOptions,\n  };\n}\n"],"names":["shallowRef","watch","toRaw","convertChildrenToData","watchEffect"],"mappings":";;;;;;;AASwB,SAAA,UAAA,CACtB,OACA,EAAA,QAAA,EACA,UACA,EAAA;AACA,EAAA,MAAM,gBAAgBA,cAAW,EAAA,CAAA;AACjC,EAAA,MAAM,eAAeA,cAAW,EAAA,CAAA;AAChC,EAAA,MAAM,eAAeA,cAAW,EAAA,CAAA;AAChC,EAAM,MAAA,iBAAA,GAAoBA,cAAW,CAAA,EAAE,CAAA,CAAA;AACvC,EAAAC,SAAA;AAAA,IACE,CAAC,SAAS,QAAQ,CAAA;AAAA,IAClB,MAAM;AACJ,MAAA,IAAI,OAAQ,CAAA,KAAA;AACV,QAAA,iBAAA,CAAkB,KAAQ,GAAAC,SAAA,CAAM,OAAQ,CAAA,KAAK,EAAE,KAAM,EAAA,CAAA;AAAA;AAErD,QAAkB,iBAAA,CAAA,KAAA,GAAQC,gCAAsB,CAAA,QAAA,CAAS,KAAK,CAAA,CAAA;AAAA,KAClE;AAAA,IACA,EAAE,SAAA,EAAW,IAAM,EAAA,IAAA,EAAM,IAAK,EAAA;AAAA,GAChC,CAAA;AACA,EAAAC,eAAA,CAAY,MAAM;AAChB,IAAA,MAAM,aAAa,iBAAkB,CAAA,KAAA,CAAA;AAErC,IAAM,MAAA,eAAA,uBAAsB,GAA8B,EAAA,CAAA;AAC1D,IAAM,MAAA,eAAA,uBAAsB,GAAqB,EAAA,CAAA;AACjD,IAAA,MAAM,kBAAkB,UAAW,CAAA,KAAA,CAAA;AACnC,IAAS,SAAA,GAAA,CAAI,UAA0B,EAAA,UAAA,GAAa,KAAO,EAAA;AAEzD,MAAA,KAAA,IAAS,IAAI,CAAG,EAAA,CAAA,GAAI,UAAW,CAAA,MAAA,EAAQ,KAAK,CAAG,EAAA;AAC7C,QAAM,MAAA,MAAA,GAAS,WAAW,CAAC,CAAA,CAAA;AAC3B,QAAA,IAAI,CAAC,MAAA,CAAO,eAAgB,CAAA,OAAO,KAAK,UAAY,EAAA;AAClD,UAAA,eAAA,CAAgB,GAAI,CAAA,MAAA,CAAO,eAAgB,CAAA,KAAK,GAAG,MAAM,CAAA,CAAA;AACzD,UAAA,eAAA,CAAgB,GAAI,CAAA,MAAA,CAAO,eAAgB,CAAA,KAAK,GAAG,MAAM,CAAA,CAAA;AAAA,SACpD,MAAA;AACL,UAAA,GAAA,CAAI,MAAO,CAAA,eAAA,CAAgB,OAAO,CAAA,EAAG,IAAI,CAAA,CAAA;AAAA,SAC3C;AAAA,OACF;AAAA,KACF;AACA,IAAA,GAAA,CAAI,UAAU,CAAA,CAAA;AACd,IAAA,aAAA,CAAc,KAAQ,GAAA,UAAA,CAAA;AACtB,IAAA,YAAA,CAAa,KAAQ,GAAA,eAAA,CAAA;AACrB,IAAA,YAAA,CAAa,KAAQ,GAAA,eAAA,CAAA;AAAA,GACtB,CAAA,CAAA;AACD,EAAO,OAAA;AAAA,IACL,OAAS,EAAA,aAAA;AAAA,IACT,YAAA;AAAA,IACA,YAAA;AAAA,GACF,CAAA;AACF;;;;"}