UNPKG

element-plus

Version:

A Component Library for Vue 3

1 lines 5.32 kB
{"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 { InjectionKey, Ref } from 'vue'\n\n// eslint-disable-next-line @typescript-eslint/no-unsafe-function-type\ntype ValueOnClear = string | number | boolean | Function | null\n\nexport interface UseEmptyValuesProps {\n /**\n * @description empty values supported by the component\n */\n emptyValues?: unknown[]\n /**\n * @description return value when cleared, if you want to set `undefined`, use `() => undefined`\n */\n valueOnClear?: ValueOnClear\n}\n\nexport const emptyValuesContextKey: InjectionKey<Ref<UseEmptyValuesProps>> =\n Symbol('emptyValuesContextKey')\nexport const SCOPE = 'use-empty-values'\nexport const DEFAULT_EMPTY_VALUES = ['', undefined, null]\nexport const DEFAULT_VALUE_ON_CLEAR = undefined\n\n/**\n * @deprecated Removed after 3.0.0, Use `UseEmptyValuesProps` instead.\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: UseEmptyValuesProps,\n defaultValue?: null | undefined\n) => {\n const config = getCurrentInstance()\n ? inject(emptyValuesContextKey, ref<UseEmptyValuesProps>({}))\n : ref<UseEmptyValuesProps>({})\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":";;;;;;AA0BO,MAAM,qBAAA,0BACJ,uBAAuB;AACzB,MAAM,KAAA,GAAQ;AACd,MAAM,oBAAA,GAAuB,CAAC,EAAA,EAAI,MAAA,EAAW,IAAI;AACjD,MAAM,sBAAA,GAAyB;AAK/B,MAAM,sBAAsB,UAAA,CAAW;AAAA;AAAA;AAAA;AAAA,EAI5C,WAAA,EAAa,KAAA;AAAA;AAAA;AAAA;AAAA,EAIb,YAAA,EAAc;AAAA;AAAA,IAEZ,MAAM,cAAA,CAA4D;AAAA,MAChE,MAAA;AAAA,MACA,MAAA;AAAA,MACA,OAAA;AAAA,MACA;AAAA,KACD,CAAA;AAAA,IACD,OAAA,EAAS,MAAA;AAAA,IACT,SAAA,EAAW,CAAC,GAAA,KAAiB;AAC3B,MAAA,GAAA,GAAM,UAAA,CAAW,GAAG,CAAA,GAAI,GAAA,EAAI,GAAI,GAAA;AAChC,MAAA,IAAI,OAAA,CAAQ,GAAG,CAAA,EAAG;AAChB,QAAA,OAAO,GAAA,CAAI,KAAA,CAAM,CAAC,IAAA,KAAS,CAAC,IAAI,CAAA;AAAA,MAClC;AACA,MAAA,OAAO,CAAC,GAAA;AAAA,IACV;AAAA;AAEJ,CAAU;AAEH,MAAM,cAAA,GAAiB,CAC5B,KAAA,EACA,YAAA,KACG;AACH,EAAA,MAAM,MAAA,GAAS,kBAAA,EAAmB,GAC9B,MAAA,CAAO,qBAAA,EAAuB,GAAA,CAAyB,EAAE,CAAC,CAAA,GAC1D,GAAA,CAAyB,EAAE,CAAA;AAE/B,EAAA,MAAM,WAAA,GAAc,QAAA;AAAA,IAClB,MAAM,KAAA,CAAM,WAAA,IAAe,MAAA,CAAO,MAAM,WAAA,IAAe;AAAA,GACzD;AAEA,EAAA,MAAM,YAAA,GAAe,SAAS,MAAM;AAElC,IAAA,IAAI,UAAA,CAAW,KAAA,CAAM,YAAY,CAAA,EAAG;AAClC,MAAA,OAAO,MAAM,YAAA,EAAa;AAAA,IAC5B,CAAA,MAAA,IAAW,KAAA,CAAM,YAAA,KAAiB,MAAA,EAAW;AAC3C,MAAA,OAAO,KAAA,CAAM,YAAA;AAAA,IACf,CAAA,MAAA,IAAW,UAAA,CAAW,MAAA,CAAO,KAAA,CAAM,YAAY,CAAA,EAAG;AAChD,MAAA,OAAO,MAAA,CAAO,MAAM,YAAA,EAAa;AAAA,IACnC,CAAA,MAAA,IAAW,MAAA,CAAO,KAAA,CAAM,YAAA,KAAiB,MAAA,EAAW;AAClD,MAAA,OAAO,OAAO,KAAA,CAAM,YAAA;AAAA,IACtB;AACA,IAAA,OAAO,YAAA,KAAiB,SAAY,YAAA,GAAe,sBAAA;AAAA,EACrD,CAAC,CAAA;AAED,EAAA,MAAM,YAAA,GAAe,CAAC,KAAA,KAAmB;AACvC,IAAA,IAAI,MAAA,GAAS,IAAA;AACb,IAAA,IAAI,OAAA,CAAQ,KAAK,CAAA,EAAG;AAClB,MAAA,MAAA,GAAS,WAAA,CAAY,KAAA,CAAM,IAAA,CAAK,CAAC,UAAA,KAAe;AAC9C,QAAA,OAAO,OAAA,CAAQ,OAAO,UAAU,CAAA;AAAA,MAClC,CAAC,CAAA;AAAA,IACH,CAAA,MAAO;AACL,MAAA,MAAA,GAAS,WAAA,CAAY,KAAA,CAAM,QAAA,CAAS,KAAK,CAAA;AAAA,IAC3C;AACA,IAAA,OAAO,MAAA;AAAA,EACT,CAAA;AAEA,EAAA,IAAI,CAAC,YAAA,CAAa,YAAA,CAAa,KAAK,CAAA,EAAG;AACrC,IAAA,SAAA,CAAU,OAAO,kDAAkD,CAAA;AAAA,EACrE;AAEA,EAAA,OAAO;AAAA,IACL,WAAA;AAAA,IACA,YAAA;AAAA,IACA;AAAA,GACF;AACF;;;;"}