UNPKG

@vuesax-alpha/nightly

Version:
1 lines • 50 kB
{"version":3,"file":"useSelect.mjs","sources":["../../../../../../packages/components/select/src/useSelect.ts"],"sourcesContent":["import {\n computed,\n nextTick,\n reactive,\n ref,\n shallowRef,\n triggerRef,\n watch,\n} from 'vue'\nimport {\n findLastIndex,\n isArray,\n isEqual,\n isNil,\n debounce as lodashDebounce,\n} from 'lodash-unified'\nimport { EVENT_CODE, UPDATE_MODEL_EVENT } from '@vuesax-alpha/constants'\nimport {\n isBoolean,\n isClient,\n isFunction,\n isKorean,\n isObject,\n removeStyle,\n scrollIntoView,\n setStyle,\n} from '@vuesax-alpha/utils'\nimport { useId, useLocale, useNamespace } from '@vuesax-alpha/hooks'\nimport type { PopperExpose } from '@vuesax-alpha/components/popper'\nimport type { SelectEmitsFn, SelectProps } from './select'\n\nimport type {\n SelectOptionContext,\n SelectOptionValue,\n SelectStates,\n SelectTargetElement,\n SelectValue,\n} from './tokens'\n\nexport function useSelectStates(props: SelectProps): SelectStates {\n return reactive({\n options: new Map(),\n cachedOptions: new Map(),\n selected: new Map(),\n disabledOptions: new Map(),\n createdLabel: null,\n targetOnElement: null,\n createdSelected: false,\n optionsCount: 0,\n filteredOptionsCount: 0,\n visible: false,\n softFocus: false,\n selectedLabel: '',\n hoverIndex: -1,\n query: '',\n previousQuery: null,\n cachedPlaceHolder: '',\n currentPlaceholder: props.placeholder,\n menuVisibleOnFocus: false,\n isOnComposition: false,\n isSilentBlur: false,\n mouseEnter: false,\n })\n}\n\nexport const useSelect = (\n props: SelectProps,\n states: SelectStates,\n emit: SelectEmitsFn\n) => {\n const ns = useNamespace('select')\n const { t } = useLocale()\n\n // template refs\n const reference = ref<HTMLInputElement>()\n const input = ref<HTMLInputElement>()\n const popperRef = ref<PopperExpose>()\n const chips = ref<HTMLElement>()\n const selectWrapper = ref<HTMLElement>()\n const scrollbar = ref<{\n handleScroll: () => void\n }>()\n const hoverOption = ref<SelectOptionContext>()\n const inputId = useId(props.id)\n const queryChange = shallowRef<string>('')\n const debounce = ref(0)\n const readonly = computed(\n () => !props.filter || props.multiple || !states.visible\n )\n\n const selectDisabled = computed(() => props.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 && !selectDisabled.value && states.mouseEnter && hasValue\n return criteria\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 selectedArray = computed(() => Array.from(states.selected.values()))\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.filter &&\n props.allowCreate &&\n states.query !== '' &&\n !hasExistingOption\n )\n })\n\n const dropMenuVisible = computed({\n get() {\n return states.visible\n },\n set(val: boolean) {\n states.visible = val\n },\n })\n\n const emptyText = computed(() => {\n if (props.loading) {\n return props.loadingText || t('vs.select.loading')\n }\n\n if (\n props.filter &&\n states.query &&\n states.options.size > 0 &&\n states.filteredOptionsCount === 0\n ) {\n return props.noMatchText || t('vs.select.noMatch')\n }\n if (states.options.size === 0) {\n return props.noDataText || t('vs.select.noData')\n }\n return null\n })\n\n watch(\n () => props.placeholder,\n (val) => {\n states.cachedPlaceHolder = states.currentPlaceholder = val\n\n const hasValue =\n props.multiple &&\n Array.isArray(props.modelValue) &&\n props.modelValue.length > 0\n\n if (hasValue) {\n states.currentPlaceholder = ''\n }\n }\n )\n\n watch(\n () => props.modelValue,\n (val) => {\n if (props.multiple) {\n if (\n // @ts-ignore\n (val && val.length > 0) ||\n (input.value && states.query !== '')\n ) {\n states.currentPlaceholder = ''\n } else {\n states.currentPlaceholder = states.cachedPlaceHolder\n }\n if (props.filter) {\n states.query = ''\n handleQueryChange(states.query)\n }\n\n nextTick(() => {\n if (reference.value && chips.value) {\n reference.value.style.height = `${chips.value.scrollHeight - 1}px`\n }\n })\n }\n setSelected()\n nextTick(() => {\n popperRef.value?.updatePopper()\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 handleQueryChange('')\n states.query = ''\n states.previousQuery = null\n states.selectedLabel = ''\n states.menuVisibleOnFocus = false\n resetHoverIndex()\n\n nextTick(() => {\n if (\n input.value &&\n input.value.value === '' &&\n selectedArray.value.length === 0\n ) {\n states.currentPlaceholder = states.cachedPlaceHolder\n }\n })\n\n if (!props.multiple) {\n if (selectedArray.value.length) {\n if (\n props.filter &&\n props.allowCreate &&\n states.createdSelected &&\n states.createdLabel\n ) {\n states.selectedLabel = states.createdLabel\n } else {\n states.selectedLabel = selectedArray.value[0].currentLabel\n }\n if (props.filter) states.query = states.selectedLabel\n }\n\n if (props.filter) {\n states.currentPlaceholder = states.cachedPlaceHolder\n }\n }\n } else {\n popperRef.value?.updatePopper()\n\n if (props.filter) {\n states.filteredOptionsCount = states.optionsCount\n states.query = 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\n states.query && handleQueryChange(states.query)\n if (!props.multiple) {\n queryChange.value = ''\n\n triggerRef(queryChange)\n }\n }\n }\n 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 (!isClient) return\n popperRef.value?.updatePopper()\n\n const inputs = selectWrapper.value?.querySelectorAll('input') || []\n if (\n !Array.from(inputs).includes(document.activeElement as HTMLInputElement)\n ) {\n setSelected()\n }\n if (\n props.defaultFirstOption &&\n props.filter &&\n states.filteredOptionsCount\n ) {\n checkDefaultFirstOption()\n }\n },\n {\n flush: 'post',\n }\n )\n\n watch(\n () => states.hoverIndex,\n (val) => {\n if (val > -1) {\n hoverOption.value = optionsArray.value[val]\n } else {\n hoverOption.value = undefined\n }\n optionsArray.value.forEach((option) => {\n option.hover = isEqual(hoverOption.value, option)\n })\n }\n )\n\n const showTagList = computed(() => {\n if (!props.multiple) {\n return []\n }\n return props.collapseChips\n ? selectedArray.value.slice(0, props.maxCollapseChips)\n : selectedArray.value\n })\n\n const collapseTagList = computed(() => {\n if (!props.multiple) {\n return []\n }\n return props.collapseChips\n ? selectedArray.value.slice(props.maxCollapseChips)\n : []\n })\n\n const handleQueryChange = (val: string) => {\n if (states.previousQuery === val || states.isOnComposition) return\n if (states.previousQuery === null && isFunction(props.filterMethod)) {\n states.previousQuery = val\n return\n }\n states.previousQuery = val\n nextTick(() => {\n if (states.visible) popperRef.value?.updatePopper()\n })\n states.hoverIndex = -1\n if (props.multiple && props.filter) {\n nextTick(() => {\n managePlaceholder()\n })\n }\n if (isFunction(props.filterMethod)) {\n props.filterMethod(val)\n } else {\n states.filteredOptionsCount = states.optionsCount\n queryChange.value = val\n\n triggerRef(queryChange)\n }\n if (\n props.defaultFirstOption &&\n props.filter &&\n states.filteredOptionsCount\n ) {\n nextTick(() => {\n checkDefaultFirstOption()\n })\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 queryChange)\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.isDisabled && !n.groupDisabled\n )\n const userCreatedOption = optionsInDropdown.find((n) => n.created)\n const firstOriginOption = optionsInDropdown[0]\n states.hoverIndex = getValueIndex(\n optionsArray.value,\n firstOriginOption || userCreatedOption\n )\n }\n\n const setSelected = () => {\n states.selected.clear()\n\n if (!props.multiple) {\n const option = getOption(props.modelValue as SelectOptionValue)\n if (option.created) {\n states.createdLabel = `${option.value}`\n states.createdSelected = true\n } else {\n states.createdSelected = false\n }\n states.selectedLabel = option.currentLabel\n states.selected.set(option.value, option)\n if (props.filter) states.query = states.selectedLabel\n return\n }\n\n states.selectedLabel = ''\n\n if (Array.isArray(props.modelValue)) {\n props.modelValue.forEach((value) => {\n const option = getOption(value)\n states.selected.set(option.value, option)\n })\n }\n }\n\n const getOption = (value: SelectOptionValue): SelectOptionContext => {\n let option: SelectOptionContext | null = null\n\n for (let i = states.cachedOptions.size - 1; i >= 0; i--) {\n const cachedOption = cachedOptionsArray.value[i]\n\n const isEqualValue = isObject(value)\n ? isEqual(cachedOption.value, value)\n : cachedOption.value === value\n if (isEqualValue) {\n option = cachedOption\n break\n }\n }\n\n if (option) return option\n\n const label: string | any[] = isObject(value)\n ? ''\n : !isNil(value)\n ? String(value)\n : ''\n\n const newOption = {\n value,\n currentLabel: label,\n label,\n hit: true,\n } as SelectOptionContext\n\n if (props.multiple) {\n newOption.hit = false\n }\n\n return newOption\n }\n\n const resetHoverIndex = () => {\n setTimeout(() => {\n if (!props.multiple) {\n states.hoverIndex = optionsArray.value.findIndex((item) => {\n return isEqual(item, selectedArray.value[0])\n })\n return\n }\n\n if (selectedArray.value.length > 0) {\n states.hoverIndex = Math.min.apply(\n null,\n selectedArray.value.map((selected) => {\n return optionsArray.value.findIndex((item) => {\n return isEqual(item.value, selected.value)\n })\n })\n )\n return\n }\n\n states.hoverIndex = -1\n }, 300)\n }\n\n const handleResize = () => {\n if (reference.value && chips.value) {\n reference.value.style.height = `${chips.value.scrollHeight}px`\n }\n popperRef.value?.updatePopper()\n }\n\n const onInputChange = () => {\n if (props.filter && states.query !== states.selectedLabel) {\n states.query = states.selectedLabel\n handleQueryChange(states.selectedLabel || '')\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: SelectValue) => {\n if (!isEqual(props.modelValue, val)) {\n emit('change', val)\n }\n }\n\n const getLastNotDisabledIndex = (value: SelectOptionValue[]) =>\n findLastIndex(\n value,\n (it: SelectOptionValue) => !states.disabledOptions.has(it)\n )\n\n const deletePrevTag = (e: KeyboardEvent) => {\n if (!props.multiple) return\n if (e.code === EVENT_CODE.delete) return\n\n const value = (e.target as HTMLInputElement).value\n\n if (value.length <= 0 && !toggleLastOptionHitState()) {\n // @ts-ignore\n const value = props.modelValue.slice()\n const lastNotDisabledIndex = getLastNotDisabledIndex(value)\n if (lastNotDisabledIndex < 0) return\n value.splice(lastNotDisabledIndex, 1)\n emit(UPDATE_MODEL_EVENT, value)\n emitChange(value)\n }\n\n // @ts-ignore\n if (value.length === 1 && props.modelValue.length === 0) {\n states.currentPlaceholder = states.cachedPlaceHolder\n }\n }\n\n const deleteTag = (tag: SelectOptionValue) => {\n const hasTag = states.cachedOptions.get(tag)\n if (!hasTag) return\n const index = getValueIndex(selectedArray.value, hasTag)\n if (index > -1 && !selectDisabled.value) {\n // @ts-ignore\n const value = props.modelValue.slice()\n value.splice(index, 1)\n emit(UPDATE_MODEL_EVENT, value)\n emitChange(value)\n emit('remove-tag', tag)\n }\n focus()\n }\n\n const deleteSelected = () => {\n const value: SelectOptionValue | any[] = props.multiple\n ? []\n : props.notValue\n if (isArray(value)) {\n for (const item of selectedArray.value) {\n if (item.isDisabled) value.push(item.value)\n }\n }\n emit(UPDATE_MODEL_EVENT, value)\n emitChange(value)\n states.hoverIndex = -1\n states.visible = false\n emit('clear')\n focus()\n }\n\n const handleOptionSelect = (\n option: SelectOptionContext,\n byClick: boolean\n ) => {\n if (props.multiple) {\n let modelValue: SelectOptionValue[] = props.modelValue as any\n if (!isArray(props.modelValue)) {\n if (states.options.has(modelValue)) {\n modelValue = [modelValue]\n } else {\n modelValue = []\n }\n }\n\n const value = modelValue.slice()\n const optionIndex = getValueIndex(selectedArray.value, option)\n\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 emit(UPDATE_MODEL_EVENT, value)\n emitChange(value)\n if (option.created) {\n states.query = ''\n handleQueryChange('')\n }\n if (props.filter) input.value?.focus()\n } else {\n 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 = (\n arr: SelectOptionContext[],\n option: SelectOptionContext\n ) => {\n let index = -1\n arr.some((item, i) => {\n if (isEqual(item.value, option.value)) {\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: SelectOptionContext) => {\n let target\n\n if (option?.value) {\n const options = optionsArray.value.filter(\n (item) => item.value === option.value\n )\n if (options.length > 0) {\n target = options[0].el\n }\n }\n\n if (popperRef.value && target) {\n const menu: HTMLElement | null | undefined =\n popperRef.value?.contentRef?.querySelector?.(`.${ns.e('options')}`)\n if (menu) {\n setStyle(menu, 'scroll-behavior', 'smooth')\n scrollIntoView(menu as HTMLElement, target)\n removeStyle(menu, 'scroll-behavior')\n }\n }\n scrollbar.value?.handleScroll()\n }\n\n const onOptionCreate = (\n value: SelectOptionValue,\n option: SelectOptionContext\n ) => {\n states.optionsCount++\n states.filteredOptionsCount++\n states.options.set(value, option)\n states.cachedOptions.set(value, option)\n option.isDisabled && states.disabledOptions.set(value, option)\n }\n\n const onOptionDestroy = (\n value: SelectOptionValue,\n option: SelectOptionContext\n ) => {\n if (states.options.get(value) === option) {\n states.optionsCount--\n states.filteredOptionsCount--\n states.options.delete(value)\n }\n }\n\n const resetInputState = (e: KeyboardEvent) => {\n if (e.code !== EVENT_CODE.backspace) toggleLastOptionHitState(false)\n }\n\n const toggleLastOptionHitState = (hit?: boolean) => {\n if (!selectedArray.value.length) return\n\n const lastNotDisabledIndex = getLastNotDisabledIndex(\n selectedArray.value.map((it) => it.value)\n )\n const option = selectedArray.value[lastNotDisabledIndex]\n if (!option) return\n\n if (isBoolean(hit)) {\n option.hit = hit\n return hit\n }\n\n option.hit = !option.hit\n return option.hit\n }\n\n const handleComposition = (event: Event) => {\n const text = (event.target as HTMLInputElement)?.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 handleTarget = (\n target: SelectTargetElement | null,\n condition = true\n ) => {\n if (condition) states.targetOnElement = target\n }\n\n const handleMenuEnter = () => {\n nextTick(() => scrollToOption(selectedArray.value[0]))\n }\n\n const focus = () => {\n states.visible = true\n reference.value?.focus()\n }\n\n const handleFocus = (event: FocusEvent) => {\n if (!states.softFocus) {\n if (props.filter) {\n if (!states.visible) {\n states.menuVisibleOnFocus = true\n }\n // states.visible = true\n }\n 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: FocusEvent) => {\n // https://github.com/ElemeFE/element/pull/10822\n nextTick(() => {\n if (states.isSilentBlur) {\n states.isSilentBlur = false\n } else {\n emit('blur', event)\n }\n })\n states.softFocus = false\n }\n\n const handleClearClick = () => {\n deleteSelected()\n }\n\n const showClearable = computed(() => {\n if (!props.clearable || props.disabled || props.loading) return false\n if (optionsArray.value.length === 0) return false\n\n const ignoreDisabledOptions = optionsArray.value.filter(\n (e) => e.isDisabled === false\n )\n if (ignoreDisabledOptions.length === 0) return false\n\n return states.mouseEnter\n })\n\n const handleClose = () => {\n states.visible = false\n }\n\n const handleKeydownEscape = (event: Event | KeyboardEvent) => {\n if (states.visible) {\n event.preventDefault()\n event.stopPropagation()\n states.visible = false\n }\n }\n\n const toggleMenu = (e?: MouseEvent) => {\n if (e && !states.mouseEnter) return\n\n if (!selectDisabled.value) {\n if (states.menuVisibleOnFocus) {\n states.menuVisibleOnFocus = false\n } else {\n if (!popperRef.value || !popperRef.value.isFocusInsideContent) {\n states.visible = !states.visible\n }\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], false)\n }\n }\n }\n\n const optionsAllDisabled = computed(() =>\n optionsArray.value\n .filter((option) => option.visible)\n .every((option) => option.isDisabled)\n )\n\n const navigateOptions = (direction: string = 'next' || 'prev') => {\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.isDisabled === true ||\n option.groupDisabled === true ||\n !option.visible\n ) {\n navigateOptions(direction)\n }\n\n nextTick(\n () => !isNil(hoverOption.value) && scrollToOption(hoverOption.value)\n )\n }\n }\n\n const handleMouseEnter = () => {\n states.mouseEnter = true\n }\n\n const handleMouseLeave = () => {\n states.mouseEnter = false\n }\n\n const processBeforeOpen = () => true\n\n const processBeforeClose = () => {\n if (states.targetOnElement == null) return true\n return !['chip-close', 'input-filter'].includes(states.targetOnElement)\n }\n\n return {\n showNewOption,\n inputId,\n optionsArray,\n cachedOptionsArray,\n selectedArray,\n handleResize,\n debouncedOnInputChange,\n debouncedQueryChange,\n deletePrevTag,\n deleteTag,\n deleteSelected,\n handleOptionSelect,\n scrollToOption,\n readonly,\n showClose,\n handleTarget,\n setSelected,\n managePlaceholder,\n selectDisabled,\n toggleLastOptionHitState,\n resetInputState,\n handleComposition,\n onOptionCreate,\n onOptionDestroy,\n handleMenuEnter,\n focus,\n handleFocus,\n blur,\n handleBlur,\n handleClearClick,\n showClearable,\n handleClose,\n handleKeydownEscape,\n toggleMenu,\n selectOption,\n navigateOptions,\n dropMenuVisible,\n queryChange,\n showTagList,\n collapseTagList,\n\n // DOM ref\n reference,\n input,\n popperRef,\n chips,\n selectWrapper,\n scrollbar,\n\n // Mouser Event\n handleMouseEnter,\n handleMouseLeave,\n\n processBeforeOpen,\n processBeforeClose,\n\n emptyText,\n\n resetHoverIndex,\n }\n}\n"],"names":["debounce","lodashDebounce","value"],"mappings":"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