UNPKG

element-plus

Version:

A Component Library for Vue 3

1 lines 5.04 kB
{"version":3,"file":"useOption.mjs","names":[],"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"],"mappings":";;;;;;;;;AAaA,SAAgB,UAAU,OAAoB,QAAsB;CAElE,MAAM,SAAS,OAAO,UAAU;CAChC,IAAI,CAAC,QACH,WAAW,gBAAgB,+CAA+C;CAE5E,MAAM,cAAc,OAAO,gBAAgB,EAAE,UAAU,OAAO,CAAC;CAG/D,MAAM,eAAe,eAAe;EAClC,OAAO,SAAS,YAAY,OAAO,MAAM,WAAW,EAAE,MAAM,MAAM;GAClE;CAEF,MAAM,eAAe,eAAe;EAClC,IAAI,OAAO,MAAM,UAAU;GACzB,MAAM,aAAa,YAAY,OAAO,MAAM,cAAc,EAAE,CAAC;GAC7D,OACE,CAAC,aAAa,SACd,WAAW,UAAU,OAAO,MAAM,iBAClC,OAAO,MAAM,gBAAgB;SAG/B,OAAO;GAET;CAEF,MAAM,eAAe,eAAe;EAClC,OAAO,MAAM,UAAU,SAAS,MAAM,MAAM,GAAG,KAAK,MAAM;GAC1D;CAEF,MAAM,eAAe,eAAe;EAClC,OAAO,MAAM,SAAS,MAAM,SAAS;GACrC;CAEF,MAAM,aAAa,eAAe;EAChC,OAAO,MAAM,YAAY,OAAO,iBAAiB,aAAa;GAC9D;CAEF,MAAM,WAAW,oBAAoB;CACrC,MAAM,YAAe,MAAW,EAAE,EAAE,WAAc;EAChD,IAAI,CAAC,SAAS,MAAM,MAAM,EACxB,OAAO,OAAO,IAAI,SAAS,OAAO;OAC7B;GACL,MAAM,WAAW,OAAO,MAAM;GAC9B,OACE,OACA,IAAI,MAAM,SAAS;IACjB,OAAO,MAAM,IAAI,MAAM,SAAS,CAAC,KAAK,IAAI,QAAQ,SAAS;KAC3D;;;CAKR,MAAM,kBAAkB;EACtB,IAAI,CAAC,WAAW,OACd,OAAO,OAAO,gBAAgB,OAAO,aAAa,QAAQ,SAAS,MAAM;;CAI7E,MAAM,gBAAgB,UAAkB;EAEtC,OAAO,UAAU,IADE,OAAO,mBAAmB,MAAM,EAAE,IAC9B,CAAC,KAAK,OAAO,aAAa,MAAM,CAAC,IAAI,MAAM;;CAGpE,YACQ,aAAa,aACb;EACJ,IAAI,CAAC,MAAM,WAAW,CAAC,OAAO,MAAM,QAAQ,OAAO,aAAa;GAEnE;CAED,YACQ,MAAM,QACX,KAAK,WAAW;EACf,MAAM,EAAE,QAAQ,aAAa,OAAO;EAEpC,IADqB,SAAS,QAAQ,SAAS,CAAC,QAAQ,KAAK,OAAO,EAClD;GAChB,OAAO,gBAAgB,QAAQ,SAAS,MAAM;GAC9C,OAAO,eAAe,SAAS,MAAM;;EAGvC,IAAI,CAAC,MAAM,WAAW,CAAC,QAAQ;GAC7B,IACE,YACA,SAAS,IAAI,IACb,SAAS,OAAO,IAChB,IAAI,cAAc,OAAO,WAEzB;GAEF,OAAO,aAAa;;GAGzB;CAED,YACQ,YAAY,gBACZ;EACJ,OAAO,gBAAgB,YAAY;IAErC,EAAE,WAAW,MAAM,CACpB;CAED,OAAO;EACL;EACA;EACA;EACA;EACA;EACA;EACA;EACD"}