{"version":3,"file":"useSelect.mjs","sources":["../../../../../../packages/components/select/src/useSelect.ts"],"sourcesContent":["import {\n  inject,\n  nextTick,\n  computed,\n  watch,\n  ref,\n  reactive,\n  shallowRef,\n  triggerRef,\n} from 'vue'\nimport { isObject, toRawType } from '@vue/shared'\nimport lodashDebounce from 'lodash/debounce'\nimport isEqual from 'lodash/isEqual'\nimport { UPDATE_MODEL_EVENT, CHANGE_EVENT } from '@element-plus/utils/constants'\nimport { EVENT_CODE } from '@element-plus/utils/aria'\nimport { useLocaleInject } from '@element-plus/hooks'\nimport isServer from '@element-plus/utils/isServer'\nimport scrollIntoView from '@element-plus/utils/scroll-into-view'\nimport { isKorean } from '@element-plus/utils/isDef'\nimport { getValueByPath, useGlobalConfig } from '@element-plus/utils/util'\nimport { elFormKey, elFormItemKey } from '@element-plus/tokens'\nimport { ArrowUp } from '@element-plus/icons'\n\nimport type { QueryChangeCtx, SelectOptionProxy } from './token'\nimport type { ElFormContext, ElFormItemContext } from '@element-plus/tokens'\n\nexport function useSelectStates(props) {\n  const { t } = useLocaleInject()\n  return reactive({\n    options: new Map(),\n    cachedOptions: new Map(),\n    createdLabel: null,\n    createdSelected: false,\n    selected: props.multiple ? [] : ({} as any),\n    inputLength: 20,\n    inputWidth: 0,\n    initialInputHeight: 0,\n    optionsCount: 0,\n    filteredOptionsCount: 0,\n    visible: false,\n    softFocus: false,\n    selectedLabel: '',\n    hoverIndex: -1,\n    query: '',\n    previousQuery: null,\n    inputHovering: false,\n    cachedPlaceHolder: '',\n    currentPlaceholder: t('el.select.placeholder'),\n    menuVisibleOnFocus: false,\n    isOnComposition: false,\n    isSilentBlur: false,\n    prefixWidth: null,\n    tagInMultiLine: false,\n  })\n}\n\ntype States = ReturnType<typeof useSelectStates>\n\nexport const useSelect = (props, states: States, ctx) => {\n  const ELEMENT = useGlobalConfig()\n  const { t } = useLocaleInject()\n\n  // template refs\n  const reference = ref(null)\n  const input = ref(null)\n  const popper = ref(null)\n  const tags = ref(null)\n  const selectWrapper = ref<HTMLElement | null>(null)\n  const scrollbar = ref(null)\n  const hoverOption = ref(-1)\n  const queryChange = shallowRef<QueryChangeCtx>({ query: '' })\n  const groupQueryChange = shallowRef('')\n\n  // inject\n  const elForm = inject(elFormKey, {} as ElFormContext)\n  const elFormItem = inject(elFormItemKey, {} as ElFormItemContext)\n\n  const readonly = computed(\n    () => !props.filterable || props.multiple || !states.visible\n  )\n\n  const selectDisabled = computed(() => props.disabled || elForm.disabled)\n\n  const showClose = computed(() => {\n    const hasValue = props.multiple\n      ? Array.isArray(props.modelValue) && props.modelValue.length > 0\n      : props.modelValue !== undefined &&\n        props.modelValue !== null &&\n        props.modelValue !== ''\n\n    const criteria =\n      props.clearable &&\n      !selectDisabled.value &&\n      states.inputHovering &&\n      hasValue\n    return criteria\n  })\n  const iconComponent = computed(() =>\n    props.remote && props.filterable ? '' : ArrowUp\n  )\n  const iconReverse = computed(() =>\n    iconComponent.value && states.visible ? 'is-reverse' : ''\n  )\n\n  const debounce = computed(() => (props.remote ? 300 : 0))\n\n  const emptyText = computed(() => {\n    if (props.loading) {\n      return props.loadingText || t('el.select.loading')\n    } else {\n      if (props.remote && states.query === '' && states.options.size === 0)\n        return false\n      if (\n        props.filterable &&\n        states.query &&\n        states.options.size > 0 &&\n        states.filteredOptionsCount === 0\n      ) {\n        return props.noMatchText || t('el.select.noMatch')\n      }\n      if (states.options.size === 0) {\n        return props.noDataText || t('el.select.noData')\n      }\n    }\n    return null\n  })\n\n  const optionsArray = computed(() => Array.from(states.options.values()))\n\n  const cachedOptionsArray = computed(() =>\n    Array.from(states.cachedOptions.values())\n  )\n\n  const showNewOption = computed(() => {\n    const hasExistingOption = optionsArray.value\n      .filter((option) => {\n        return !option.created\n      })\n      .some((option) => {\n        return option.currentLabel === states.query\n      })\n    return (\n      props.filterable &&\n      props.allowCreate &&\n      states.query !== '' &&\n      !hasExistingOption\n    )\n  })\n\n  const selectSize = computed(\n    () => props.size || elFormItem.size || ELEMENT.size\n  )\n\n  const collapseTagSize = computed(() =>\n    ['small', 'mini'].indexOf(selectSize.value) > -1 ? 'mini' : 'small'\n  )\n\n  const dropMenuVisible = computed(\n    () => states.visible && emptyText.value !== false\n  )\n\n  // watch\n  watch(\n    () => selectDisabled.value,\n    () => {\n      nextTick(() => {\n        resetInputHeight()\n      })\n    }\n  )\n\n  watch(\n    () => props.placeholder,\n    (val) => {\n      states.cachedPlaceHolder = states.currentPlaceholder = val\n    }\n  )\n\n  watch(\n    () => props.modelValue,\n    (val, oldVal) => {\n      if (props.multiple) {\n        resetInputHeight()\n        if ((val && val.length > 0) || (input.value && states.query !== '')) {\n          states.currentPlaceholder = ''\n        } else {\n          states.currentPlaceholder = states.cachedPlaceHolder\n        }\n        if (props.filterable && !props.reserveKeyword) {\n          states.query = ''\n          handleQueryChange(states.query)\n        }\n      }\n      setSelected()\n      if (props.filterable && !props.multiple) {\n        states.inputLength = 20\n      }\n      if (!isEqual(val, oldVal)) {\n        elFormItem.validate?.('change')\n      }\n    },\n    {\n      flush: 'post',\n      deep: true,\n    }\n  )\n\n  watch(\n    () => states.visible,\n    (val) => {\n      if (!val) {\n        input.value && input.value.blur()\n        states.query = ''\n        states.previousQuery = null\n        states.selectedLabel = ''\n        states.inputLength = 20\n        states.menuVisibleOnFocus = false\n        resetHoverIndex()\n        nextTick(() => {\n          if (\n            input.value &&\n            input.value.value === '' &&\n            states.selected.length === 0\n          ) {\n            states.currentPlaceholder = states.cachedPlaceHolder\n          }\n        })\n\n        if (!props.multiple) {\n          if (states.selected) {\n            if (\n              props.filterable &&\n              props.allowCreate &&\n              states.createdSelected &&\n              states.createdLabel\n            ) {\n              states.selectedLabel = states.createdLabel\n            } else {\n              states.selectedLabel = states.selected.currentLabel\n            }\n            if (props.filterable) states.query = states.selectedLabel\n          }\n\n          if (props.filterable) {\n            states.currentPlaceholder = states.cachedPlaceHolder\n          }\n        }\n      } else {\n        popper.value?.update?.()\n\n        if (props.filterable) {\n          states.filteredOptionsCount = states.optionsCount\n          states.query = props.remote ? '' : states.selectedLabel\n          if (props.multiple) {\n            input.value.focus()\n          } else {\n            if (states.selectedLabel) {\n              states.currentPlaceholder = states.selectedLabel\n              states.selectedLabel = ''\n            }\n          }\n          handleQueryChange(states.query)\n          if (!props.multiple && !props.remote) {\n            queryChange.value.query = ''\n\n            triggerRef(queryChange)\n            triggerRef(groupQueryChange)\n          }\n        }\n      }\n      ctx.emit('visible-change', val)\n    }\n  )\n\n  watch(\n    // fix `Array.prototype.push/splice/..` cannot trigger non-deep watcher\n    // https://github.com/vuejs/vue-next/issues/2116\n    () => states.options.entries(),\n    () => {\n      if (isServer) return\n      popper.value?.update?.()\n      if (props.multiple) {\n        resetInputHeight()\n      }\n      const inputs = selectWrapper.value?.querySelectorAll('input') || []\n      if ([].indexOf.call(inputs, document.activeElement) === -1) {\n        setSelected()\n      }\n      if (\n        props.defaultFirstOption &&\n        (props.filterable || props.remote) &&\n        states.filteredOptionsCount\n      ) {\n        checkDefaultFirstOption()\n      }\n    },\n    {\n      flush: 'post',\n    }\n  )\n\n  watch(\n    () => states.hoverIndex,\n    (val) => {\n      if (typeof val === 'number' && val > -1) {\n        hoverOption.value = optionsArray.value[val] || {}\n      }\n      optionsArray.value.forEach((option) => {\n        option.hover = hoverOption.value === option\n      })\n    }\n  )\n\n  // methods\n  const resetInputHeight = () => {\n    if (props.collapseTags && !props.filterable) return\n    nextTick(() => {\n      if (!reference.value) return\n      const inputChildNodes = reference.value.$el.childNodes\n      const input = [].filter.call(\n        inputChildNodes,\n        (item) => item.tagName === 'INPUT'\n      )[0]\n      const _tags = tags.value\n      const sizeInMap = states.initialInputHeight || 40\n      input.style.height =\n        states.selected.length === 0\n          ? `${sizeInMap}px`\n          : `${Math.max(\n              _tags\n                ? _tags.clientHeight + (_tags.clientHeight > sizeInMap ? 6 : 0)\n                : 0,\n              sizeInMap\n            )}px`\n\n      states.tagInMultiLine = parseFloat(input.style.height) > sizeInMap\n\n      if (states.visible && emptyText.value !== false) {\n        popper.value?.update?.()\n      }\n    })\n  }\n\n  const handleQueryChange = (val) => {\n    if (states.previousQuery === val || states.isOnComposition) return\n    if (\n      states.previousQuery === null &&\n      (typeof props.filterMethod === 'function' ||\n        typeof props.remoteMethod === 'function')\n    ) {\n      states.previousQuery = val\n      return\n    }\n    states.previousQuery = val\n    nextTick(() => {\n      if (states.visible) popper.value?.update?.()\n    })\n    states.hoverIndex = -1\n    if (props.multiple && props.filterable) {\n      nextTick(() => {\n        const length = input.value.length * 15 + 20\n        states.inputLength = props.collapseTags ? Math.min(50, length) : length\n        managePlaceholder()\n        resetInputHeight()\n      })\n    }\n    if (props.remote && typeof props.remoteMethod === 'function') {\n      states.hoverIndex = -1\n      props.remoteMethod(val)\n    } else if (typeof props.filterMethod === 'function') {\n      props.filterMethod(val)\n      triggerRef(groupQueryChange)\n    } else {\n      states.filteredOptionsCount = states.optionsCount\n      queryChange.value.query = val\n\n      triggerRef(queryChange)\n      triggerRef(groupQueryChange)\n    }\n    if (\n      props.defaultFirstOption &&\n      (props.filterable || props.remote) &&\n      states.filteredOptionsCount\n    ) {\n      checkDefaultFirstOption()\n    }\n  }\n\n  const managePlaceholder = () => {\n    if (states.currentPlaceholder !== '') {\n      states.currentPlaceholder = input.value.value\n        ? ''\n        : states.cachedPlaceHolder\n    }\n  }\n\n  /**\n   * find and highlight first option as default selected\n   * @remark\n   * - if the first option in dropdown list is user-created,\n   *   it would be at the end of the optionsArray\n   *   so find it and set hover.\n   *   (NOTE: there must be only one user-created option in dropdown list with query)\n   * - if there's no user-created option in list, just find the first one as usual\n   *   (NOTE: exclude options that are disabled or in disabled-group)\n   */\n  const checkDefaultFirstOption = () => {\n    const optionsInDropdown = optionsArray.value.filter(\n      (n) => n.visible && !n.disabled && !n.groupDisabled\n    )\n    const userCreatedOption = optionsInDropdown.filter((n) => n.created)[0]\n    const firstOriginOption = optionsInDropdown[0]\n    states.hoverIndex = getValueIndex(\n      optionsArray.value,\n      userCreatedOption || firstOriginOption\n    )\n  }\n\n  const setSelected = () => {\n    if (!props.multiple) {\n      const option = getOption(props.modelValue)\n      if (option.props?.created) {\n        states.createdLabel = option.props.value\n        states.createdSelected = true\n      } else {\n        states.createdSelected = false\n      }\n      states.selectedLabel = option.currentLabel\n      states.selected = option\n      if (props.filterable) states.query = states.selectedLabel\n      return\n    }\n    const result = []\n    if (Array.isArray(props.modelValue)) {\n      props.modelValue.forEach((value) => {\n        result.push(getOption(value))\n      })\n    }\n    states.selected = result\n    nextTick(() => {\n      resetInputHeight()\n    })\n  }\n\n  const getOption = (value) => {\n    let option\n    const isObjectValue = toRawType(value).toLowerCase() === 'object'\n    const isNull = toRawType(value).toLowerCase() === 'null'\n    const isUndefined = toRawType(value).toLowerCase() === 'undefined'\n\n    for (let i = states.cachedOptions.size - 1; i >= 0; i--) {\n      const cachedOption = cachedOptionsArray.value[i]\n      const isEqualValue = isObjectValue\n        ? getValueByPath(cachedOption.value, props.valueKey) ===\n          getValueByPath(value, props.valueKey)\n        : cachedOption.value === value\n      if (isEqualValue) {\n        option = {\n          value,\n          currentLabel: cachedOption.currentLabel,\n          isDisabled: cachedOption.isDisabled,\n        }\n        break\n      }\n    }\n    if (option) return option\n    const label = !isObjectValue && !isNull && !isUndefined ? value : ''\n    const newOption = {\n      value,\n      currentLabel: label,\n    }\n    if (props.multiple) {\n      ;(newOption as any).hitState = false\n    }\n    return newOption\n  }\n\n  const resetHoverIndex = () => {\n    setTimeout(() => {\n      const valueKey = props.valueKey\n      if (!props.multiple) {\n        states.hoverIndex = optionsArray.value.findIndex((item) => {\n          return getValueKey(item) === getValueKey(states.selected)\n        })\n      } else {\n        if (states.selected.length > 0) {\n          states.hoverIndex = Math.min.apply(\n            null,\n            states.selected.map((selected) => {\n              return optionsArray.value.findIndex((item) => {\n                return (\n                  getValueByPath(item, valueKey) ===\n                  getValueByPath(selected, valueKey)\n                )\n              })\n            })\n          )\n        } else {\n          states.hoverIndex = -1\n        }\n      }\n    }, 300)\n  }\n\n  const handleResize = () => {\n    resetInputWidth()\n    popper.value?.update?.()\n    if (props.multiple) resetInputHeight()\n  }\n\n  const resetInputWidth = () => {\n    states.inputWidth = reference.value?.$el.getBoundingClientRect().width\n  }\n\n  const onInputChange = () => {\n    if (props.filterable && states.query !== states.selectedLabel) {\n      states.query = states.selectedLabel\n      handleQueryChange(states.query)\n    }\n  }\n\n  const debouncedOnInputChange = lodashDebounce(() => {\n    onInputChange()\n  }, debounce.value)\n\n  const debouncedQueryChange = lodashDebounce((e) => {\n    handleQueryChange(e.target.value)\n  }, debounce.value)\n\n  const emitChange = (val) => {\n    if (!isEqual(props.modelValue, val)) {\n      ctx.emit(CHANGE_EVENT, val)\n    }\n  }\n\n  const deletePrevTag = (e) => {\n    if (e.target.value.length <= 0 && !toggleLastOptionHitState()) {\n      const value = props.modelValue.slice()\n      value.pop()\n      ctx.emit(UPDATE_MODEL_EVENT, value)\n      emitChange(value)\n    }\n\n    if (e.target.value.length === 1 && props.modelValue.length === 0) {\n      states.currentPlaceholder = states.cachedPlaceHolder\n    }\n  }\n\n  const deleteTag = (event, tag) => {\n    const index = states.selected.indexOf(tag)\n    if (index > -1 && !selectDisabled.value) {\n      const value = props.modelValue.slice()\n      value.splice(index, 1)\n      ctx.emit(UPDATE_MODEL_EVENT, value)\n      emitChange(value)\n      ctx.emit('remove-tag', tag.value)\n    }\n    event.stopPropagation()\n  }\n\n  const deleteSelected = (event) => {\n    event.stopPropagation()\n    const value = props.multiple ? [] : ''\n    if (typeof value !== 'string') {\n      for (const item of states.selected) {\n        if (item.isDisabled) value.push(item.value)\n      }\n    }\n    ctx.emit(UPDATE_MODEL_EVENT, value)\n    emitChange(value)\n    states.visible = false\n    ctx.emit('clear')\n  }\n\n  const handleOptionSelect = (option, byClick) => {\n    if (props.multiple) {\n      const value = (props.modelValue || []).slice()\n      const optionIndex = getValueIndex(value, option.value)\n      if (optionIndex > -1) {\n        value.splice(optionIndex, 1)\n      } else if (\n        props.multipleLimit <= 0 ||\n        value.length < props.multipleLimit\n      ) {\n        value.push(option.value)\n      }\n      ctx.emit(UPDATE_MODEL_EVENT, value)\n      emitChange(value)\n      if (option.created) {\n        states.query = ''\n        handleQueryChange('')\n        states.inputLength = 20\n      }\n      if (props.filterable) input.value.focus()\n    } else {\n      ctx.emit(UPDATE_MODEL_EVENT, option.value)\n      emitChange(option.value)\n      states.visible = false\n    }\n    states.isSilentBlur = byClick\n    setSoftFocus()\n    if (states.visible) return\n    nextTick(() => {\n      scrollToOption(option)\n    })\n  }\n\n  const getValueIndex = (arr = [], value) => {\n    if (!isObject(value)) return arr.indexOf(value)\n\n    const valueKey = props.valueKey\n    let index = -1\n    arr.some((item, i) => {\n      if (getValueByPath(item, valueKey) === getValueByPath(value, valueKey)) {\n        index = i\n        return true\n      }\n      return false\n    })\n    return index\n  }\n\n  const setSoftFocus = () => {\n    states.softFocus = true\n    const _input = input.value || reference.value\n    if (_input) {\n      _input.focus()\n    }\n  }\n\n  const scrollToOption = (option) => {\n    const targetOption = Array.isArray(option) ? option[0] : option\n    let target = null\n\n    if (targetOption?.value) {\n      const options = optionsArray.value.filter(\n        (item) => item.value === targetOption.value\n      )\n      if (options.length > 0) {\n        target = options[0].$el\n      }\n    }\n\n    if (popper.value && target) {\n      const menu = popper.value?.popperRef?.querySelector?.(\n        '.el-select-dropdown__wrap'\n      )\n      if (menu) {\n        scrollIntoView(menu, target)\n      }\n    }\n    scrollbar.value?.handleScroll()\n  }\n\n  const onOptionCreate = (vm: SelectOptionProxy) => {\n    states.optionsCount++\n    states.filteredOptionsCount++\n    states.options.set(vm.value, vm)\n    states.cachedOptions.set(vm.value, vm)\n  }\n\n  const onOptionDestroy = (key) => {\n    states.optionsCount--\n    states.filteredOptionsCount--\n    states.options.delete(key)\n  }\n\n  const resetInputState = (e: KeyboardEvent) => {\n    if (e.code !== EVENT_CODE.backspace) toggleLastOptionHitState(false)\n    states.inputLength = input.value.length * 15 + 20\n    resetInputHeight()\n  }\n\n  const toggleLastOptionHitState = (hit?: boolean) => {\n    if (!Array.isArray(states.selected)) return\n    const option = states.selected[states.selected.length - 1]\n    if (!option) return\n\n    if (hit === true || hit === false) {\n      option.hitState = hit\n      return hit\n    }\n\n    option.hitState = !option.hitState\n    return option.hitState\n  }\n\n  const handleComposition = (event) => {\n    const text = event.target.value\n    if (event.type === 'compositionend') {\n      states.isOnComposition = false\n      nextTick(() => handleQueryChange(text))\n    } else {\n      const lastCharacter = text[text.length - 1] || ''\n      states.isOnComposition = !isKorean(lastCharacter)\n    }\n  }\n\n  const handleMenuEnter = () => {\n    nextTick(() => scrollToOption(states.selected))\n  }\n\n  const handleFocus = (event) => {\n    if (!states.softFocus) {\n      if (props.automaticDropdown || props.filterable) {\n        states.visible = true\n        if (props.filterable) {\n          states.menuVisibleOnFocus = true\n        }\n      }\n      ctx.emit('focus', event)\n    } else {\n      states.softFocus = false\n    }\n  }\n\n  const blur = () => {\n    states.visible = false\n    reference.value.blur()\n  }\n\n  const handleBlur = (event: Event) => {\n    // https://github.com/ElemeFE/element/pull/10822\n    nextTick(() => {\n      if (states.isSilentBlur) {\n        states.isSilentBlur = false\n      } else {\n        ctx.emit('blur', event)\n      }\n    })\n    states.softFocus = false\n  }\n\n  const handleClearClick = (event: Event) => {\n    deleteSelected(event)\n  }\n\n  const handleClose = () => {\n    states.visible = false\n  }\n\n  const toggleMenu = () => {\n    if (props.automaticDropdown) return\n    if (!selectDisabled.value) {\n      if (states.menuVisibleOnFocus) {\n        states.menuVisibleOnFocus = false\n      } else {\n        states.visible = !states.visible\n      }\n      if (states.visible) {\n        ;(input.value || reference.value).focus()\n      }\n    }\n  }\n\n  const selectOption = () => {\n    if (!states.visible) {\n      toggleMenu()\n    } else {\n      if (optionsArray.value[states.hoverIndex]) {\n        handleOptionSelect(optionsArray.value[states.hoverIndex], undefined)\n      }\n    }\n  }\n\n  const getValueKey = (item) => {\n    return isObject(item.value)\n      ? getValueByPath(item.value, props.valueKey)\n      : item.value\n  }\n\n  const optionsAllDisabled = computed(() =>\n    optionsArray.value\n      .filter((option) => option.visible)\n      .every((option) => option.disabled)\n  )\n\n  const navigateOptions = (direction) => {\n    if (!states.visible) {\n      states.visible = true\n      return\n    }\n    if (states.options.size === 0 || states.filteredOptionsCount === 0) return\n    if (states.isOnComposition) return\n\n    if (!optionsAllDisabled.value) {\n      if (direction === 'next') {\n        states.hoverIndex++\n        if (states.hoverIndex === states.options.size) {\n          states.hoverIndex = 0\n        }\n      } else if (direction === 'prev') {\n        states.hoverIndex--\n        if (states.hoverIndex < 0) {\n          states.hoverIndex = states.options.size - 1\n        }\n      }\n      const option = optionsArray.value[states.hoverIndex]\n      if (\n        option.disabled === true ||\n        option.groupDisabled === true ||\n        !option.visible\n      ) {\n        navigateOptions(direction)\n      }\n      nextTick(() => scrollToOption(hoverOption.value))\n    }\n  }\n\n  return {\n    optionsArray,\n    selectSize,\n    handleResize,\n    debouncedOnInputChange,\n    debouncedQueryChange,\n    deletePrevTag,\n    deleteTag,\n    deleteSelected,\n    handleOptionSelect,\n    scrollToOption,\n    readonly,\n    resetInputHeight,\n    showClose,\n    iconComponent,\n    iconReverse,\n    showNewOption,\n    collapseTagSize,\n    setSelected,\n    managePlaceholder,\n    selectDisabled,\n    emptyText,\n    toggleLastOptionHitState,\n    resetInputState,\n    handleComposition,\n    onOptionCreate,\n    onOptionDestroy,\n    handleMenuEnter,\n    handleFocus,\n    blur,\n    handleBlur,\n    handleClearClick,\n    handleClose,\n    toggleMenu,\n    selectOption,\n    getValueKey,\n    navigateOptions,\n    dropMenuVisible,\n    queryChange,\n    groupQueryChange,\n\n    // DOM ref\n    reference,\n    input,\n    popper,\n    tags,\n    selectWrapper,\n    scrollbar,\n  }\n}\n"],"names":["debounce","lodashDebounce"],"mappings":"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"}