65 lines
		
	
	
		
			2.0 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			65 lines
		
	
	
		
			2.0 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
| import { getCurrentInstance, inject, ref, computed } from 'vue';
 | |
| import { isEqual } from 'lodash-unified';
 | |
| import { buildProps, definePropType } from '../../utils/vue/props/runtime.mjs';
 | |
| import { isFunction, isArray } from '@vue/shared';
 | |
| 
 | |
| const emptyValuesContextKey = Symbol("emptyValuesContextKey");
 | |
| const SCOPE = "use-empty-values";
 | |
| const DEFAULT_EMPTY_VALUES = ["", void 0, null];
 | |
| const DEFAULT_VALUE_ON_CLEAR = void 0;
 | |
| const useEmptyValuesProps = buildProps({
 | |
|   emptyValues: Array,
 | |
|   valueOnClear: {
 | |
|     type: definePropType([
 | |
|       String,
 | |
|       Number,
 | |
|       Boolean,
 | |
|       Function
 | |
|     ]),
 | |
|     default: void 0,
 | |
|     validator: (val) => {
 | |
|       val = isFunction(val) ? val() : val;
 | |
|       if (isArray(val)) {
 | |
|         return val.every((item) => !item);
 | |
|       }
 | |
|       return !val;
 | |
|     }
 | |
|   }
 | |
| });
 | |
| const useEmptyValues = (props, defaultValue) => {
 | |
|   const config = getCurrentInstance() ? inject(emptyValuesContextKey, ref({})) : ref({});
 | |
|   const emptyValues = computed(() => props.emptyValues || config.value.emptyValues || DEFAULT_EMPTY_VALUES);
 | |
|   const valueOnClear = computed(() => {
 | |
|     if (isFunction(props.valueOnClear)) {
 | |
|       return props.valueOnClear();
 | |
|     } else if (props.valueOnClear !== void 0) {
 | |
|       return props.valueOnClear;
 | |
|     } else if (isFunction(config.value.valueOnClear)) {
 | |
|       return config.value.valueOnClear();
 | |
|     } else if (config.value.valueOnClear !== void 0) {
 | |
|       return config.value.valueOnClear;
 | |
|     }
 | |
|     return defaultValue !== void 0 ? defaultValue : DEFAULT_VALUE_ON_CLEAR;
 | |
|   });
 | |
|   const isEmptyValue = (value) => {
 | |
|     let result = true;
 | |
|     if (isArray(value)) {
 | |
|       result = emptyValues.value.some((emptyValue) => {
 | |
|         return isEqual(value, emptyValue);
 | |
|       });
 | |
|     } else {
 | |
|       result = emptyValues.value.includes(value);
 | |
|     }
 | |
|     return result;
 | |
|   };
 | |
|   if (!isEmptyValue(valueOnClear.value)) ;
 | |
|   return {
 | |
|     emptyValues,
 | |
|     valueOnClear,
 | |
|     isEmptyValue
 | |
|   };
 | |
| };
 | |
| 
 | |
| export { DEFAULT_EMPTY_VALUES, DEFAULT_VALUE_ON_CLEAR, SCOPE, emptyValuesContextKey, useEmptyValues, useEmptyValuesProps };
 | |
| //# sourceMappingURL=index.mjs.map
 |