{"version":3,"file":"use-panel-date-range.mjs","sources":["../../../../../../../../packages/components/date-picker-panel/src/composables/use-panel-date-range.ts"],"sourcesContent":["import { computed, inject, nextTick, ref } from 'vue'\nimport { useLocale } from '@hd-front-end/hooks'\nimport { PICKER_BASE_INJECTION_KEY } from '@hd-front-end/components/time-picker'\nimport { getValidDateOfMonth, getValidDateOfYear } from '../utils'\n\nimport type { PanelDateRangeProps } from '../props/panel-date-range'\nimport type { Dayjs } from 'dayjs'\nimport type { ComputedRef, Ref } from 'vue'\n\ntype CurrentView = 'date' | 'year' | 'month'\ntype CurrentViewRef = { focus: () => void }\n\nexport type Emits = (\n  event: 'pick' | 'set-picker-option' | 'calendar-change' | 'panel-change',\n  ...args: any[]\n) => void\n\nexport const usePanelDateRange = (\n  props: PanelDateRangeProps,\n  emit: Emits,\n  leftDate: Ref<Dayjs>,\n  rightDate: Ref<Dayjs>\n) => {\n  const leftCurrentView = ref<CurrentView>('date')\n  const leftCurrentViewRef = ref<CurrentViewRef>()\n  const rightCurrentView = ref<CurrentView>('date')\n  const rightCurrentViewRef = ref<CurrentViewRef>()\n  const pickerBase = inject(PICKER_BASE_INJECTION_KEY) as any\n  const { disabledDate } = pickerBase.props\n  const { t, lang } = useLocale()\n\n  const leftYear = computed(() => {\n    return leftDate.value.year()\n  })\n  const leftMonth = computed(() => {\n    return leftDate.value.month()\n  })\n\n  const rightYear = computed(() => {\n    return rightDate.value.year()\n  })\n  const rightMonth = computed(() => {\n    return rightDate.value.month()\n  })\n\n  function computedYearLabel(\n    currentView: Ref<CurrentView>,\n    yearValue: ComputedRef<number>\n  ) {\n    const yearTranslation = t('el.datepicker.year')\n    if (currentView.value === 'year') {\n      const startYear = Math.floor(yearValue.value! / 10) * 10\n      return yearTranslation\n        ? `${startYear} ${yearTranslation} - ${\n            startYear + 9\n          } ${yearTranslation}`\n        : `${startYear} - ${startYear + 9}`\n    }\n    return `${yearValue.value} ${yearTranslation}`\n  }\n\n  function focusPicker(currentViewRef?: CurrentViewRef) {\n    currentViewRef?.focus()\n  }\n\n  async function showPicker(\n    pickerType: 'left' | 'right',\n    view: 'month' | 'year'\n  ) {\n    if (props.disabled) return\n    const currentView =\n      pickerType === 'left' ? leftCurrentView : rightCurrentView\n    const currentViewRef =\n      pickerType === 'left' ? leftCurrentViewRef : rightCurrentViewRef\n    currentView.value = view\n    await nextTick()\n    focusPicker(currentViewRef.value)\n  }\n\n  async function handlePick(\n    mode: 'month' | 'year',\n    pickerType: 'left' | 'right',\n    value: number\n  ) {\n    if (props.disabled) return\n    const isLeftPicker = pickerType === 'left'\n    const startDate = isLeftPicker ? leftDate : rightDate\n    const endDate = isLeftPicker ? rightDate : leftDate\n    const currentView = isLeftPicker ? leftCurrentView : rightCurrentView\n    const currentViewRef = isLeftPicker\n      ? leftCurrentViewRef\n      : rightCurrentViewRef\n\n    if (mode === 'year') {\n      const data = startDate.value.year(value)\n      startDate.value = getValidDateOfYear(data, lang.value, disabledDate)\n    }\n\n    if (mode === 'month') {\n      startDate.value = getValidDateOfMonth(\n        startDate.value,\n        startDate.value.year(),\n        value,\n        lang.value,\n        disabledDate\n      )\n    }\n\n    if (!props.unlinkPanels) {\n      endDate.value =\n        pickerType === 'left'\n          ? startDate.value.add(1, 'month')\n          : startDate.value.subtract(1, 'month')\n    }\n\n    currentView.value = mode === 'year' ? 'month' : 'date'\n    await nextTick()\n    focusPicker(currentViewRef.value)\n    handlePanelChange(mode)\n  }\n\n  function handlePanelChange(mode: 'month' | 'year') {\n    emit(\n      'panel-change',\n      [leftDate.value.toDate(), rightDate.value.toDate()],\n      mode\n    )\n  }\n\n  function adjustDateByView(\n    currentView: CurrentView,\n    date: Dayjs,\n    forward: boolean\n  ) {\n    const action = forward ? 'add' : 'subtract'\n    return currentView === 'year'\n      ? date[action](10, 'year')\n      : date[action](1, 'year')\n  }\n\n  return {\n    leftCurrentView,\n    rightCurrentView,\n    leftCurrentViewRef,\n    rightCurrentViewRef,\n    leftYear,\n    rightYear,\n    leftMonth,\n    rightMonth,\n    leftYearLabel: computed(() => computedYearLabel(leftCurrentView, leftYear)),\n    rightYearLabel: computed(() =>\n      computedYearLabel(rightCurrentView, rightYear)\n    ),\n    showLeftPicker: (view: 'month' | 'year') => showPicker('left', view),\n    showRightPicker: (view: 'month' | 'year') => showPicker('right', view),\n    handleLeftYearPick: (year: number) => handlePick('year', 'left', year),\n    handleRightYearPick: (year: number) => handlePick('year', 'right', year),\n    handleLeftMonthPick: (month: number) => handlePick('month', 'left', month),\n    handleRightMonthPick: (month: number) =>\n      handlePick('month', 'right', month),\n    handlePanelChange,\n    adjustDateByView,\n  }\n}\n"],"names":[],"mappings":"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"}