{"version":3,"file":"use-range-picker.mjs","sources":["../../../../../../../../packages/components/date-picker-panel/src/composables/use-range-picker.ts"],"sourcesContent":["import { getCurrentInstance, inject, ref, unref, watch } from 'vue'\nimport dayjs from 'dayjs'\nimport { isArray } from '@hd-front-end/utils'\nimport { useLocale, useNamespace } from '@hd-front-end/hooks'\nimport { isEqual } from 'lodash-unified'\nimport { getDefaultValue, isValidRange } from '../utils'\nimport { ROOT_PICKER_INJECTION_KEY } from '../constants'\nimport { useShortcut } from './use-shortcut'\n\nimport type { Ref } from 'vue'\nimport type { Dayjs } from 'dayjs'\nimport type { PanelRangeSharedProps, RangeState } from '../props/shared'\nimport type { DefaultValue } from '../utils'\n\ntype UseRangePickerProps = {\n  sortDates: (minDate: Dayjs | undefined, maxDate: Dayjs | undefined) => void\n  defaultValue: Ref<DefaultValue>\n  defaultTime?: Ref<DefaultValue>\n  leftDate: Ref<Dayjs>\n  rightDate: Ref<Dayjs>\n  step?: number\n  unit: 'month' | 'year'\n}\n\nexport const useRangePicker = (\n  props: PanelRangeSharedProps,\n  {\n    defaultValue,\n    defaultTime,\n    leftDate,\n    rightDate,\n    step,\n    unit,\n\n    sortDates,\n  }: UseRangePickerProps\n) => {\n  const { emit } = getCurrentInstance()!\n\n  const { pickerNs } = inject(ROOT_PICKER_INJECTION_KEY)!\n  const drpNs = useNamespace('date-range-picker')\n  const { t, lang } = useLocale()\n  const handleShortcutClick = useShortcut(lang)\n  const minDate = ref<Dayjs>()\n  const maxDate = ref<Dayjs>()\n  const rangeState = ref<RangeState>({\n    endDate: null,\n    selecting: false,\n  })\n\n  const handleChangeRange = (val: RangeState) => {\n    rangeState.value = val\n  }\n\n  const handleRangeConfirm = (visible = false) => {\n    const _minDate = unref(minDate)\n    const _maxDate = unref(maxDate)\n\n    if (isValidRange([_minDate, _maxDate])) {\n      emit('pick', [_minDate, _maxDate], visible)\n    }\n  }\n\n  const onSelect = (selecting: boolean) => {\n    rangeState.value.selecting = selecting\n    if (!selecting) {\n      rangeState.value.endDate = null\n    }\n  }\n\n  const parseValue = (parsedValue: PanelRangeSharedProps['parsedValue']) => {\n    if (isArray(parsedValue) && parsedValue.length === 2) {\n      const [start, end] = parsedValue\n      minDate.value = start\n      leftDate.value = start\n      maxDate.value = end\n      sortDates(unref(minDate), unref(maxDate))\n    } else {\n      restoreDefault()\n    }\n  }\n\n  const restoreDefault = () => {\n    let [start, end] = getDefaultValue(unref(defaultValue), {\n      lang: unref(lang),\n      step,\n      unit,\n      unlinkPanels: props.unlinkPanels,\n    })\n    const getShift = (day: Dayjs) => {\n      return day.diff(day.startOf('d'), 'ms')\n    }\n    const maybeTimes = unref(defaultTime)\n    if (maybeTimes) {\n      let leftShift = 0\n      let rightShift = 0\n      if (isArray(maybeTimes)) {\n        const [timeStart, timeEnd] = maybeTimes.map(dayjs)\n        leftShift = getShift(timeStart)\n        rightShift = getShift(timeEnd)\n      } else {\n        const shift = getShift(dayjs(maybeTimes))\n        leftShift = shift\n        rightShift = shift\n      }\n      start = start.startOf('d').add(leftShift, 'ms')\n      end = end.startOf('d').add(rightShift, 'ms')\n    }\n\n    minDate.value = undefined\n    maxDate.value = undefined\n    leftDate.value = start\n    rightDate.value = end\n  }\n\n  watch(\n    defaultValue,\n    (val) => {\n      if (val) {\n        restoreDefault()\n      }\n    },\n    { immediate: true }\n  )\n\n  watch(\n    () => props.parsedValue,\n    (parsedValue) => {\n      if (\n        !(parsedValue as [Dayjs, Dayjs])?.length ||\n        !isEqual(parsedValue, [minDate.value, maxDate.value])\n      ) {\n        parseValue(parsedValue)\n      }\n    },\n    {\n      immediate: true,\n    }\n  )\n\n  watch(\n    () => props.visible,\n    () => {\n      if (props.visible) {\n        parseValue(props.parsedValue)\n      }\n    },\n    { immediate: true }\n  )\n\n  return {\n    minDate,\n    maxDate,\n    rangeState,\n    lang,\n    ppNs: pickerNs,\n    drpNs,\n\n    handleChangeRange,\n    handleRangeConfirm,\n    handleShortcutClick,\n    onSelect,\n    parseValue,\n    t,\n  }\n}\n"],"names":[],"mappings":"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"}