{"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,UAAU;CAC3B,MAAM,gBAAgB,IAAI,KAAK;CAC/B,MAAM,sBAAsB,IAAI,KAAK;CACrC,MAAM,YAAY,IAAe,IAAI;CAErC,MAAM,eAAe,eAAe;EAClC,MAAM,EAAE,eAAe;EACvB,OACE,CAAC,cAAe,QAAQ,UAAU,KAAK,CAAC,WAAW,OAAO,OAAO,CAAC,CAAC;CAEvE,CAAC;CAED,MAAM,aAAa,UAA+C;EAChE,IAAI,CAAC,YAAY,MAAM,YAAY,KAAK,GAAG;GACzC,IAAI;GACJ,IAAI,QAAQ,KAAK,GACf,YAAY,MAAM,KAAK,SACrB,UAAU,MAAM,MAAM,aAAa,KAAK,KAAK,CAC/C;QACK,IAAI,OACT,YAAY,UAAU,OAAO,MAAM,aAAa,KAAK,KAAK;GAG5D,KAAK,oBADW,QAAQ,YAAY,OACF,KAAK,KAAK;EAC9C;CACF;CAEA,MAAM,cAAc,eAAe;EACjC,IAAI;EACJ,IAAI,aAAa,OACX;OAAA,cAAc,MAAM,iBACtB,YAAY,cAAc,MAAM,gBAAgB;EAAA,OAGlD,IAAI,QAAQ,MAAM,UAAU,GAC1B,YAAY,MAAM,WAAW,KAAK,MAChC,UAAU,GAAG,MAAM,aAAa,KAAK,KAAK,CAC5C;OAEA,YAAY,UACV,MAAM,cAAc,IACpB,MAAM,aACN,KAAK,KACP;EAIJ,IAAI,cAAc,MAAM,uBAAuB;GAC7C,MAAM,kBAAkB,cAAc,MAAM,sBAC1C,SACF;GACA,IAAI,CAAC,QAAQ,iBAAiB,SAAU,GAAG;IACzC,YAAY;IAGZ,IAAI,CAAC,aAAa,OAChB,UAAU,gBAAgB,SAAS,CAAC;GAExC;EACF;EACA,IAAI,QAAQ,SAAU,KAAK,UAAU,MAAM,QAAQ,CAAC,GAAG,GACrD,YAAY,CAAC;EAEf,OAAO;CACT,CAAC;CAED,MAAM,gBAAgB,IAA4B,CAAC,CAAC;CAEpD,MAAM,qBACJ,MACG;EACH,cAAc,MAAM,EAAE,MAAM,EAAE;EAC9B,cAAc,MAAM,aAAa;CACnC;CAEA,MAAM,oBAAoB,MAA2B;EACnD,KAAK,mBAAmB,CAAC;CAC3B;CAEA,MAAM,iBACJ,OACA,MACA,SACG;EACH,KAAK,gBAAgB,OAAO,MAAM,IAAI;CACxC;CAEA,MAAM,UAAU,OAAY,IAAI,UAAU,UAAU;EAClD,cAAc,QAAQ;EACtB,IAAI;EACJ,IAAI,QAAQ,IAAI,GACd,SAAS,KAAK,KAAK,MAAM,EAAE,OAAO,CAAC;OAGnC,SAAS,OAAO,KAAK,OAAO,IAAI;EAElC,UAAU,QAAQ;EAClB,UAAU,MAAM;CAClB;CAEA,OAAO;EACL;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;CACF;AACF"}