You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
1 line
79 KiB
1 line
79 KiB
{"ast":null,"code":"import \"core-js/modules/es.array.push.js\";\nimport { reactive, ref, computed, nextTick, watch, watchEffect, onMounted } from 'vue';\nimport { debounce, isEqual, get, findLastIndex } from 'lodash-unified';\nimport { useResizeObserver } from '@vueuse/core';\nimport '../../../utils/index.mjs';\nimport '../../../hooks/index.mjs';\nimport '../../../constants/index.mjs';\nimport '../../form/index.mjs';\nimport { ArrowDown } from '@element-plus/icons-vue';\nimport { useAllowCreate } from './useAllowCreate.mjs';\nimport { useProps } from './useProps.mjs';\nimport { useLocale } from '../../../hooks/use-locale/index.mjs';\nimport { useNamespace } from '../../../hooks/use-namespace/index.mjs';\nimport { useFormItem, useFormItemInputId } from '../../form/src/hooks/use-form-item.mjs';\nimport { useEmptyValues } from '../../../hooks/use-empty-values/index.mjs';\nimport { useComposition } from '../../../hooks/use-composition/index.mjs';\nimport { useFocusController } from '../../../hooks/use-focus-controller/index.mjs';\nimport { isArray, isFunction, isObject } from '@vue/shared';\nimport { ValidateComponentsMap } from '../../../utils/vue/icon.mjs';\nimport { escapeStringRegexp } from '../../../utils/strings.mjs';\nimport { useFormSize } from '../../form/src/hooks/use-form-common-props.mjs';\nimport { CHANGE_EVENT, UPDATE_MODEL_EVENT } from '../../../constants/event.mjs';\nimport { EVENT_CODE } from '../../../constants/aria.mjs';\nimport { debugWarn } from '../../../utils/error.mjs';\nconst MINIMUM_INPUT_WIDTH = 11;\nconst useSelect = (props, emit) => {\n const {\n t\n } = useLocale();\n const nsSelect = useNamespace(\"select\");\n const nsInput = useNamespace(\"input\");\n const {\n form: elForm,\n formItem: elFormItem\n } = useFormItem();\n const {\n inputId\n } = useFormItemInputId(props, {\n formItemContext: elFormItem\n });\n const {\n aliasProps,\n getLabel,\n getValue,\n getDisabled,\n getOptions\n } = useProps(props);\n const {\n valueOnClear,\n isEmptyValue\n } = useEmptyValues(props);\n const states = reactive({\n inputValue: \"\",\n cachedOptions: [],\n createdOptions: [],\n hoveringIndex: -1,\n inputHovering: false,\n selectionWidth: 0,\n calculatorWidth: 0,\n collapseItemWidth: 0,\n previousQuery: null,\n previousValue: void 0,\n selectedLabel: \"\",\n menuVisibleOnFocus: false,\n isBeforeHide: false\n });\n const popperSize = ref(-1);\n const selectRef = ref();\n const selectionRef = ref();\n const tooltipRef = ref();\n const tagTooltipRef = ref();\n const inputRef = ref();\n const calculatorRef = ref();\n const prefixRef = ref();\n const suffixRef = ref();\n const menuRef = ref();\n const tagMenuRef = ref();\n const collapseItemRef = ref();\n const {\n isComposing,\n handleCompositionStart,\n handleCompositionEnd,\n handleCompositionUpdate\n } = useComposition({\n afterComposition: e => onInput(e)\n });\n const {\n wrapperRef,\n isFocused,\n handleBlur\n } = useFocusController(inputRef, {\n beforeFocus() {\n return selectDisabled.value;\n },\n afterFocus() {\n if (props.automaticDropdown && !expanded.value) {\n expanded.value = true;\n states.menuVisibleOnFocus = true;\n }\n },\n beforeBlur(event) {\n var _a, _b;\n return ((_a = tooltipRef.value) == null ? void 0 : _a.isFocusInsideContent(event)) || ((_b = tagTooltipRef.value) == null ? void 0 : _b.isFocusInsideContent(event));\n },\n afterBlur() {\n expanded.value = false;\n states.menuVisibleOnFocus = false;\n }\n });\n const allOptions = ref([]);\n const filteredOptions = ref([]);\n const expanded = ref(false);\n const selectDisabled = computed(() => props.disabled || (elForm == null ? void 0 : elForm.disabled));\n const popupHeight = computed(() => {\n const totalHeight = filteredOptions.value.length * props.itemHeight;\n return totalHeight > props.height ? props.height : totalHeight;\n });\n const hasModelValue = computed(() => {\n return props.multiple ? isArray(props.modelValue) && props.modelValue.length > 0 : !isEmptyValue(props.modelValue);\n });\n const showClearBtn = computed(() => {\n return props.clearable && !selectDisabled.value && states.inputHovering && hasModelValue.value;\n });\n const iconComponent = computed(() => props.remote && props.filterable ? \"\" : ArrowDown);\n const iconReverse = computed(() => iconComponent.value && nsSelect.is(\"reverse\", expanded.value));\n const validateState = computed(() => (elFormItem == null ? void 0 : elFormItem.validateState) || \"\");\n const validateIcon = computed(() => {\n if (!validateState.value) return;\n return ValidateComponentsMap[validateState.value];\n });\n const debounce$1 = computed(() => props.remote ? 300 : 0);\n const emptyText = computed(() => {\n if (props.loading) {\n return props.loadingText || t(\"el.select.loading\");\n } else {\n if (props.remote && !states.inputValue && allOptions.value.length === 0) return false;\n if (props.filterable && states.inputValue && allOptions.value.length > 0 && filteredOptions.value.length === 0) {\n return props.noMatchText || t(\"el.select.noMatch\");\n }\n if (allOptions.value.length === 0) {\n return props.noDataText || t(\"el.select.noData\");\n }\n }\n return null;\n });\n const filterOptions = query => {\n const isValidOption = o => {\n if (props.filterable && isFunction(props.filterMethod)) return true;\n if (props.filterable && props.remote && isFunction(props.remoteMethod)) return true;\n const regexp = new RegExp(escapeStringRegexp(query), \"i\");\n return query ? regexp.test(getLabel(o) || \"\") : true;\n };\n if (props.loading) {\n return [];\n }\n return [...states.createdOptions, ...props.options].reduce((all, item) => {\n const options = getOptions(item);\n if (isArray(options)) {\n const filtered = options.filter(isValidOption);\n if (filtered.length > 0) {\n all.push({\n label: getLabel(item),\n type: \"Group\"\n }, ...filtered);\n }\n } else if (props.remote || isValidOption(item)) {\n all.push(item);\n }\n return all;\n }, []);\n };\n const updateOptions = () => {\n allOptions.value = filterOptions(\"\");\n filteredOptions.value = filterOptions(states.inputValue);\n };\n const allOptionsValueMap = computed(() => {\n const valueMap = /* @__PURE__ */new Map();\n allOptions.value.forEach((option, index) => {\n valueMap.set(getValueKey(getValue(option)), {\n option,\n index\n });\n });\n return valueMap;\n });\n const filteredOptionsValueMap = computed(() => {\n const valueMap = /* @__PURE__ */new Map();\n filteredOptions.value.forEach((option, index) => {\n valueMap.set(getValueKey(getValue(option)), {\n option,\n index\n });\n });\n return valueMap;\n });\n const optionsAllDisabled = computed(() => filteredOptions.value.every(option => getDisabled(option)));\n const selectSize = useFormSize();\n const collapseTagSize = computed(() => selectSize.value === \"small\" ? \"small\" : \"default\");\n const calculatePopperSize = () => {\n var _a;\n popperSize.value = ((_a = selectRef.value) == null ? void 0 : _a.offsetWidth) || 200;\n };\n const getGapWidth = () => {\n if (!selectionRef.value) return 0;\n const style = window.getComputedStyle(selectionRef.value);\n return Number.parseFloat(style.gap || \"6px\");\n };\n const tagStyle = computed(() => {\n const gapWidth = getGapWidth();\n const maxWidth = collapseItemRef.value && props.maxCollapseTags === 1 ? states.selectionWidth - states.collapseItemWidth - gapWidth : states.selectionWidth;\n return {\n maxWidth: `${maxWidth}px`\n };\n });\n const collapseTagStyle = computed(() => {\n return {\n maxWidth: `${states.selectionWidth}px`\n };\n });\n const inputStyle = computed(() => ({\n width: `${Math.max(states.calculatorWidth, MINIMUM_INPUT_WIDTH)}px`\n }));\n const shouldShowPlaceholder = computed(() => {\n if (isArray(props.modelValue)) {\n return props.modelValue.length === 0 && !states.inputValue;\n }\n return props.filterable ? !states.inputValue : true;\n });\n const currentPlaceholder = computed(() => {\n var _a;\n const _placeholder = (_a = props.placeholder) != null ? _a : t(\"el.select.placeholder\");\n return props.multiple || !hasModelValue.value ? _placeholder : states.selectedLabel;\n });\n const popperRef = computed(() => {\n var _a, _b;\n return (_b = (_a = tooltipRef.value) == null ? void 0 : _a.popperRef) == null ? void 0 : _b.contentRef;\n });\n const indexRef = computed(() => {\n if (props.multiple) {\n const len = props.modelValue.length;\n if (props.modelValue.length > 0 && filteredOptionsValueMap.value.has(props.modelValue[len - 1])) {\n const {\n index\n } = filteredOptionsValueMap.value.get(props.modelValue[len - 1]);\n return index;\n }\n } else {\n if (props.modelValue && filteredOptionsValueMap.value.has(props.modelValue)) {\n const {\n index\n } = filteredOptionsValueMap.value.get(props.modelValue);\n return index;\n }\n }\n return -1;\n });\n const dropdownMenuVisible = computed({\n get() {\n return expanded.value && emptyText.value !== false;\n },\n set(val) {\n expanded.value = val;\n }\n });\n const showTagList = computed(() => {\n if (!props.multiple) {\n return [];\n }\n return props.collapseTags ? states.cachedOptions.slice(0, props.maxCollapseTags) : states.cachedOptions;\n });\n const collapseTagList = computed(() => {\n if (!props.multiple) {\n return [];\n }\n return props.collapseTags ? states.cachedOptions.slice(props.maxCollapseTags) : [];\n });\n const {\n createNewOption,\n removeNewOption,\n selectNewOption,\n clearAllNewOption\n } = useAllowCreate(props, states);\n const toggleMenu = () => {\n if (selectDisabled.value) return;\n if (states.menuVisibleOnFocus) {\n states.menuVisibleOnFocus = false;\n } else {\n expanded.value = !expanded.value;\n }\n };\n const onInputChange = () => {\n if (states.inputValue.length > 0 && !expanded.value) {\n expanded.value = true;\n }\n createNewOption(states.inputValue);\n handleQueryChange(states.inputValue);\n };\n const debouncedOnInputChange = debounce(onInputChange, debounce$1.value);\n const handleQueryChange = val => {\n if (states.previousQuery === val || isComposing.value) {\n return;\n }\n states.previousQuery = val;\n if (props.filterable && isFunction(props.filterMethod)) {\n props.filterMethod(val);\n } else if (props.filterable && props.remote && isFunction(props.remoteMethod)) {\n props.remoteMethod(val);\n }\n if (props.defaultFirstOption && (props.filterable || props.remote) && filteredOptions.value.length) {\n nextTick(checkDefaultFirstOption);\n } else {\n nextTick(updateHoveringIndex);\n }\n };\n const checkDefaultFirstOption = () => {\n const optionsInDropdown = filteredOptions.value.filter(n => !n.disabled && n.type !== \"Group\");\n const userCreatedOption = optionsInDropdown.find(n => n.created);\n const firstOriginOption = optionsInDropdown[0];\n states.hoveringIndex = getValueIndex(filteredOptions.value, userCreatedOption || firstOriginOption);\n };\n const emitChange = val => {\n if (!isEqual(props.modelValue, val)) {\n emit(CHANGE_EVENT, val);\n }\n };\n const update = val => {\n emit(UPDATE_MODEL_EVENT, val);\n emitChange(val);\n states.previousValue = props.multiple ? String(val) : val;\n };\n const getValueIndex = (arr = [], value) => {\n if (!isObject(value)) {\n return arr.indexOf(value);\n }\n const valueKey = props.valueKey;\n let index = -1;\n arr.some((item, i) => {\n if (get(item, valueKey) === get(value, valueKey)) {\n index = i;\n return true;\n }\n return false;\n });\n return index;\n };\n const getValueKey = item => {\n return isObject(item) ? get(item, props.valueKey) : item;\n };\n const handleResize = () => {\n calculatePopperSize();\n };\n const resetSelectionWidth = () => {\n states.selectionWidth = selectionRef.value.getBoundingClientRect().width;\n };\n const resetCalculatorWidth = () => {\n states.calculatorWidth = calculatorRef.value.getBoundingClientRect().width;\n };\n const resetCollapseItemWidth = () => {\n states.collapseItemWidth = collapseItemRef.value.getBoundingClientRect().width;\n };\n const updateTooltip = () => {\n var _a, _b;\n (_b = (_a = tooltipRef.value) == null ? void 0 : _a.updatePopper) == null ? void 0 : _b.call(_a);\n };\n const updateTagTooltip = () => {\n var _a, _b;\n (_b = (_a = tagTooltipRef.value) == null ? void 0 : _a.updatePopper) == null ? void 0 : _b.call(_a);\n };\n const onSelect = option => {\n if (props.multiple) {\n let selectedOptions = props.modelValue.slice();\n const index = getValueIndex(selectedOptions, getValue(option));\n if (index > -1) {\n selectedOptions = [...selectedOptions.slice(0, index), ...selectedOptions.slice(index + 1)];\n states.cachedOptions.splice(index, 1);\n removeNewOption(option);\n } else if (props.multipleLimit <= 0 || selectedOptions.length < props.multipleLimit) {\n selectedOptions = [...selectedOptions, getValue(option)];\n states.cachedOptions.push(option);\n selectNewOption(option);\n }\n update(selectedOptions);\n if (option.created) {\n handleQueryChange(\"\");\n }\n if (props.filterable && !props.reserveKeyword) {\n states.inputValue = \"\";\n }\n } else {\n states.selectedLabel = getLabel(option);\n update(getValue(option));\n expanded.value = false;\n selectNewOption(option);\n if (!option.created) {\n clearAllNewOption();\n }\n }\n focus();\n };\n const deleteTag = (event, option) => {\n let selectedOptions = props.modelValue.slice();\n const index = getValueIndex(selectedOptions, getValue(option));\n if (index > -1 && !selectDisabled.value) {\n selectedOptions = [...props.modelValue.slice(0, index), ...props.modelValue.slice(index + 1)];\n states.cachedOptions.splice(index, 1);\n update(selectedOptions);\n emit(\"remove-tag\", getValue(option));\n removeNewOption(option);\n }\n event.stopPropagation();\n focus();\n };\n const focus = () => {\n var _a;\n (_a = inputRef.value) == null ? void 0 : _a.focus();\n };\n const blur = () => {\n var _a;\n if (expanded.value) {\n expanded.value = false;\n nextTick(() => {\n var _a2;\n return (_a2 = inputRef.value) == null ? void 0 : _a2.blur();\n });\n return;\n }\n (_a = inputRef.value) == null ? void 0 : _a.blur();\n };\n const handleEsc = () => {\n if (states.inputValue.length > 0) {\n states.inputValue = \"\";\n } else {\n expanded.value = false;\n }\n };\n const getLastNotDisabledIndex = value => findLastIndex(value, it => !states.cachedOptions.some(option => getValue(option) === it && getDisabled(option)));\n const handleDel = e => {\n if (!props.multiple) return;\n if (e.code === EVENT_CODE.delete) return;\n if (states.inputValue.length === 0) {\n e.preventDefault();\n const selected = props.modelValue.slice();\n const lastNotDisabledIndex = getLastNotDisabledIndex(selected);\n if (lastNotDisabledIndex < 0) return;\n const removeTagValue = selected[lastNotDisabledIndex];\n selected.splice(lastNotDisabledIndex, 1);\n const option = states.cachedOptions[lastNotDisabledIndex];\n states.cachedOptions.splice(lastNotDisabledIndex, 1);\n removeNewOption(option);\n update(selected);\n emit(\"remove-tag\", removeTagValue);\n }\n };\n const handleClear = () => {\n let emptyValue;\n if (isArray(props.modelValue)) {\n emptyValue = [];\n } else {\n emptyValue = valueOnClear.value;\n }\n if (props.multiple) {\n states.cachedOptions = [];\n } else {\n states.selectedLabel = \"\";\n }\n expanded.value = false;\n update(emptyValue);\n emit(\"clear\");\n clearAllNewOption();\n focus();\n };\n const onKeyboardNavigate = (direction, hoveringIndex = void 0) => {\n const options = filteredOptions.value;\n if (![\"forward\", \"backward\"].includes(direction) || selectDisabled.value || options.length <= 0 || optionsAllDisabled.value || isComposing.value) {\n return;\n }\n if (!expanded.value) {\n return toggleMenu();\n }\n if (hoveringIndex === void 0) {\n hoveringIndex = states.hoveringIndex;\n }\n let newIndex = -1;\n if (direction === \"forward\") {\n newIndex = hoveringIndex + 1;\n if (newIndex >= options.length) {\n newIndex = 0;\n }\n } else if (direction === \"backward\") {\n newIndex = hoveringIndex - 1;\n if (newIndex < 0 || newIndex >= options.length) {\n newIndex = options.length - 1;\n }\n }\n const option = options[newIndex];\n if (getDisabled(option) || option.type === \"Group\") {\n return onKeyboardNavigate(direction, newIndex);\n } else {\n states.hoveringIndex = newIndex;\n scrollToItem(newIndex);\n }\n };\n const onKeyboardSelect = () => {\n if (!expanded.value) {\n return toggleMenu();\n } else if (~states.hoveringIndex && filteredOptions.value[states.hoveringIndex]) {\n onSelect(filteredOptions.value[states.hoveringIndex]);\n }\n };\n const onHoverOption = idx => {\n states.hoveringIndex = idx != null ? idx : -1;\n };\n const updateHoveringIndex = () => {\n if (!props.multiple) {\n states.hoveringIndex = filteredOptions.value.findIndex(item => {\n return getValueKey(item) === getValueKey(props.modelValue);\n });\n } else {\n states.hoveringIndex = filteredOptions.value.findIndex(item => props.modelValue.some(modelValue => getValueKey(modelValue) === getValueKey(item)));\n }\n };\n const onInput = event => {\n states.inputValue = event.target.value;\n if (props.remote) {\n debouncedOnInputChange();\n } else {\n return onInputChange();\n }\n };\n const handleClickOutside = event => {\n expanded.value = false;\n if (isFocused.value) {\n const _event = new FocusEvent(\"focus\", event);\n handleBlur(_event);\n }\n };\n const handleMenuEnter = () => {\n states.isBeforeHide = false;\n return nextTick(() => {\n if (~indexRef.value) {\n scrollToItem(states.hoveringIndex);\n }\n });\n };\n const scrollToItem = index => {\n menuRef.value.scrollToItem(index);\n };\n const getOption = (value, cachedOptions) => {\n const selectValue = getValueKey(value);\n if (allOptionsValueMap.value.has(selectValue)) {\n const {\n option\n } = allOptionsValueMap.value.get(selectValue);\n return option;\n }\n if (cachedOptions && cachedOptions.length) {\n const option = cachedOptions.find(option2 => getValueKey(getValue(option2)) === selectValue);\n if (option) {\n return option;\n }\n }\n return {\n [aliasProps.value.value]: value,\n [aliasProps.value.label]: value\n };\n };\n const initStates = (needUpdateSelectedLabel = false) => {\n if (props.multiple) {\n if (props.modelValue.length > 0) {\n const cachedOptions = states.cachedOptions.slice();\n states.cachedOptions.length = 0;\n states.previousValue = props.modelValue.toString();\n for (const value of props.modelValue) {\n const option = getOption(value, cachedOptions);\n states.cachedOptions.push(option);\n }\n } else {\n states.cachedOptions = [];\n states.previousValue = void 0;\n }\n } else {\n if (hasModelValue.value) {\n states.previousValue = props.modelValue;\n const options = filteredOptions.value;\n const selectedItemIndex = options.findIndex(option => getValueKey(getValue(option)) === getValueKey(props.modelValue));\n if (~selectedItemIndex) {\n states.selectedLabel = getLabel(options[selectedItemIndex]);\n } else {\n if (!states.selectedLabel || needUpdateSelectedLabel) {\n states.selectedLabel = getValueKey(props.modelValue);\n }\n }\n } else {\n states.selectedLabel = \"\";\n states.previousValue = void 0;\n }\n }\n clearAllNewOption();\n calculatePopperSize();\n };\n watch(expanded, val => {\n if (val) {\n handleQueryChange(\"\");\n } else {\n states.inputValue = \"\";\n states.previousQuery = null;\n states.isBeforeHide = true;\n createNewOption(\"\");\n }\n emit(\"visible-change\", val);\n });\n watch(() => props.modelValue, (val, oldVal) => {\n var _a;\n if (!val || props.multiple && val.toString() !== states.previousValue || !props.multiple && getValueKey(val) !== getValueKey(states.previousValue)) {\n initStates(true);\n }\n if (!isEqual(val, oldVal) && props.validateEvent) {\n (_a = elFormItem == null ? void 0 : elFormItem.validate) == null ? void 0 : _a.call(elFormItem, \"change\").catch(err => debugWarn(err));\n }\n }, {\n deep: true\n });\n watch(() => props.options, () => {\n const input = inputRef.value;\n if (!input || input && document.activeElement !== input) {\n initStates();\n }\n }, {\n deep: true,\n flush: \"post\"\n });\n watch(() => filteredOptions.value, () => {\n return menuRef.value && nextTick(menuRef.value.resetScrollTop);\n });\n watchEffect(() => {\n if (states.isBeforeHide) return;\n updateOptions();\n });\n watchEffect(() => {\n const {\n valueKey,\n options\n } = props;\n const duplicateValue = /* @__PURE__ */new Map();\n for (const item of options) {\n const optionValue = getValue(item);\n let v = optionValue;\n if (isObject(v)) {\n v = get(optionValue, valueKey);\n }\n if (duplicateValue.get(v)) {\n debugWarn(\"ElSelectV2\", `The option values you provided seem to be duplicated, which may cause some problems, please check.`);\n break;\n } else {\n duplicateValue.set(v, true);\n }\n }\n });\n onMounted(() => {\n initStates();\n });\n useResizeObserver(selectRef, handleResize);\n useResizeObserver(selectionRef, resetSelectionWidth);\n useResizeObserver(calculatorRef, resetCalculatorWidth);\n useResizeObserver(menuRef, updateTooltip);\n useResizeObserver(wrapperRef, updateTooltip);\n useResizeObserver(tagMenuRef, updateTagTooltip);\n useResizeObserver(collapseItemRef, resetCollapseItemWidth);\n return {\n inputId,\n collapseTagSize,\n currentPlaceholder,\n expanded,\n emptyText,\n popupHeight,\n debounce: debounce$1,\n allOptions,\n filteredOptions,\n iconComponent,\n iconReverse,\n tagStyle,\n collapseTagStyle,\n inputStyle,\n popperSize,\n dropdownMenuVisible,\n hasModelValue,\n shouldShowPlaceholder,\n selectDisabled,\n selectSize,\n showClearBtn,\n states,\n isFocused,\n nsSelect,\n nsInput,\n calculatorRef,\n inputRef,\n menuRef,\n tagMenuRef,\n tooltipRef,\n tagTooltipRef,\n selectRef,\n wrapperRef,\n selectionRef,\n prefixRef,\n suffixRef,\n collapseItemRef,\n popperRef,\n validateState,\n validateIcon,\n showTagList,\n collapseTagList,\n debouncedOnInputChange,\n deleteTag,\n getLabel,\n getValue,\n getDisabled,\n getValueKey,\n handleClear,\n handleClickOutside,\n handleDel,\n handleEsc,\n focus,\n blur,\n handleMenuEnter,\n handleResize,\n resetSelectionWidth,\n resetCalculatorWidth,\n updateTooltip,\n updateTagTooltip,\n updateOptions,\n toggleMenu,\n scrollTo: scrollToItem,\n onInput,\n onKeyboardNavigate,\n onKeyboardSelect,\n onSelect,\n onHover: onHoverOption,\n handleCompositionStart,\n handleCompositionEnd,\n handleCompositionUpdate\n };\n};\nexport { useSelect as default };","map":{"version":3,"names":["MINIMUM_INPUT_WIDTH","useSelect","props","emit","t","useLocale","nsSelect","useNamespace","nsInput","form","elForm","formItem","elFormItem","useFormItem","inputId","useFormItemInputId","formItemContext","aliasProps","getLabel","getValue","getDisabled","getOptions","useProps","valueOnClear","isEmptyValue","useEmptyValues","states","reactive","inputValue","cachedOptions","createdOptions","hoveringIndex","inputHovering","selectionWidth","calculatorWidth","collapseItemWidth","previousQuery","previousValue","selectedLabel","menuVisibleOnFocus","isBeforeHide","popperSize","ref","selectRef","selectionRef","tooltipRef","tagTooltipRef","inputRef","calculatorRef","prefixRef","suffixRef","menuRef","tagMenuRef","collapseItemRef","isComposing","handleCompositionStart","handleCompositionEnd","handleCompositionUpdate","useComposition","afterComposition","e","onInput","wrapperRef","isFocused","handleBlur","useFocusController","beforeFocus","selectDisabled","value","afterFocus","automaticDropdown","expanded","beforeBlur","event","_a","_b","isFocusInsideContent","afterBlur","allOptions","filteredOptions","computed","disabled","popupHeight","totalHeight","length","itemHeight","height","hasModelValue","multiple","isArray","modelValue","showClearBtn","clearable","iconComponent","remote","filterable","ArrowDown","iconReverse","is","validateState","validateIcon","ValidateComponentsMap","debounce$1","emptyText","loading","loadingText","noMatchText","noDataText","filterOptions","query","isValidOption","o","isFunction","filterMethod","remoteMethod","regexp","RegExp","escapeStringRegexp","test","options","reduce","all","item","filtered","filter","push","label","type","updateOptions","allOptionsValueMap","valueMap","Map","forEach","option","index","set","getValueKey","filteredOptionsValueMap","optionsAllDisabled","every","selectSize","useFormSize","collapseTagSize","calculatePopperSize","offsetWidth","getGapWidth","style","window","getComputedStyle","Number","parseFloat","gap","tagStyle","gapWidth","maxWidth","maxCollapseTags","collapseTagStyle","inputStyle","width","Math","max","shouldShowPlaceholder","currentPlaceholder","_placeholder","placeholder","popperRef","contentRef","indexRef","len","has","get","dropdownMenuVisible","val","showTagList","collapseTags","slice","collapseTagList","createNewOption","removeNewOption","selectNewOption","clearAllNewOption","useAllowCreate","toggleMenu","onInputChange","handleQueryChange","debouncedOnInputChange","debounce","defaultFirstOption","nextTick","checkDefaultFirstOption","updateHoveringIndex","optionsInDropdown","n","userCreatedOption","find","created","firstOriginOption","getValueIndex","emitChange","isEqual","CHANGE_EVENT","update","UPDATE_MODEL_EVENT","String","arr","isObject","indexOf","valueKey","some","i","handleResize","resetSelectionWidth","getBoundingClientRect","resetCalculatorWidth","resetCollapseItemWidth","updateTooltip","updatePopper","call","updateTagTooltip","onSelect","selectedOptions","splice","multipleLimit","reserveKeyword","focus","deleteTag","stopPropagation","blur","_a2","handleEsc","getLastNotDisabledIndex","findLastIndex","it","handleDel","code","EVENT_CODE","delete","preventDefault","selected","lastNotDisabledIndex","removeTagValue","handleClear","emptyValue","onKeyboardNavigate","direction","includes","newIndex","scrollToItem","onKeyboardSelect","onHoverOption","idx","findIndex","target","handleClickOutside","_event","FocusEvent","handleMenuEnter","getOption","selectValue","option2","initStates","needUpdateSelectedLabel","toString","selectedItemIndex","watch","oldVal","validateEvent","validate","catch","err","debugWarn","deep","input","document","activeElement","flush","resetScrollTop","watchEffect","duplicateValue","optionValue","v","onMounted","useResizeObserver","scrollTo","onHover"],"sources":["../../../../../../packages/components/select-v2/src/useSelect.ts"],"sourcesContent":["import {\n computed,\n nextTick,\n onMounted,\n reactive,\n ref,\n watch,\n watchEffect,\n} from 'vue'\nimport {\n findLastIndex,\n get,\n isEqual,\n debounce as lodashDebounce,\n} from 'lodash-unified'\nimport { useResizeObserver } from '@vueuse/core'\nimport {\n ValidateComponentsMap,\n debugWarn,\n escapeStringRegexp,\n isArray,\n isFunction,\n isObject,\n} from '@element-plus/utils'\nimport {\n useComposition,\n useEmptyValues,\n useFocusController,\n useLocale,\n useNamespace,\n} from '@element-plus/hooks'\nimport {\n CHANGE_EVENT,\n EVENT_CODE,\n UPDATE_MODEL_EVENT,\n} from '@element-plus/constants'\nimport {\n useFormItem,\n useFormItemInputId,\n useFormSize,\n} from '@element-plus/components/form'\n\nimport { ArrowDown } from '@element-plus/icons-vue'\nimport { useAllowCreate } from './useAllowCreate'\nimport { useProps } from './useProps'\n\nimport type { Option, OptionType, SelectStates } from './select.types'\nimport type { ISelectV2Props } from './token'\nimport type { SelectEmitFn } from './defaults'\nimport type { TooltipInstance } from '@element-plus/components/tooltip'\nimport type { SelectDropdownInstance } from './select-dropdown'\n\nconst MINIMUM_INPUT_WIDTH = 11\n\nconst useSelect = (props: ISelectV2Props, emit: SelectEmitFn) => {\n // inject\n const { t } = useLocale()\n const nsSelect = useNamespace('select')\n const nsInput = useNamespace('input')\n const { form: elForm, formItem: elFormItem } = useFormItem()\n const { inputId } = useFormItemInputId(props, {\n formItemContext: elFormItem,\n })\n const { aliasProps, getLabel, getValue, getDisabled, getOptions } =\n useProps(props)\n const { valueOnClear, isEmptyValue } = useEmptyValues(props)\n\n const states: SelectStates = reactive({\n inputValue: '',\n cachedOptions: [],\n createdOptions: [],\n hoveringIndex: -1,\n inputHovering: false,\n selectionWidth: 0,\n calculatorWidth: 0,\n collapseItemWidth: 0,\n previousQuery: null,\n previousValue: undefined,\n selectedLabel: '',\n menuVisibleOnFocus: false,\n isBeforeHide: false,\n })\n\n // data refs\n const popperSize = ref(-1)\n\n // DOM & Component refs\n const selectRef = ref<HTMLElement>()\n const selectionRef = ref<HTMLElement>()\n const tooltipRef = ref<TooltipInstance>()\n const tagTooltipRef = ref<TooltipInstance>()\n const inputRef = ref<HTMLElement>()\n const calculatorRef = ref<HTMLElement>()\n const prefixRef = ref<HTMLElement>()\n const suffixRef = ref<HTMLElement>()\n const menuRef = ref<SelectDropdownInstance>()\n const tagMenuRef = ref<HTMLElement>()\n const collapseItemRef = ref<HTMLElement>()\n\n const {\n isComposing,\n handleCompositionStart,\n handleCompositionEnd,\n handleCompositionUpdate,\n } = useComposition({\n afterComposition: (e) => onInput(e),\n })\n\n const { wrapperRef, isFocused, handleBlur } = useFocusController(inputRef, {\n beforeFocus() {\n return selectDisabled.value\n },\n afterFocus() {\n if (props.automaticDropdown && !expanded.value) {\n expanded.value = true\n states.menuVisibleOnFocus = true\n }\n },\n beforeBlur(event) {\n return (\n tooltipRef.value?.isFocusInsideContent(event) ||\n tagTooltipRef.value?.isFocusInsideContent(event)\n )\n },\n afterBlur() {\n expanded.value = false\n states.menuVisibleOnFocus = false\n },\n })\n\n const allOptions = ref<OptionType[]>([])\n const filteredOptions = ref<OptionType[]>([])\n // the controller of the expanded popup\n const expanded = ref(false)\n\n const selectDisabled = computed(() => props.disabled || elForm?.disabled)\n\n const popupHeight = computed(() => {\n const totalHeight = filteredOptions.value.length * props.itemHeight\n return totalHeight > props.height ? props.height : totalHeight\n })\n\n const hasModelValue = computed(() => {\n return props.multiple\n ? isArray(props.modelValue) && props.modelValue.length > 0\n : !isEmptyValue(props.modelValue)\n })\n\n const showClearBtn = computed(() => {\n return (\n props.clearable &&\n !selectDisabled.value &&\n states.inputHovering &&\n hasModelValue.value\n )\n })\n\n const iconComponent = computed(() =>\n props.remote && props.filterable ? '' : ArrowDown\n )\n\n const iconReverse = computed(\n () => iconComponent.value && nsSelect.is('reverse', expanded.value)\n )\n\n const validateState = computed(() => elFormItem?.validateState || '')\n const validateIcon = computed(() => {\n // When we use indexed access to get the type of an undeclared property,\n // the unsafe type `any` will be inferred, which TypeScript throws an error to emphasize it.\n // To avoid TypeScript complaining about it, we use truthiness narrowing to narrow the type of validateState.\n if (!validateState.value) return\n return ValidateComponentsMap[validateState.value]\n })\n\n const debounce = computed(() => (props.remote ? 300 : 0))\n\n // filteredOptions includes flatten the data into one dimensional array.\n const emptyText = computed(() => {\n if (props.loading) {\n return props.loadingText || t('el.select.loading')\n } else {\n if (props.remote && !states.inputValue && allOptions.value.length === 0)\n return false\n if (\n props.filterable &&\n states.inputValue &&\n allOptions.value.length > 0 &&\n filteredOptions.value.length === 0\n ) {\n return props.noMatchText || t('el.select.noMatch')\n }\n if (allOptions.value.length === 0) {\n return props.noDataText || t('el.select.noData')\n }\n }\n return null\n })\n\n const filterOptions = (query: string) => {\n const isValidOption = (o: Option): boolean => {\n if (props.filterable && isFunction(props.filterMethod)) return true\n if (props.filterable && props.remote && isFunction(props.remoteMethod))\n return true\n // when query was given, we should test on the label see whether the label contains the given query\n const regexp = new RegExp(escapeStringRegexp(query), 'i')\n return query ? regexp.test(getLabel(o) || '') : true\n }\n if (props.loading) {\n return []\n }\n\n return [...states.createdOptions, ...props.options].reduce((all, item) => {\n const options = getOptions(item)\n\n if (isArray(options)) {\n const filtered = options.filter(isValidOption)\n\n if (filtered.length > 0) {\n all.push(\n {\n label: getLabel(item),\n type: 'Group',\n },\n ...filtered\n )\n }\n } else if (props.remote || isValidOption(item)) {\n all.push(item)\n }\n\n return all\n }, []) as OptionType[]\n }\n\n const updateOptions = () => {\n allOptions.value = filterOptions('')\n filteredOptions.value = filterOptions(states.inputValue)\n }\n\n const allOptionsValueMap = computed(() => {\n const valueMap = new Map()\n\n allOptions.value.forEach((option, index) => {\n valueMap.set(getValueKey(getValue(option)), { option, index })\n })\n return valueMap\n })\n\n const filteredOptionsValueMap = computed(() => {\n const valueMap = new Map()\n\n filteredOptions.value.forEach((option, index) => {\n valueMap.set(getValueKey(getValue(option)), { option, index })\n })\n return valueMap\n })\n\n const optionsAllDisabled = computed(() =>\n filteredOptions.value.every((option) => getDisabled(option))\n )\n\n const selectSize = useFormSize()\n\n const collapseTagSize = computed(() =>\n 'small' === selectSize.value ? 'small' : 'default'\n )\n\n const calculatePopperSize = () => {\n popperSize.value = selectRef.value?.offsetWidth || 200\n }\n\n const getGapWidth = () => {\n if (!selectionRef.value) return 0\n const style = window.getComputedStyle(selectionRef.value)\n return Number.parseFloat(style.gap || '6px')\n }\n\n // computed style\n const tagStyle = computed(() => {\n const gapWidth = getGapWidth()\n const maxWidth =\n collapseItemRef.value && props.maxCollapseTags === 1\n ? states.selectionWidth - states.collapseItemWidth - gapWidth\n : states.selectionWidth\n return { maxWidth: `${maxWidth}px` }\n })\n\n const collapseTagStyle = computed(() => {\n return { maxWidth: `${states.selectionWidth}px` }\n })\n\n const inputStyle = computed(() => ({\n width: `${Math.max(states.calculatorWidth, MINIMUM_INPUT_WIDTH)}px`,\n }))\n\n const shouldShowPlaceholder = computed(() => {\n if (isArray(props.modelValue)) {\n return props.modelValue.length === 0 && !states.inputValue\n }\n\n // when it's not multiple mode, we only determine this flag based on filterable and expanded\n // when filterable flag is true, which means we have input box on the screen\n return props.filterable ? !states.inputValue : true\n })\n\n const currentPlaceholder = computed(() => {\n const _placeholder = props.placeholder ?? t('el.select.placeholder')\n return props.multiple || !hasModelValue.value\n ? _placeholder\n : states.selectedLabel\n })\n\n // this obtains the actual popper DOM element.\n const popperRef = computed(() => tooltipRef.value?.popperRef?.contentRef)\n\n // the index with current value in options\n const indexRef = computed<number>(() => {\n if (props.multiple) {\n const len = (props.modelValue as []).length\n if (\n (props.modelValue as Array<any>).length > 0 &&\n filteredOptionsValueMap.value.has(props.modelValue[len - 1])\n ) {\n const { index } = filteredOptionsValueMap.value.get(\n props.modelValue[len - 1]\n )\n return index\n }\n } else {\n if (\n props.modelValue &&\n filteredOptionsValueMap.value.has(props.modelValue)\n ) {\n const { index } = filteredOptionsValueMap.value.get(props.modelValue)\n return index\n }\n }\n return -1\n })\n\n const dropdownMenuVisible = computed({\n get() {\n return expanded.value && emptyText.value !== false\n },\n set(val: boolean) {\n expanded.value = val\n },\n })\n\n const showTagList = computed(() => {\n if (!props.multiple) {\n return []\n }\n return props.collapseTags\n ? states.cachedOptions.slice(0, props.maxCollapseTags)\n : states.cachedOptions\n })\n\n const collapseTagList = computed(() => {\n if (!props.multiple) {\n return []\n }\n return props.collapseTags\n ? states.cachedOptions.slice(props.maxCollapseTags)\n : []\n })\n\n // hooks\n const {\n createNewOption,\n removeNewOption,\n selectNewOption,\n clearAllNewOption,\n } = useAllowCreate(props, states)\n\n // methods\n const toggleMenu = () => {\n if (selectDisabled.value) return\n\n if (states.menuVisibleOnFocus) {\n // controlled by automaticDropdown\n states.menuVisibleOnFocus = false\n } else {\n expanded.value = !expanded.value\n }\n }\n\n const onInputChange = () => {\n if (states.inputValue.length > 0 && !expanded.value) {\n expanded.value = true\n }\n createNewOption(states.inputValue)\n handleQueryChange(states.inputValue)\n }\n\n const debouncedOnInputChange = lodashDebounce(onInputChange, debounce.value)\n\n const handleQueryChange = (val: string) => {\n if (states.previousQuery === val || isComposing.value) {\n return\n }\n states.previousQuery = val\n if (props.filterable && isFunction(props.filterMethod)) {\n props.filterMethod(val)\n } else if (\n props.filterable &&\n props.remote &&\n isFunction(props.remoteMethod)\n ) {\n props.remoteMethod(val)\n }\n if (\n props.defaultFirstOption &&\n (props.filterable || props.remote) &&\n filteredOptions.value.length\n ) {\n nextTick(checkDefaultFirstOption)\n } else {\n nextTick(updateHoveringIndex)\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 = filteredOptions.value.filter(\n (n) => !n.disabled && n.type !== 'Group'\n )\n const userCreatedOption = optionsInDropdown.find((n) => n.created)\n const firstOriginOption = optionsInDropdown[0]\n states.hoveringIndex = getValueIndex(\n filteredOptions.value,\n userCreatedOption || firstOriginOption\n )\n }\n\n const emitChange = (val: any | any[]) => {\n if (!isEqual(props.modelValue, val)) {\n emit(CHANGE_EVENT, val)\n }\n }\n\n const update = (val: any) => {\n emit(UPDATE_MODEL_EVENT, val)\n emitChange(val)\n states.previousValue = props.multiple ? String(val) : val\n }\n\n const getValueIndex = (arr: unknown[] = [], value: unknown) => {\n if (!isObject(value)) {\n return arr.indexOf(value)\n }\n const valueKey = props.valueKey\n let index = -1\n arr.some((item, i) => {\n if (get(item, valueKey) === get(value, valueKey)) {\n index = i\n return true\n }\n return false\n })\n return index\n }\n\n const getValueKey = (item: unknown) => {\n return isObject(item) ? get(item, props.valueKey) : item\n }\n\n const handleResize = () => {\n calculatePopperSize()\n }\n\n const resetSelectionWidth = () => {\n states.selectionWidth = selectionRef.value!.getBoundingClientRect().width\n }\n\n const resetCalculatorWidth = () => {\n states.calculatorWidth = calculatorRef.value!.getBoundingClientRect().width\n }\n\n const resetCollapseItemWidth = () => {\n states.collapseItemWidth =\n collapseItemRef.value!.getBoundingClientRect().width\n }\n\n const updateTooltip = () => {\n tooltipRef.value?.updatePopper?.()\n }\n\n const updateTagTooltip = () => {\n tagTooltipRef.value?.updatePopper?.()\n }\n\n const onSelect = (option: Option) => {\n if (props.multiple) {\n let selectedOptions = (props.modelValue as any[]).slice()\n\n const index = getValueIndex(selectedOptions, getValue(option))\n if (index > -1) {\n selectedOptions = [\n ...selectedOptions.slice(0, index),\n ...selectedOptions.slice(index + 1),\n ]\n states.cachedOptions.splice(index, 1)\n removeNewOption(option)\n } else if (\n props.multipleLimit <= 0 ||\n selectedOptions.length < props.multipleLimit\n ) {\n selectedOptions = [...selectedOptions, getValue(option)]\n states.cachedOptions.push(option)\n selectNewOption(option)\n }\n update(selectedOptions)\n if (option.created) {\n handleQueryChange('')\n }\n if (props.filterable && !props.reserveKeyword) {\n states.inputValue = ''\n }\n } else {\n states.selectedLabel = getLabel(option)\n update(getValue(option))\n expanded.value = false\n selectNewOption(option)\n if (!option.created) {\n clearAllNewOption()\n }\n }\n focus()\n }\n\n const deleteTag = (event: MouseEvent, option: Option) => {\n let selectedOptions = (props.modelValue as any[]).slice()\n\n const index = getValueIndex(selectedOptions, getValue(option))\n\n if (index > -1 && !selectDisabled.value) {\n selectedOptions = [\n ...(props.modelValue as Array<unknown>).slice(0, index),\n ...(props.modelValue as Array<unknown>).slice(index + 1),\n ]\n states.cachedOptions.splice(index, 1)\n update(selectedOptions)\n emit('remove-tag', getValue(option))\n removeNewOption(option)\n }\n event.stopPropagation()\n focus()\n }\n\n const focus = () => {\n inputRef.value?.focus()\n }\n\n const blur = () => {\n if (expanded.value) {\n expanded.value = false\n nextTick(() => inputRef.value?.blur())\n return\n }\n inputRef.value?.blur()\n }\n\n // keyboard handlers\n const handleEsc = () => {\n if (states.inputValue.length > 0) {\n states.inputValue = ''\n } else {\n expanded.value = false\n }\n }\n\n const getLastNotDisabledIndex = (value: unknown[]) =>\n findLastIndex(\n value,\n (it) =>\n !states.cachedOptions.some(\n (option) => getValue(option) === it && getDisabled(option)\n )\n )\n\n const handleDel = (e: KeyboardEvent) => {\n if (!props.multiple) return\n if (e.code === EVENT_CODE.delete) return\n if (states.inputValue.length === 0) {\n e.preventDefault()\n const selected = (props.modelValue as Array<any>).slice()\n const lastNotDisabledIndex = getLastNotDisabledIndex(selected)\n if (lastNotDisabledIndex < 0) return\n const removeTagValue = selected[lastNotDisabledIndex]\n selected.splice(lastNotDisabledIndex, 1)\n const option = states.cachedOptions[lastNotDisabledIndex]\n states.cachedOptions.splice(lastNotDisabledIndex, 1)\n removeNewOption(option)\n update(selected)\n emit('remove-tag', removeTagValue)\n }\n }\n\n const handleClear = () => {\n let emptyValue: string | any[]\n if (isArray(props.modelValue)) {\n emptyValue = []\n } else {\n emptyValue = valueOnClear.value\n }\n\n if (props.multiple) {\n states.cachedOptions = []\n } else {\n states.selectedLabel = ''\n }\n expanded.value = false\n update(emptyValue)\n emit('clear')\n clearAllNewOption()\n focus()\n }\n\n const onKeyboardNavigate = (\n direction: 'forward' | 'backward',\n hoveringIndex: number | undefined = undefined\n ): void => {\n const options = filteredOptions.value\n if (\n !['forward', 'backward'].includes(direction) ||\n selectDisabled.value ||\n options.length <= 0 ||\n optionsAllDisabled.value ||\n isComposing.value\n ) {\n return\n }\n if (!expanded.value) {\n return toggleMenu()\n }\n if (hoveringIndex === undefined) {\n hoveringIndex = states.hoveringIndex\n }\n let newIndex = -1\n if (direction === 'forward') {\n newIndex = hoveringIndex + 1\n if (newIndex >= options.length) {\n // return to the first option\n newIndex = 0\n }\n } else if (direction === 'backward') {\n newIndex = hoveringIndex - 1\n if (newIndex < 0 || newIndex >= options.length) {\n // navigate to the last one\n newIndex = options.length - 1\n }\n }\n const option = options[newIndex]\n if (getDisabled(option) || option.type === 'Group') {\n // prevent dispatching multiple nextTick callbacks.\n return onKeyboardNavigate(direction, newIndex)\n } else {\n states.hoveringIndex = newIndex\n scrollToItem(newIndex)\n }\n }\n\n const onKeyboardSelect = () => {\n if (!expanded.value) {\n return toggleMenu()\n } else if (\n ~states.hoveringIndex &&\n filteredOptions.value[states.hoveringIndex]\n ) {\n onSelect(filteredOptions.value[states.hoveringIndex])\n }\n }\n\n const onHoverOption = (idx?: number) => {\n states.hoveringIndex = idx ?? -1\n }\n\n const updateHoveringIndex = () => {\n if (!props.multiple) {\n states.hoveringIndex = filteredOptions.value.findIndex((item) => {\n return getValueKey(item) === getValueKey(props.modelValue)\n })\n } else {\n states.hoveringIndex = filteredOptions.value.findIndex((item) =>\n props.modelValue.some(\n (modelValue: unknown) => getValueKey(modelValue) === getValueKey(item)\n )\n )\n }\n }\n\n const onInput = (event: Event) => {\n states.inputValue = (event.target as HTMLInputElement).value\n if (props.remote) {\n debouncedOnInputChange()\n } else {\n return onInputChange()\n }\n }\n\n const handleClickOutside = (event: Event) => {\n expanded.value = false\n\n if (isFocused.value) {\n const _event = new FocusEvent('focus', event)\n handleBlur(_event)\n }\n }\n\n const handleMenuEnter = () => {\n states.isBeforeHide = false\n return nextTick(() => {\n if (~indexRef.value) {\n scrollToItem(states.hoveringIndex)\n }\n })\n }\n\n const scrollToItem = (index: number) => {\n menuRef.value!.scrollToItem(index)\n }\n\n const getOption = (value: unknown, cachedOptions?: Option[]) => {\n // match the option with the given value, if not found, create a new option\n const selectValue = getValueKey(value)\n\n if (allOptionsValueMap.value.has(selectValue)) {\n const { option } = allOptionsValueMap.value.get(selectValue)\n\n return option\n }\n if (cachedOptions && cachedOptions.length) {\n const option = cachedOptions.find(\n (option) => getValueKey(getValue(option)) === selectValue\n )\n if (option) {\n return option\n }\n }\n\n return {\n [aliasProps.value.value]: value,\n [aliasProps.value.label]: value,\n }\n }\n\n const initStates = (needUpdateSelectedLabel = false) => {\n if (props.multiple) {\n if ((props.modelValue as Array<any>).length > 0) {\n const cachedOptions = states.cachedOptions.slice()\n states.cachedOptions.length = 0\n states.previousValue = props.modelValue.toString()\n\n for (const value of props.modelValue) {\n const option = getOption(value, cachedOptions)\n states.cachedOptions.push(option)\n }\n } else {\n states.cachedOptions = []\n states.previousValue = undefined\n }\n } else {\n if (hasModelValue.value) {\n states.previousValue = props.modelValue\n const options = filteredOptions.value\n const selectedItemIndex = options.findIndex(\n (option) =>\n getValueKey(getValue(option)) === getValueKey(props.modelValue)\n )\n if (~selectedItemIndex) {\n states.selectedLabel = getLabel(options[selectedItemIndex])\n } else {\n if (!states.selectedLabel || needUpdateSelectedLabel) {\n states.selectedLabel = getValueKey(props.modelValue)\n }\n }\n } else {\n states.selectedLabel = ''\n states.previousValue = undefined\n }\n }\n clearAllNewOption()\n calculatePopperSize()\n }\n\n // in order to track these individually, we need to turn them into refs instead of watching the entire\n // reactive object which could cause perf penalty when unnecessary field gets changed the watch method will\n // be invoked.\n\n watch(expanded, (val) => {\n if (val) {\n handleQueryChange('')\n } else {\n states.inputValue = ''\n states.previousQuery = null\n states.isBeforeHide = true\n createNewOption('')\n }\n emit('visible-change', val)\n })\n\n watch(\n () => props.modelValue,\n (val, oldVal) => {\n if (\n !val ||\n (props.multiple && val.toString() !== states.previousValue) ||\n (!props.multiple &&\n getValueKey(val) !== getValueKey(states.previousValue))\n ) {\n initStates(true)\n }\n if (!isEqual(val, oldVal) && props.validateEvent) {\n elFormItem?.validate?.('change').catch((err) => debugWarn(err))\n }\n },\n {\n deep: true,\n }\n )\n\n watch(\n () => props.options,\n () => {\n const input = inputRef.value\n // filter or remote-search scenarios are not initialized\n if (!input || (input && document.activeElement !== input)) {\n initStates()\n }\n },\n {\n deep: true,\n flush: 'post',\n }\n )\n\n // fix the problem that scrollTop is not reset in filterable mode\n watch(\n () => filteredOptions.value,\n () => {\n return menuRef.value && nextTick(menuRef.value.resetScrollTop)\n }\n )\n\n watchEffect(() => {\n // Anything could cause options changed, then update options\n // If you want to control it by condition, write here\n if (states.isBeforeHide) return\n updateOptions()\n })\n\n watchEffect(() => {\n const { valueKey, options } = props\n const duplicateValue = new Map()\n for (const item of options) {\n const optionValue = getValue(item)\n let v = optionValue\n if (isObject(v)) {\n v = get(optionValue, valueKey)\n }\n if (duplicateValue.get(v)) {\n debugWarn(\n 'ElSelectV2',\n `The option values you provided seem to be duplicated, which may cause some problems, please check.`\n )\n break\n } else {\n duplicateValue.set(v, true)\n }\n }\n })\n\n onMounted(() => {\n initStates()\n })\n useResizeObserver(selectRef, handleResize)\n useResizeObserver(selectionRef, resetSelectionWidth)\n useResizeObserver(calculatorRef, resetCalculatorWidth)\n useResizeObserver(menuRef, updateTooltip)\n useResizeObserver(wrapperRef, updateTooltip)\n useResizeObserver(tagMenuRef, updateTagTooltip)\n useResizeObserver(collapseItemRef, resetCollapseItemWidth)\n\n return {\n // data exports\n inputId,\n collapseTagSize,\n currentPlaceholder,\n expanded,\n emptyText,\n popupHeight,\n debounce,\n allOptions,\n filteredOptions,\n iconComponent,\n iconReverse,\n tagStyle,\n collapseTagStyle,\n inputStyle,\n popperSize,\n dropdownMenuVisible,\n hasModelValue,\n shouldShowPlaceholder,\n selectDisabled,\n selectSize,\n showClearBtn,\n states,\n isFocused,\n nsSelect,\n nsInput,\n\n // refs items exports\n calculatorRef,\n inputRef,\n menuRef,\n tagMenuRef,\n tooltipRef,\n tagTooltipRef,\n selectRef,\n wrapperRef,\n selectionRef,\n prefixRef,\n suffixRef,\n collapseItemRef,\n\n popperRef,\n\n validateState,\n validateIcon,\n showTagList,\n collapseTagList,\n\n // methods exports\n debouncedOnInputChange,\n deleteTag,\n getLabel,\n getValue,\n getDisabled,\n getValueKey,\n handleClear,\n handleClickOutside,\n handleDel,\n handleEsc,\n focus,\n blur,\n handleMenuEnter,\n handleResize,\n resetSelectionWidth,\n resetCalculatorWidth,\n updateTooltip,\n updateTagTooltip,\n updateOptions,\n toggleMenu,\n scrollTo: scrollToItem,\n onInput,\n onKeyboardNavigate,\n onKeyboardSelect,\n onSelect,\n onHover: onHoverOption,\n handleCompositionStart,\n handleCompositionEnd,\n handleCompositionUpdate,\n }\n}\n\nexport default useSelect\n"],"mappings":"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","ignoreList":[]},"metadata":{},"sourceType":"module","externalDependencies":[]} |