{"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 '@hd-front-end/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":";;;;;AAca,MAAA,qBAAA,GACX,OAAO,uBAAuB,EAAA;AACzB,MAAM,KAAQ,GAAA,mBAAA;AACd,MAAM,oBAAuB,GAAA,CAAC,EAAI,EAAA,KAAA,CAAA,EAAW,IAAI,EAAA;AACjD,MAAM,sBAAyB,GAAA,KAAA,EAAA;AAE/B,MAAM,sBAAsB,UAAW,CAAA;AAAA,EAI5C,WAAa,EAAA,KAAA;AAAA,EAIb,YAAc,EAAA;AAAA,IAEZ,MAAM,cAA4D,CAAA;AAAA,MAChE,MAAA;AAAA,MACA,MAAA;AAAA,MACA,OAAA;AAAA,MACA,QAAA;AAAA,KACD,CAAA;AAAA,IACD,OAAS,EAAA,KAAA,CAAA;AAAA,IACT,SAAA,EAAW,CAAC,GAAiB,KAAA;AAC3B,MAAA,GAAA,GAAM,UAAW,CAAA,GAAG,CAAI,GAAA,GAAA,EAAQ,GAAA,GAAA,CAAA;AAChC,MAAI,IAAA,OAAA,CAAQ,GAAG,CAAG,EAAA;AAChB,QAAA,OAAO,GAAI,CAAA,KAAA,CAAM,CAAC,IAAA,KAAS,CAAC,IAAI,CAAA,CAAA;AAAA,OAClC;AACA,MAAA,OAAO,CAAC,GAAA,CAAA;AAAA,KACV;AAAA,GACF;AACF,CAAU,EAAA;AAEG,MAAA,cAAA,GAAiB,CAC5B,KAAA,EACA,YACG,KAAA;AACH,EAAA,MAAM,MAAS,GAAA,kBAAA,EACX,GAAA,MAAA,CAAO,qBAAuB,EAAA,GAAA,CAAwB,EAAE,CAAC,CAAA,GACzD,GAAwB,CAAA,EAAE,CAAA,CAAA;AAE9B,EAAA,MAAM,WAAc,GAAA,QAAA;AAAA,IAClB,MAAM,KAAA,CAAM,WAAe,IAAA,MAAA,CAAO,MAAM,WAAe,IAAA,oBAAA;AAAA,GACzD,CAAA;AAEA,EAAM,MAAA,YAAA,GAAe,SAAS,MAAM;AAElC,IAAI,IAAA,UAAA,CAAW,KAAM,CAAA,YAAY,CAAG,EAAA;AAClC,MAAA,OAAO,MAAM,YAAa,EAAA,CAAA;AAAA,KAC5B,MAAA,IAAW,KAAM,CAAA,YAAA,KAAiB,KAAW,CAAA,EAAA;AAC3C,MAAA,OAAO,KAAM,CAAA,YAAA,CAAA;AAAA,KACJ,MAAA,IAAA,UAAA,CAAW,MAAO,CAAA,KAAA,CAAM,YAAY,CAAG,EAAA;AAChD,MAAO,OAAA,MAAA,CAAO,MAAM,YAAa,EAAA,CAAA;AAAA,KACxB,MAAA,IAAA,MAAA,CAAO,KAAM,CAAA,YAAA,KAAiB,KAAW,CAAA,EAAA;AAClD,MAAA,OAAO,OAAO,KAAM,CAAA,YAAA,CAAA;AAAA,KACtB;AACA,IAAO,OAAA,YAAA,KAAiB,SAAY,YAAe,GAAA,sBAAA,CAAA;AAAA,GACpD,CAAA,CAAA;AAED,EAAM,MAAA,YAAA,GAAe,CAAC,KAAmB,KAAA;AACvC,IAAA,IAAI,MAAS,GAAA,IAAA,CAAA;AACb,IAAI,IAAA,OAAA,CAAQ,KAAK,CAAG,EAAA;AAClB,MAAA,MAAA,GAAS,WAAY,CAAA,KAAA,CAAM,IAAK,CAAA,CAAC,UAAe,KAAA;AAC9C,QAAO,OAAA,OAAA,CAAQ,OAAO,UAAU,CAAA,CAAA;AAAA,OACjC,CAAA,CAAA;AAAA,KACI,MAAA;AACL,MAAS,MAAA,GAAA,WAAA,CAAY,KAAM,CAAA,QAAA,CAAS,KAAK,CAAA,CAAA;AAAA,KAC3C;AACA,IAAO,OAAA,MAAA,CAAA;AAAA,GACT,CAAA;AAEA,EAAA,IAAI,CAAC,YAAA,CAAa,YAAa,CAAA,KAAK,CAAG,EAAA,CAEvC;AAEA,EAAO,OAAA;AAAA,IACL,WAAA;AAAA,IACA,YAAA;AAAA,IACA,YAAA;AAAA,GACF,CAAA;AACF;;;;"}