{"version":3,"file":"index.mjs","names":[],"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"],"mappings":";;;;;;AA0BA,MAAa,wBACX,OAAO,uBAAuB;AAChC,MAAa,QAAQ;AACrB,MAAa,uBAAuB;CAAC;CAAI,KAAA;CAAW;AAAI;AACxD,MAAa,yBAAyB,KAAA;;;;AAKtC,MAAa,sBAAsB,WAAW;;;;CAI5C,aAAa;;;;CAIb,cAAc;EAEZ,MAAM,eAA4D;GAChE;GACA;GACA;GACA;EACF,CAAC;EACD,SAAS,KAAA;EACT,YAAY,QAAiB;GAC3B,MAAM,WAAW,GAAG,IAAI,IAAI,IAAI;GAChC,IAAI,QAAQ,GAAG,GACb,OAAO,IAAI,OAAO,SAAS,CAAC,IAAI;GAElC,OAAO,CAAC;EACV;CACF;AACF,CAAU;AAEV,MAAa,kBACX,OACA,iBACG;CACH,MAAM,SAAS,mBAAmB,IAC9B,OAAO,uBAAuB,IAAyB,CAAC,CAAC,CAAC,IAC1D,IAAyB,CAAC,CAAC;CAE/B,MAAM,cAAc,eACZ,MAAM,eAAe,OAAO,MAAM,eAAe,oBACzD;CAEA,MAAM,eAAe,eAAe;EAElC,IAAI,WAAW,MAAM,YAAY,GAC/B,OAAO,MAAM,aAAa;OACrB,IAAI,MAAM,iBAAiB,KAAA,GAChC,OAAO,MAAM;OACR,IAAI,WAAW,OAAO,MAAM,YAAY,GAC7C,OAAO,OAAO,MAAM,aAAa;OAC5B,IAAI,OAAO,MAAM,iBAAiB,KAAA,GACvC,OAAO,OAAO,MAAM;EAEtB,OAAO,iBAAiB,KAAA,IAAY,eAAA,KAAA;CACtC,CAAC;CAED,MAAM,gBAAgB,UAAmB;EACvC,IAAI,SAAS;EACb,IAAI,QAAQ,KAAK,GACf,SAAS,YAAY,MAAM,MAAM,eAAe;GAC9C,OAAO,QAAQ,OAAO,UAAU;EAClC,CAAC;OAED,SAAS,YAAY,MAAM,SAAS,KAAK;EAE3C,OAAO;CACT;CAEA,IAAI,CAAC,aAAa,aAAa,KAAK,GAClC,UAAU,OAAO,kDAAkD;CAGrE,OAAO;EACL;EACA;EACA;CACF;AACF"}