element-plus
Version:
A Component Library for Vue 3
1 lines • 8.12 kB
Source Map (JSON)
{"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 '@element-plus/utils'\nimport { useLocale, useNamespace } from '@element-plus/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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"}