element-plus
Version:
A Component Library for Vue 3
1 lines • 6.78 kB
Source Map (JSON)
{"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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"}