UNPKG

element-plus

Version:

A Component Library for Vue 3

1 lines 9.08 kB
{"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 '@element-plus/hooks'\nimport { PICKER_BASE_INJECTION_KEY } from '@element-plus/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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"}