element-plus
Version:
A Component Library for Vue 3
1 lines • 5 kB
Source Map (JSON)
{"version":3,"file":"index.mjs","sources":["../../../../../packages/hooks/use-empty-values/index.ts"],"sourcesContent":["import { computed, getCurrentInstance, inject, ref } from 'vue'\nimport {\n buildProps,\n debugWarn,\n definePropType,\n isArray,\n isFunction,\n} from '@element-plus/utils'\nimport { isEqual } from 'lodash-unified'\n\nimport type { ExtractPropTypes, InjectionKey, Ref } from 'vue'\n\ntype EmptyValuesContext = ExtractPropTypes<typeof useEmptyValuesProps>\n\nexport const emptyValuesContextKey: InjectionKey<Ref<EmptyValuesContext>> =\n Symbol('emptyValuesContextKey')\nexport const SCOPE = 'use-empty-values'\nexport const DEFAULT_EMPTY_VALUES = ['', undefined, null]\nexport const DEFAULT_VALUE_ON_CLEAR = undefined\n\nexport const useEmptyValuesProps = buildProps({\n /**\n * @description empty values supported by the component\n */\n emptyValues: Array,\n /**\n * @description return value when cleared, if you want to set `undefined`, use `() => undefined`\n */\n valueOnClear: {\n /* eslint-disable-next-line @typescript-eslint/no-unsafe-function-type */\n type: definePropType<string | number | boolean | Function | null>([\n String,\n Number,\n Boolean,\n Function,\n ]),\n default: undefined,\n validator: (val: unknown) => {\n val = isFunction(val) ? val() : val\n if (isArray(val)) {\n return val.every((item) => !item)\n }\n return !val\n },\n },\n} as const)\n\nexport const useEmptyValues = (\n props: EmptyValuesContext,\n defaultValue?: null | undefined\n) => {\n const config = getCurrentInstance()\n ? inject(emptyValuesContextKey, ref<EmptyValuesContext>({}))\n : ref<EmptyValuesContext>({})\n\n const emptyValues = computed(\n () => props.emptyValues || config.value.emptyValues || DEFAULT_EMPTY_VALUES\n )\n\n const valueOnClear = computed(() => {\n // function is used for undefined cause undefined can't be a value of prop\n if (isFunction(props.valueOnClear)) {\n return props.valueOnClear()\n } else if (props.valueOnClear !== undefined) {\n return props.valueOnClear\n } else if (isFunction(config.value.valueOnClear)) {\n return config.value.valueOnClear()\n } else if (config.value.valueOnClear !== undefined) {\n return config.value.valueOnClear\n }\n return defaultValue !== undefined ? defaultValue : DEFAULT_VALUE_ON_CLEAR\n })\n\n const isEmptyValue = (value: unknown) => {\n let result = true\n if (isArray(value)) {\n result = emptyValues.value.some((emptyValue) => {\n return isEqual(value, emptyValue)\n })\n } else {\n result = emptyValues.value.includes(value)\n }\n return result\n }\n\n if (!isEmptyValue(valueOnClear.value)) {\n debugWarn(SCOPE, 'value-on-clear should be a value of empty-values')\n }\n\n return {\n emptyValues,\n valueOnClear,\n isEmptyValue,\n }\n}\n"],"names":[],"mappings":"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"}