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

Commit 276cec7

Browse files
committed
fix: Auto rotate marked start date in range selection based on hover date
1 parent f15bb7f commit 276cec7

File tree

1 file changed

+28
-8
lines changed

1 file changed

+28
-8
lines changed

src/Vue3DatePicker/components/composition/calendar.ts

Lines changed: 28 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ import {
1717
setDateMonthOrYear,
1818
setDateTime,
1919
} from '../../utils/date-utils';
20-
import { isModelValueRange, isNumberArray, isRange, isTimeArr } from '../../utils/type-guard';
20+
import { isModelValueRange, isNumberArray, isRange, isRangeArray, isTimeArr } from '../../utils/type-guard';
2121

2222
interface IUseCalendar {
2323
isDisabled: (date: Date) => boolean;
@@ -430,6 +430,15 @@ export const useCalendar = (props: UseCalendar, emit: VueEmit): IUseCalendar =>
430430
hoveredDate.value = null;
431431
};
432432

433+
const checkRangeDirection = (isStart: boolean): boolean => {
434+
if (isRangeArray(modelValue.value, true) && modelValue.value[0] && hoveredDate.value) {
435+
return isStart
436+
? isDateAfter(hoveredDate.value, modelValue.value[0])
437+
: isDateBefore(hoveredDate.value, modelValue.value[0]);
438+
}
439+
return true;
440+
};
441+
433442
/**
434443
* Check when to add a proper active start/end date class on range picker
435444
*/
@@ -438,13 +447,24 @@ export const useCalendar = (props: UseCalendar, emit: VueEmit): IUseCalendar =>
438447
if (props.hideOffsetDates && !day.current) return false;
439448
return isDateEqual(new Date(day.value), modelValue.value[isStart ? 0 : 1]);
440449
} else if (props.range) {
441-
return isDateEqual(
442-
new Date(day.value),
443-
modelValue.value && Array.isArray(modelValue.value)
444-
? isStart
445-
? modelValue.value[0] || null
446-
: modelValue.value[1]
447-
: null,
450+
return (
451+
(isDateEqual(
452+
new Date(day.value),
453+
modelValue.value && Array.isArray(modelValue.value)
454+
? isStart
455+
? modelValue.value[0] || null
456+
: modelValue.value[1]
457+
: null,
458+
) &&
459+
// this part will rotate start/end depending on the hover date
460+
(isStart
461+
? !isDateBefore(
462+
hoveredDate.value || null,
463+
Array.isArray(modelValue.value) ? modelValue.value[0] : null,
464+
)
465+
: true)) ||
466+
(isDateEqual(day.value, Array.isArray(modelValue.value) ? modelValue.value[0] : null) &&
467+
checkRangeDirection(isStart))
448468
);
449469
}
450470
return false;

0 commit comments

Comments
 (0)