UNPKG

element-plus

Version:

A Component Library for Vue 3

1 lines 6.61 kB
{"version":3,"file":"useOption.mjs","sources":["../../../../../../packages/components/select/src/useOption.ts"],"sourcesContent":["import { computed, getCurrentInstance, inject, toRaw, watch } from 'vue'\nimport { get, isEqual } from 'lodash-unified'\nimport {\n ensureArray,\n escapeStringRegexp,\n isObject,\n throwError,\n} from '@element-plus/utils'\nimport { selectGroupKey, selectKey } from './token'\nimport { COMPONENT_NAME } from './option'\n\nimport type { OptionInternalInstance, OptionProps, OptionStates } from './type'\n\nexport function useOption(props: OptionProps, states: OptionStates) {\n // inject\n const select = inject(selectKey)\n if (!select) {\n throwError(COMPONENT_NAME, 'usage: <el-select><el-option /></el-select/>')\n }\n const selectGroup = inject(selectGroupKey, { disabled: false })\n\n // computed\n const itemSelected = computed(() => {\n return contains(ensureArray(select.props.modelValue), props.value)\n })\n\n const limitReached = computed(() => {\n if (select.props.multiple) {\n const modelValue = ensureArray(select.props.modelValue ?? [])\n return (\n !itemSelected.value &&\n modelValue.length >= select.props.multipleLimit &&\n select.props.multipleLimit > 0\n )\n } else {\n return false\n }\n })\n\n const currentLabel = computed(() => {\n return props.label ?? (isObject(props.value) ? '' : props.value)\n })\n\n const currentValue = computed(() => {\n return props.value || props.label || ''\n })\n\n const isDisabled = computed(() => {\n return props.disabled || states.groupDisabled || limitReached.value\n })\n\n const instance = getCurrentInstance()! as OptionInternalInstance\n const contains = <T>(arr: T[] = [], target: T) => {\n if (!isObject(props.value)) {\n return arr && arr.includes(target)\n } else {\n const valueKey = select.props.valueKey\n return (\n arr &&\n arr.some((item) => {\n return toRaw(get(item, valueKey)) === get(target, valueKey)\n })\n )\n }\n }\n\n const hoverItem = () => {\n if (!isDisabled.value) {\n select.states.hoveringIndex = select.optionsArray.indexOf(instance.proxy)\n }\n }\n\n const updateOption = (query: string) => {\n const regexp = new RegExp(escapeStringRegexp(query), 'i')\n states.visible = regexp.test(String(currentLabel.value)) || props.created\n }\n\n watch(\n () => currentLabel.value,\n () => {\n if (!props.created && !select.props.remote) select.setSelected()\n }\n )\n\n watch(\n () => props.value,\n (val, oldVal) => {\n const { remote, valueKey } = select.props\n const shouldUpdate = remote ? val !== oldVal : !isEqual(val, oldVal)\n if (shouldUpdate) {\n select.onOptionDestroy(oldVal, instance.proxy)\n select.onOptionCreate(instance.proxy)\n }\n\n if (!props.created && !remote) {\n if (\n valueKey &&\n isObject(val) &&\n isObject(oldVal) &&\n val[valueKey] === oldVal[valueKey]\n ) {\n return\n }\n select.setSelected()\n }\n }\n )\n\n watch(\n () => selectGroup.disabled,\n () => {\n states.groupDisabled = selectGroup.disabled\n },\n { immediate: true }\n )\n\n return {\n select,\n currentLabel,\n currentValue,\n itemSelected,\n isDisabled,\n hoverItem,\n updateOption,\n }\n}\n"],"names":["ensureArray"],"mappings":"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"}