{"version":3,"file":"use-common-picker.mjs","names":[],"sources":["../../../../../../../packages/components/time-picker/src/composables/use-common-picker.ts"],"sourcesContent":["import { computed, ref } from 'vue'\nimport { isEqual } from 'lodash-unified'\nimport { useLocale } from '@element-plus/hooks/use-locale'\nimport { isArray } from '@element-plus/utils'\nimport { UPDATE_MODEL_EVENT } from '@element-plus/constants'\nimport { dayOrDaysToDate, formatter, parseDate, valueEquals } from '../utils'\n\nimport type { Dayjs } from 'dayjs'\nimport type {\n  DateModelType,\n  DayOrDays,\n  ModelValueType,\n  PickerOptions,\n  SingleOrRange,\n  UserInput,\n} from '../common/props'\n\ninterface CommonPickerProps {\n  modelValue: ModelValueType | null\n  valueFormat?: string\n}\ntype CommonPickerEmits = (\n  event: 'update:modelValue' | 'calendar-change' | 'panel-change',\n  ...args: any[]\n) => void\n\nexport const useCommonPicker = <\n  P extends CommonPickerProps,\n  E extends CommonPickerEmits,\n>(\n  props: P,\n  emit: E\n) => {\n  const { lang } = useLocale()\n  const pickerVisible = ref(false)\n  const pickerActualVisible = ref(false)\n  const userInput = ref<UserInput>(null)\n\n  const valueIsEmpty = computed(() => {\n    const { modelValue } = props\n    return (\n      !modelValue || (isArray(modelValue) && !modelValue.filter(Boolean).length)\n    )\n  })\n\n  const emitInput = (input: SingleOrRange<DateModelType> | null) => {\n    if (!valueEquals(props.modelValue, input)) {\n      let formatted\n      if (isArray(input)) {\n        formatted = input.map((item) =>\n          formatter(item, props.valueFormat, lang.value)\n        )\n      } else if (input) {\n        formatted = formatter(input, props.valueFormat, lang.value)\n      }\n      const emitVal = input ? formatted : input\n      emit(UPDATE_MODEL_EVENT, emitVal, lang.value)\n    }\n  }\n\n  const parsedValue = computed(() => {\n    let dayOrDays: DayOrDays\n    if (valueIsEmpty.value) {\n      if (pickerOptions.value.getDefaultValue) {\n        dayOrDays = pickerOptions.value.getDefaultValue()\n      }\n    } else {\n      if (isArray(props.modelValue)) {\n        dayOrDays = props.modelValue.map((d) =>\n          parseDate(d, props.valueFormat, lang.value)\n        ) as [Dayjs, Dayjs]\n      } else {\n        dayOrDays = parseDate(\n          props.modelValue ?? '',\n          props.valueFormat,\n          lang.value\n        )!\n      }\n    }\n\n    if (pickerOptions.value.getRangeAvailableTime) {\n      const availableResult = pickerOptions.value.getRangeAvailableTime(\n        dayOrDays!\n      )\n      if (!isEqual(availableResult, dayOrDays!)) {\n        dayOrDays = availableResult\n\n        // The result is corrected only when model-value exists\n        if (!valueIsEmpty.value) {\n          emitInput(dayOrDaysToDate(dayOrDays))\n        }\n      }\n    }\n    if (isArray(dayOrDays!) && dayOrDays.some((day) => !day)) {\n      dayOrDays = [] as unknown as DayOrDays\n    }\n    return dayOrDays!\n  })\n\n  const pickerOptions = ref<Partial<PickerOptions>>({})\n\n  const onSetPickerOption = <T extends keyof PickerOptions>(\n    e: [T, PickerOptions[T]]\n  ) => {\n    pickerOptions.value[e[0]] = e[1]\n    pickerOptions.value.panelReady = true\n  }\n\n  const onCalendarChange = (e: [Date, null | Date]) => {\n    emit('calendar-change', e)\n  }\n\n  const onPanelChange = (\n    value: [Dayjs, Dayjs],\n    mode: 'month' | 'year',\n    view: unknown\n  ) => {\n    emit('panel-change', value, mode, view)\n  }\n\n  const onPick = (date: any = '', visible = false) => {\n    pickerVisible.value = visible\n    let result\n    if (isArray(date)) {\n      result = date.map((_) => _.toDate())\n    } else {\n      // clear btn emit null\n      result = date ? date.toDate() : date\n    }\n    userInput.value = null\n    emitInput(result)\n  }\n\n  return {\n    parsedValue,\n    pickerActualVisible,\n    pickerOptions,\n    pickerVisible,\n    userInput,\n    valueIsEmpty,\n    emitInput,\n    onCalendarChange,\n    onPanelChange,\n    onPick,\n    onSetPickerOption,\n  }\n}\n\nexport type CommonPickerContext = ReturnType<typeof useCommonPicker>\n"],"mappings":";;;;;;;;AA0BA,MAAa,mBAIX,OACA,SACG;CACH,MAAM,EAAE,SAAS,WAAW;CAC5B,MAAM,gBAAgB,IAAI,MAAM;CAChC,MAAM,sBAAsB,IAAI,MAAM;CACtC,MAAM,YAAY,IAAe,KAAK;CAEtC,MAAM,eAAe,eAAe;EAClC,MAAM,EAAE,eAAe;AACvB,SACE,CAAC,cAAe,QAAQ,WAAW,IAAI,CAAC,WAAW,OAAO,QAAQ,CAAC;GAErE;CAEF,MAAM,aAAa,UAA+C;AAChE,MAAI,CAAC,YAAY,MAAM,YAAY,MAAM,EAAE;GACzC,IAAI;AACJ,OAAI,QAAQ,MAAM,CAChB,aAAY,MAAM,KAAK,SACrB,UAAU,MAAM,MAAM,aAAa,KAAK,MAAM,CAC/C;YACQ,MACT,aAAY,UAAU,OAAO,MAAM,aAAa,KAAK,MAAM;AAG7D,QAAK,oBADW,QAAQ,YAAY,OACF,KAAK,MAAM;;;CAIjD,MAAM,cAAc,eAAe;EACjC,IAAI;AACJ,MAAI,aAAa,OACf;OAAI,cAAc,MAAM,gBACtB,aAAY,cAAc,MAAM,iBAAiB;aAG/C,QAAQ,MAAM,WAAW,CAC3B,aAAY,MAAM,WAAW,KAAK,MAChC,UAAU,GAAG,MAAM,aAAa,KAAK,MAAM,CAC5C;MAED,aAAY,UACV,MAAM,cAAc,IACpB,MAAM,aACN,KAAK,MACN;AAIL,MAAI,cAAc,MAAM,uBAAuB;GAC7C,MAAM,kBAAkB,cAAc,MAAM,sBAC1C,UACD;AACD,OAAI,CAAC,QAAQ,iBAAiB,UAAW,EAAE;AACzC,gBAAY;AAGZ,QAAI,CAAC,aAAa,MAChB,WAAU,gBAAgB,UAAU,CAAC;;;AAI3C,MAAI,QAAQ,UAAW,IAAI,UAAU,MAAM,QAAQ,CAAC,IAAI,CACtD,aAAY,EAAE;AAEhB,SAAO;GACP;CAEF,MAAM,gBAAgB,IAA4B,EAAE,CAAC;CAErD,MAAM,qBACJ,MACG;AACH,gBAAc,MAAM,EAAE,MAAM,EAAE;AAC9B,gBAAc,MAAM,aAAa;;CAGnC,MAAM,oBAAoB,MAA2B;AACnD,OAAK,mBAAmB,EAAE;;CAG5B,MAAM,iBACJ,OACA,MACA,SACG;AACH,OAAK,gBAAgB,OAAO,MAAM,KAAK;;CAGzC,MAAM,UAAU,OAAY,IAAI,UAAU,UAAU;AAClD,gBAAc,QAAQ;EACtB,IAAI;AACJ,MAAI,QAAQ,KAAK,CACf,UAAS,KAAK,KAAK,MAAM,EAAE,QAAQ,CAAC;MAGpC,UAAS,OAAO,KAAK,QAAQ,GAAG;AAElC,YAAU,QAAQ;AAClB,YAAU,OAAO;;AAGnB,QAAO;EACL;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACD"}