{"version":3,"file":"useOption.mjs","names":[],"sources":["../../../../../../packages/components/select/src/useOption.ts"],"sourcesContent":["import { computed, getCurrentInstance, inject, toRaw, watch } from 'vue'\nimport { get, isEqual } from 'lodash-unified'\nimport {\n  ensureArray,\n  escapeStringRegexp,\n  isObject,\n  throwError,\n} from '@element-plus/utils'\nimport { selectGroupKey, selectKey } from './token'\nimport { COMPONENT_NAME } from './option'\n\nimport type { OptionInternalInstance, OptionProps, OptionStates } from './type'\n\nexport function useOption(props: OptionProps, states: OptionStates) {\n  // inject\n  const select = inject(selectKey)\n  if (!select) {\n    throwError(COMPONENT_NAME, 'usage: <el-select><el-option /></el-select/>')\n  }\n  const selectGroup = inject(selectGroupKey, { disabled: false })\n\n  // computed\n  const itemSelected = computed(() => {\n    return contains(ensureArray(select.props.modelValue), props.value)\n  })\n\n  const limitReached = computed(() => {\n    if (select.props.multiple) {\n      const modelValue = ensureArray(select.props.modelValue ?? [])\n      return (\n        !itemSelected.value &&\n        modelValue.length >= select.props.multipleLimit &&\n        select.props.multipleLimit > 0\n      )\n    } else {\n      return false\n    }\n  })\n\n  const currentLabel = computed(() => {\n    return props.label ?? (isObject(props.value) ? '' : props.value)\n  })\n\n  const currentValue = computed(() => {\n    return props.value || props.label || ''\n  })\n\n  const isDisabled = computed(() => {\n    return props.disabled || states.groupDisabled || limitReached.value\n  })\n\n  const instance = getCurrentInstance()! as OptionInternalInstance\n  const contains = <T>(arr: T[] = [], target: T) => {\n    if (!isObject(props.value)) {\n      return arr && arr.includes(target)\n    } else {\n      const valueKey = select.props.valueKey\n      return (\n        arr &&\n        arr.some((item) => {\n          return toRaw(get(item, valueKey)) === get(target, valueKey)\n        })\n      )\n    }\n  }\n\n  const hoverItem = () => {\n    if (!isDisabled.value) {\n      select.states.hoveringIndex = select.optionsArray.indexOf(instance.proxy)\n    }\n  }\n\n  const updateOption = (query: string) => {\n    const regexp = new RegExp(escapeStringRegexp(query), 'i')\n    states.visible = regexp.test(String(currentLabel.value)) || props.created\n  }\n\n  watch(\n    () => currentLabel.value,\n    () => {\n      if (!props.created && !select.props.remote) select.setSelected()\n    }\n  )\n\n  watch(\n    () => props.value,\n    (val, oldVal) => {\n      const { remote, valueKey } = select.props\n      const shouldUpdate = remote ? val !== oldVal : !isEqual(val, oldVal)\n      if (shouldUpdate) {\n        select.onOptionDestroy(oldVal, instance.proxy)\n        select.onOptionCreate(instance.proxy)\n      }\n\n      if (!props.created && !remote) {\n        if (\n          valueKey &&\n          isObject(val) &&\n          isObject(oldVal) &&\n          val[valueKey] === oldVal[valueKey]\n        ) {\n          return\n        }\n        select.setSelected()\n      }\n    }\n  )\n\n  watch(\n    () => selectGroup.disabled,\n    () => {\n      states.groupDisabled = selectGroup.disabled\n    },\n    { immediate: true }\n  )\n\n  return {\n    select,\n    currentLabel,\n    currentValue,\n    itemSelected,\n    isDisabled,\n    hoverItem,\n    updateOption,\n  }\n}\n"],"mappings":";;;;;;;;;;AAaA,SAAgB,UAAU,OAAoB,QAAsB;CAElE,MAAM,SAAS,OAAO,UAAU;AAChC,KAAI,CAAC,OACH,YAAW,gBAAgB,+CAA+C;CAE5E,MAAM,cAAc,OAAO,gBAAgB,EAAE,UAAU,OAAO,CAAC;CAG/D,MAAM,eAAe,eAAe;AAClC,SAAO,SAAS,YAAY,OAAO,MAAM,WAAW,EAAE,MAAM,MAAM;GAClE;CAEF,MAAM,eAAe,eAAe;AAClC,MAAI,OAAO,MAAM,UAAU;GACzB,MAAM,aAAa,YAAY,OAAO,MAAM,cAAc,EAAE,CAAC;AAC7D,UACE,CAAC,aAAa,SACd,WAAW,UAAU,OAAO,MAAM,iBAClC,OAAO,MAAM,gBAAgB;QAG/B,QAAO;GAET;CAEF,MAAM,eAAe,eAAe;AAClC,SAAO,MAAM,UAAU,SAAS,MAAM,MAAM,GAAG,KAAK,MAAM;GAC1D;CAEF,MAAM,eAAe,eAAe;AAClC,SAAO,MAAM,SAAS,MAAM,SAAS;GACrC;CAEF,MAAM,aAAa,eAAe;AAChC,SAAO,MAAM,YAAY,OAAO,iBAAiB,aAAa;GAC9D;CAEF,MAAM,WAAW,oBAAoB;CACrC,MAAM,YAAe,MAAW,EAAE,EAAE,WAAc;AAChD,MAAI,CAAC,SAAS,MAAM,MAAM,CACxB,QAAO,OAAO,IAAI,SAAS,OAAO;OAC7B;GACL,MAAM,WAAW,OAAO,MAAM;AAC9B,UACE,OACA,IAAI,MAAM,SAAS;AACjB,WAAO,MAAM,IAAI,MAAM,SAAS,CAAC,KAAK,IAAI,QAAQ,SAAS;KAC3D;;;CAKR,MAAM,kBAAkB;AACtB,MAAI,CAAC,WAAW,MACd,QAAO,OAAO,gBAAgB,OAAO,aAAa,QAAQ,SAAS,MAAM;;CAI7E,MAAM,gBAAgB,UAAkB;AAEtC,SAAO,UADQ,IAAI,OAAO,mBAAmB,MAAM,EAAE,IAAI,CACjC,KAAK,OAAO,aAAa,MAAM,CAAC,IAAI,MAAM;;AAGpE,aACQ,aAAa,aACb;AACJ,MAAI,CAAC,MAAM,WAAW,CAAC,OAAO,MAAM,OAAQ,QAAO,aAAa;GAEnE;AAED,aACQ,MAAM,QACX,KAAK,WAAW;EACf,MAAM,EAAE,QAAQ,aAAa,OAAO;AAEpC,MADqB,SAAS,QAAQ,SAAS,CAAC,QAAQ,KAAK,OAAO,EAClD;AAChB,UAAO,gBAAgB,QAAQ,SAAS,MAAM;AAC9C,UAAO,eAAe,SAAS,MAAM;;AAGvC,MAAI,CAAC,MAAM,WAAW,CAAC,QAAQ;AAC7B,OACE,YACA,SAAS,IAAI,IACb,SAAS,OAAO,IAChB,IAAI,cAAc,OAAO,UAEzB;AAEF,UAAO,aAAa;;GAGzB;AAED,aACQ,YAAY,gBACZ;AACJ,SAAO,gBAAgB,YAAY;IAErC,EAAE,WAAW,MAAM,CACpB;AAED,QAAO;EACL;EACA;EACA;EACA;EACA;EACA;EACA;EACD"}