Skip to content
This repository was archived by the owner on Apr 17, 2022. It is now read-only.

Commit ace4f96

Browse files
committed
fix: Start time can be higher than the end in range mode (fixes #102)
1 parent d83550b commit ace4f96

File tree

2 files changed

+25
-6
lines changed

2 files changed

+25
-6
lines changed

src/Vue3DatePicker/components/DatepickerMenu.vue

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -106,6 +106,8 @@
106106
seconds,
107107
customProps,
108108
enableSeconds,
109+
fixedStart,
110+
fixedEnd,
109111
}"
110112
@mount="childMount('timePicker')"
111113
@update:hours="updateTime($event)"

src/Vue3DatePicker/components/composition/calendar.ts

Lines changed: 23 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,8 @@ import {
1111
getMonth,
1212
getSeconds,
1313
getYear,
14+
isAfter,
15+
isBefore,
1416
set,
1517
subMonths,
1618
} from 'date-fns';
@@ -590,13 +592,28 @@ export const useCalendar = (props: UseCalendar, emit: VueEmit, updateFlow: () =>
590592
* Called on event when time value is changed
591593
*/
592594
const updateTime = (value: number | number[], isHours = true, isSeconds = false) => {
593-
if (isHours) {
594-
hours.value = value;
595-
} else if (!isHours && !isSeconds) {
596-
minutes.value = value;
597-
} else if (isSeconds) {
598-
seconds.value = value;
595+
const hoursCp = isHours ? value : hours.value;
596+
const minutesCp = !isHours && !isSeconds ? value : minutes.value;
597+
const secondsCp = isSeconds ? value : seconds.value;
598+
if (
599+
props.range &&
600+
isRange(modelValue.value) &&
601+
isNumberArray(hoursCp) &&
602+
isNumberArray(minutesCp) &&
603+
isNumberArray(secondsCp)
604+
) {
605+
const setTime = (index: number) =>
606+
setDateTime((modelValue.value as Date[])[index], hoursCp[index], minutesCp[index], secondsCp[index]);
607+
if (
608+
isDateEqual(modelValue.value[0], modelValue.value[1]) &&
609+
(isAfter(setTime(0), modelValue.value[1]) || isBefore(setTime(1), modelValue.value[0]))
610+
) {
611+
return;
612+
}
599613
}
614+
hours.value = hoursCp;
615+
minutes.value = minutesCp;
616+
seconds.value = secondsCp;
600617
if (modelValue.value) {
601618
if (props.multiDates) {
602619
const lastEntry = multiDatesLast();

0 commit comments

Comments
 (0)