@@ -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
2222interface 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