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;AAChC,KAAI,CAAC,OACH,YAAW,gBAAgB,+CAA+C;CAE5E,MAAM,cAAc,OAAO,gBAAgB,EAAE,UAAU,OAAO,CAAC;CAG/D,MAAM,eAAe,eAAe;AAClC,SAAO,SAAS,YAAY,OAAO,MAAM,WAAW,EAAE,MAAM,MAAM;GAClE;CAEF,MAAM,eAAe,eAAe;AAClC,MAAI,OAAO,MAAM,UAAU;GACzB,MAAM,aAAa,YAAY,OAAO,MAAM,cAAc,EAAE,CAAC;AAC7D,UACE,CAAC,aAAa,SACd,WAAW,UAAU,OAAO,MAAM,iBAClC,OAAO,MAAM,gBAAgB;QAG/B,QAAO;GAET;CAEF,MAAM,eAAe,eAAe;AAClC,SAAO,MAAM,UAAU,SAAS,MAAM,MAAM,GAAG,KAAK,MAAM;GAC1D;CAEF,MAAM,eAAe,eAAe;AAClC,SAAO,MAAM,SAAS,MAAM,SAAS;GACrC;CAEF,MAAM,aAAa,eAAe;AAChC,SAAO,MAAM,YAAY,OAAO,iBAAiB,aAAa;GAC9D;CAEF,MAAM,WAAW,oBAAoB;CACrC,MAAM,YAAe,MAAW,EAAE,EAAE,WAAc;AAChD,MAAI,CAAC,SAAS,MAAM,MAAM,CACxB,QAAO,OAAO,IAAI,SAAS,OAAO;OAC7B;GACL,MAAM,WAAW,OAAO,MAAM;AAC9B,UACE,OACA,IAAI,MAAM,SAAS;AACjB,WAAO,MAAM,IAAI,MAAM,SAAS,CAAC,KAAK,IAAI,QAAQ,SAAS;KAC3D;;;CAKR,MAAM,kBAAkB;AACtB,MAAI,CAAC,WAAW,MACd,QAAO,OAAO,gBAAgB,OAAO,aAAa,QAAQ,SAAS,MAAM;;CAI7E,MAAM,gBAAgB,UAAkB;AAEtC,SAAO,UADQ,IAAI,OAAO,mBAAmB,MAAM,EAAE,IAAI,CACjC,KAAK,OAAO,aAAa,MAAM,CAAC,IAAI,MAAM;;AAGpE,aACQ,aAAa,aACb;AACJ,MAAI,CAAC,MAAM,WAAW,CAAC,OAAO,MAAM,OAAQ,QAAO,aAAa;GAEnE;AAED,aACQ,MAAM,QACX,KAAK,WAAW;EACf,MAAM,EAAE,QAAQ,aAAa,OAAO;AAEpC,MADqB,SAAS,QAAQ,SAAS,CAAC,QAAQ,KAAK,OAAO,EAClD;AAChB,UAAO,gBAAgB,QAAQ,SAAS,MAAM;AAC9C,UAAO,eAAe,SAAS,MAAM;;AAGvC,MAAI,CAAC,MAAM,WAAW,CAAC,QAAQ;AAC7B,OACE,YACA,SAAS,IAAI,IACb,SAAS,OAAO,IAChB,IAAI,cAAc,OAAO,UAEzB;AAEF,UAAO,aAAa;;GAGzB;AAED,aACQ,YAAY,gBACZ;AACJ,SAAO,gBAAgB,YAAY;IAErC,EAAE,WAAW,MAAM,CACpB;AAED,QAAO;EACL;EACA;EACA;EACA;EACA;EACA;EACA;EACD"}