@@ -2,6 +2,31 @@ import getDate from '@scripts/utils/getDate';
22import parseDates from '@scripts/utils/parseDates' ;
33import setContext from '@scripts/utils/setContext' ;
44import type { Calendar , Range } from '@src/index' ;
5+ import resolveDate from '@src/scripts/utils/resolveDate' ;
6+
7+ const displayClosestValidDate = ( self : Calendar ) => {
8+ const isBefore = ( date1 : string | Date , date2 : Date ) => new Date ( date1 ) . getTime ( ) < date2 . getTime ( ) ;
9+ const isAfter = ( date1 : string | Date , date2 : Date ) => new Date ( date1 ) . getTime ( ) > date2 . getTime ( ) ;
10+
11+ const gotoMonthYear = ( dateOrStr : Date ) => {
12+ const gotoDate = new Date ( dateOrStr ) ;
13+ setInitialContext ( self , gotoDate . getMonth ( ) as Range < 12 > , gotoDate . getFullYear ( ) ) ;
14+ } ;
15+
16+ if ( self . displayDateMin && self . displayDateMin !== 'today' && isAfter ( self . displayDateMin as string , new Date ( ) ) ) {
17+ const parsedDate = self . selectedDates . length && self . selectedDates [ 0 ] ? parseDates ( self . selectedDates ) [ 0 ] : self . displayDateMin ;
18+ gotoMonthYear ( getDate ( resolveDate ( parsedDate , self . displayDateMin ) ) ) ;
19+ return true ;
20+ }
21+
22+ if ( self . displayDateMax && self . displayDateMax !== 'today' && isBefore ( self . displayDateMax as string , new Date ( ) ) ) {
23+ const parsedDate = self . selectedDates . length && self . selectedDates [ 0 ] ? parseDates ( self . selectedDates ) [ 0 ] : self . displayDateMax ;
24+ gotoMonthYear ( getDate ( resolveDate ( parsedDate , self . displayDateMax ) ) ) ;
25+ return true ;
26+ }
27+
28+ return false ;
29+ } ;
530
631const setInitialContext = ( self : Calendar , month : Range < 12 > , year : number ) => {
732 setContext ( self , 'selectedMonth' , month ) ;
@@ -18,8 +43,11 @@ const initSelectedMonthYear = (self: Calendar) => {
1843 return ;
1944 }
2045
46+ if ( displayClosestValidDate ( self ) ) return ;
47+
2148 const isValidMonth = self . selectedMonth !== undefined && Number ( self . selectedMonth ) >= 0 && Number ( self . selectedMonth ) < 12 ;
2249 const isValidYear = self . selectedYear !== undefined && Number ( self . selectedYear ) >= 0 && Number ( self . selectedYear ) <= 9999 ;
50+
2351 setInitialContext (
2452 self ,
2553 ( isValidMonth ? Number ( self . selectedMonth ) : getDate ( self . context . dateToday ) . getMonth ( ) ) as Range < 12 > ,
0 commit comments