UNPKG

element-plus

Version:

A Component Library for Vue 3

1 lines 7.87 kB
{"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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"}