UNPKG

element-plus

Version:

A Component Library for Vue 3

1 lines 6.08 kB
{"version":3,"file":"use-range-picker.mjs","names":[],"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"],"mappings":";;;;;;;;;;;AAwBA,MAAa,kBACX,OACA,EACE,cACA,aACA,UACA,WACA,MACA,MAEA,gBAEC;CACH,MAAM,EAAE,SAAS,oBAAoB;CAErC,MAAM,EAAE,aAAa,OAAO,0BAA0B;CACtD,MAAM,QAAQ,aAAa,oBAAoB;CAC/C,MAAM,EAAE,GAAG,SAAS,WAAW;CAC/B,MAAM,sBAAsB,YAAY,KAAK;CAC7C,MAAM,UAAU,KAAY;CAC5B,MAAM,UAAU,KAAY;CAC5B,MAAM,aAAa,IAAgB;EACjC,SAAS;EACT,WAAW;EACZ,CAAC;CAEF,MAAM,qBAAqB,QAAoB;AAC7C,aAAW,QAAQ;;CAGrB,MAAM,sBAAsB,UAAU,UAAU;EAC9C,MAAM,WAAW,MAAM,QAAQ;EAC/B,MAAM,WAAW,MAAM,QAAQ;AAE/B,MAAI,aAAa,CAAC,UAAU,SAAS,CAAC,CACpC,MAAK,QAAQ,CAAC,UAAU,SAAS,EAAE,QAAQ;;CAI/C,MAAM,YAAY,cAAuB;AACvC,aAAW,MAAM,YAAY;AAC7B,MAAI,CAAC,UACH,YAAW,MAAM,UAAU;;CAI/B,MAAM,cAAc,gBAAsD;AACxE,MAAI,QAAQ,YAAY,IAAI,YAAY,WAAW,GAAG;GACpD,MAAM,CAAC,OAAO,OAAO;AACrB,WAAQ,QAAQ;AAChB,YAAS,QAAQ;AACjB,WAAQ,QAAQ;AAChB,aAAU,MAAM,QAAQ,EAAE,MAAM,QAAQ,CAAC;QAEzC,iBAAgB;;CAIpB,MAAM,uBAAuB;EAC3B,IAAI,CAAC,OAAO,OAAO,gBAAgB,MAAM,aAAa,EAAE;GACtD,MAAM,MAAM,KAAK;GACjB;GACA;GACA,cAAc,MAAM;GACrB,CAAC;EACF,MAAM,YAAY,QAAe;AAC/B,UAAO,IAAI,KAAK,IAAI,QAAQ,IAAI,EAAE,KAAK;;EAEzC,MAAM,aAAa,MAAM,YAAY;AACrC,MAAI,YAAY;GACd,IAAI,YAAY;GAChB,IAAI,aAAa;AACjB,OAAI,QAAQ,WAAW,EAAE;IACvB,MAAM,CAAC,WAAW,WAAW,WAAW,IAAI,MAAM;AAClD,gBAAY,SAAS,UAAU;AAC/B,iBAAa,SAAS,QAAQ;UACzB;IACL,MAAM,QAAQ,SAAS,MAAM,WAAW,CAAC;AACzC,gBAAY;AACZ,iBAAa;;AAEf,WAAQ,MAAM,QAAQ,IAAI,CAAC,IAAI,WAAW,KAAK;AAC/C,SAAM,IAAI,QAAQ,IAAI,CAAC,IAAI,YAAY,KAAK;;AAG9C,UAAQ,QAAQ;AAChB,UAAQ,QAAQ;AAChB,WAAS,QAAQ;AACjB,YAAU,QAAQ;;AAGpB,OACE,eACC,QAAQ;AACP,MAAI,IACF,iBAAgB;IAGpB,EAAE,WAAW,MAAM,CACpB;AAED,aACQ,MAAM,cACX,gBAAgB;AACf,MACE,CAAE,aAAgC,UAClC,CAAC,QAAQ,aAAa,CAAC,QAAQ,OAAO,QAAQ,MAAM,CAAC,CAErD,YAAW,YAAY;IAG3B,EACE,WAAW,MACZ,CACF;AAED,aACQ,MAAM,eACN;AACJ,MAAI,MAAM,QACR,YAAW,MAAM,YAAY;IAGjC,EAAE,WAAW,MAAM,CACpB;AAED,QAAO;EACL;EACA;EACA;EACA;EACA,MAAM;EACN;EAEA;EACA;EACA;EACA;EACA;EACA;EACD"}