{"version":3,"file":"use-select.mjs","sources":["../../../../../../packages/components/select/src/use-select.ts"],"sourcesContent":["import { ref ,computed} from 'vue'\nimport type { SetupContext } from 'vue'\nimport { useRequest } from '@el-plus/hooks/use-request'\nimport type { SelectProps, SelectOption, SelectEmits } from './select'\nexport function useSelect(\n  props: SelectProps,\n  emit: SetupContext<SelectEmits>['emit'],\n) {\n  let hasLoaded = false\n  // 已加载的选项(api 请求结果 / props.options / 搜索结果)\n  const loadedOptions = ref<SelectOption[]>([])\n  const { loading, requestFn } = useRequest({\n    api: props.api,\n    method: props.method,\n    reqData: props.reqData,\n    reqParams: props.reqParams,\n    reqBefore: props.reqBefore,\n    reqAfter: props.reqAfter,\n    cancelToken: props.remote,\n    hooks: {\n      success(data) {\n        type OptionArr = SelectOption[]\n        interface OptionObj {\n          list?: OptionArr\n          data?: OptionArr\n        }\n        if (Array.isArray(data)) {\n          loadedOptions.value = data as OptionArr\n        } else if (data && typeof data === 'object') {\n          const rawData = data as OptionObj\n          loadedOptions.value = rawData?.list || rawData?.data || []\n        } else {\n          loadedOptions.value = []\n        }\n        hasLoaded = true\n      },\n      fail(error) {\n        console.error(error)\n      },\n    },\n  })\n  // 回显占位项:value/desc 存在且不在已加载列表中时,补充一项\n  // 由 computed 自动响应 value/desc/loadedOptions 的变化,无需 watch\n  const echoOption = computed<SelectOption[]>(() => {\n    const v = props.modelValue\n    const d = props.desc\n    if ((v || v === 0) && d) {\n      const exists = loadedOptions.value.some(\n        (item: SelectOption) => item[props.valueKey] === v,\n      )\n      if (!exists) {\n        return [{ [props.labelKey]: d, [props.valueKey]: v }]\n      }\n    }\n    return []\n  })\n  // 最终下拉项 = 回显占位 + 已加载\n  const customOptions = computed<SelectOption[]>(() => [\n    ...echoOption.value,\n    ...loadedOptions.value,\n  ])\n  // 加载下拉列表(只负责加载,不处理回显)\n  const loadOptions = () => {\n    if (props.api) {\n      if (!props.lazy && !props.remote) {\n        requestFn!()\n      }\n    } else if (props.options?.length) {\n      loadedOptions.value = props.options\n    }\n  }\n  // 获取选中项\n  const getSelectItem = (value: SelectProps['modelValue']) => {\n    if (Array.isArray(value)) {\n      if (!customOptions.value) return []\n      return customOptions.value.filter((item: SelectOption) => {\n        return value.indexOf(item[props.valueKey]) > -1\n      })\n    }\n    if (!customOptions.value) return {}\n    return (\n      customOptions.value.find((item: SelectOption) => {\n        return item[props.valueKey] === value\n      }) || {}\n    )\n  }\n  const expandAttrs = computed(() => {\n    return {\n      loading: props.loading || loading?.value,\n      remoteMethod: (query: string) => {\n        if (!query) return\n        requestFn!({\n          $searchValue: query,\n        })\n      },\n      onChange(value: SelectProps['modelValue']) {\n        emit('change', value, getSelectItem(value))\n      },\n      onVisibleChange(visible: boolean) {\n        if (props.api && props.lazy && visible && !hasLoaded && !props.remote) {\n          requestFn!()\n        }\n        emit('visible-change', visible)\n      },\n    }\n  })\n  return {\n    customOptions,\n    loadOptions,\n    expandAttrs,\n  }\n}\n"],"names":[],"mappings":";;;AAIO,SAAS,SAAA,CACd,OACA,IAAA,EACA;AACA,EAAA,IAAI,SAAA,GAAY,KAAA;AAEhB,EAAA,MAAM,aAAA,GAAgB,GAAA,CAAoB,EAAE,CAAA;AAC5C,EAAA,MAAM,EAAE,OAAA,EAAS,SAAA,EAAU,GAAI,UAAA,CAAW;AAAA,IACxC,KAAK,KAAA,CAAM,GAAA;AAAA,IACX,QAAQ,KAAA,CAAM,MAAA;AAAA,IACd,SAAS,KAAA,CAAM,OAAA;AAAA,IACf,WAAW,KAAA,CAAM,SAAA;AAAA,IACjB,WAAW,KAAA,CAAM,SAAA;AAAA,IACjB,UAAU,KAAA,CAAM,QAAA;AAAA,IAChB,aAAa,KAAA,CAAM,MAAA;AAAA,IACnB,KAAA,EAAO;AAAA,MACL,QAAQ,IAAA,EAAM;AAMZ,QAAA,IAAI,KAAA,CAAM,OAAA,CAAQ,IAAI,CAAA,EAAG;AACvB,UAAA,aAAA,CAAc,KAAA,GAAQ,IAAA;AAAA,QACxB,CAAA,MAAA,IAAW,IAAA,IAAQ,OAAO,IAAA,KAAS,QAAA,EAAU;AAC3C,UAAA,MAAM,OAAA,GAAU,IAAA;AAChB,UAAA,aAAA,CAAc,KAAA,GAAQ,OAAA,EAAS,IAAA,IAAQ,OAAA,EAAS,QAAQ,EAAC;AAAA,QAC3D,CAAA,MAAO;AACL,UAAA,aAAA,CAAc,QAAQ,EAAC;AAAA,QACzB;AACA,QAAA,SAAA,GAAY,IAAA;AAAA,MACd,CAAA;AAAA,MACA,KAAK,KAAA,EAAO;AACV,QAAA,OAAA,CAAQ,MAAM,KAAK,CAAA;AAAA,MACrB;AAAA;AACF,GACD,CAAA;AAGD,EAAA,MAAM,UAAA,GAAa,SAAyB,MAAM;AAChD,IAAA,MAAM,IAAI,KAAA,CAAM,UAAA;AAChB,IAAA,MAAM,IAAI,KAAA,CAAM,IAAA;AAChB,IAAA,IAAA,CAAK,CAAA,IAAK,CAAA,KAAM,CAAA,KAAM,CAAA,EAAG;AACvB,MAAA,MAAM,MAAA,GAAS,cAAc,KAAA,CAAM,IAAA;AAAA,QACjC,CAAC,IAAA,KAAuB,IAAA,CAAK,KAAA,CAAM,QAAQ,CAAA,KAAM;AAAA,OACnD;AACA,MAAA,IAAI,CAAC,MAAA,EAAQ;AACX,QAAA,OAAO,CAAC,EAAE,CAAC,KAAA,CAAM,QAAQ,GAAG,CAAA,EAAG,CAAC,KAAA,CAAM,QAAQ,GAAG,CAAA,EAAG,CAAA;AAAA,MACtD;AAAA,IACF;AACA,IAAA,OAAO,EAAC;AAAA,EACV,CAAC,CAAA;AAED,EAAA,MAAM,aAAA,GAAgB,SAAyB,MAAM;AAAA,IACnD,GAAG,UAAA,CAAW,KAAA;AAAA,IACd,GAAG,aAAA,CAAc;AAAA,GAClB,CAAA;AAED,EAAA,MAAM,cAAc,MAAM;AACxB,IAAA,IAAI,MAAM,GAAA,EAAK;AACb,MAAA,IAAI,CAAC,KAAA,CAAM,IAAA,IAAQ,CAAC,MAAM,MAAA,EAAQ;AAChC,QAAA,SAAA,EAAW;AAAA,MACb;AAAA,IACF,CAAA,MAAA,IAAW,KAAA,CAAM,OAAA,EAAS,MAAA,EAAQ;AAChC,MAAA,aAAA,CAAc,QAAQ,KAAA,CAAM,OAAA;AAAA,IAC9B;AAAA,EACF,CAAA;AAEA,EAAA,MAAM,aAAA,GAAgB,CAAC,KAAA,KAAqC;AAC1D,IAAA,IAAI,KAAA,CAAM,OAAA,CAAQ,KAAK,CAAA,EAAG;AACxB,MAAA,IAAI,CAAC,aAAA,CAAc,KAAA,EAAO,OAAO,EAAC;AAClC,MAAA,OAAO,aAAA,CAAc,KAAA,CAAM,MAAA,CAAO,CAAC,IAAA,KAAuB;AACxD,QAAA,OAAO,MAAM,OAAA,CAAQ,IAAA,CAAK,KAAA,CAAM,QAAQ,CAAC,CAAA,GAAI,EAAA;AAAA,MAC/C,CAAC,CAAA;AAAA,IACH;AACA,IAAA,IAAI,CAAC,aAAA,CAAc,KAAA,EAAO,OAAO,EAAC;AAClC,IAAA,OACE,aAAA,CAAc,KAAA,CAAM,IAAA,CAAK,CAAC,IAAA,KAAuB;AAC/C,MAAA,OAAO,IAAA,CAAK,KAAA,CAAM,QAAQ,CAAA,KAAM,KAAA;AAAA,IAClC,CAAC,KAAK,EAAC;AAAA,EAEX,CAAA;AACA,EAAA,MAAM,WAAA,GAAc,SAAS,MAAM;AACjC,IAAA,OAAO;AAAA,MACL,OAAA,EAAS,KAAA,CAAM,OAAA,IAAW,OAAA,EAAS,KAAA;AAAA,MACnC,YAAA,EAAc,CAAC,KAAA,KAAkB;AAC/B,QAAA,IAAI,CAAC,KAAA,EAAO;AACZ,QAAA,SAAA,CAAW;AAAA,UACT,YAAA,EAAc;AAAA,SACf,CAAA;AAAA,MACH,CAAA;AAAA,MACA,SAAS,KAAA,EAAkC;AACzC,QAAA,IAAA,CAAK,QAAA,EAAU,KAAA,EAAO,aAAA,CAAc,KAAK,CAAC,CAAA;AAAA,MAC5C,CAAA;AAAA,MACA,gBAAgB,OAAA,EAAkB;AAChC,QAAA,IAAI,KAAA,CAAM,OAAO,KAAA,CAAM,IAAA,IAAQ,WAAW,CAAC,SAAA,IAAa,CAAC,KAAA,CAAM,MAAA,EAAQ;AACrE,UAAA,SAAA,EAAW;AAAA,QACb;AACA,QAAA,IAAA,CAAK,kBAAkB,OAAO,CAAA;AAAA,MAChC;AAAA,KACF;AAAA,EACF,CAAC,CAAA;AACD,EAAA,OAAO;AAAA,IACL,aAAA;AAAA,IACA,WAAA;AAAA,IACA;AAAA,GACF;AACF;;;;"}