11import { addMonths , addYears , getMonth , getYear , set , subMonths , subYears } from 'date-fns' ;
22import { UseMonthYearPick , VueEmit } from '../../interfaces' ;
3+ import { isDateAfter , isDateBefore } from '../../utils/date-utils' ;
34
45export const useMontYearPick = (
56 props : UseMonthYearPick ,
@@ -23,6 +24,23 @@ export const useMontYearPick = (
2324 return yearDate ;
2425 } ;
2526
27+ const getDateForCompare = ( propValue : 'minDate' | 'maxDate' , month : number , year : number ) : [ Date , Date ] => {
28+ return [ new Date ( props [ propValue ] ) , set ( new Date ( ) , { month, year } ) ] ;
29+ } ;
30+
31+ const validateMonthYear = ( month : number , year : number , isNext : boolean ) : void => {
32+ if ( props . preventMinMaxNavigation && ( props . minDate || props . maxDate ) ) {
33+ if ( props . maxDate && isNext && isDateAfter ( ...getDateForCompare ( 'maxDate' , month , year ) ) ) {
34+ updateMonthYear ( month , year ) ;
35+ }
36+ if ( props . minDate && ! isNext && isDateBefore ( ...getDateForCompare ( 'minDate' , month , year ) ) ) {
37+ updateMonthYear ( month , year ) ;
38+ }
39+ } else {
40+ updateMonthYear ( month , year ) ;
41+ }
42+ } ;
43+
2644 const handleMonthYearChange = ( isNext : boolean ) : void => {
2745 const initialDate = set ( new Date ( ) , { month : props . month , year : props . year } ) ;
2846 let date = isNext ? addMonths ( initialDate , 1 ) : subMonths ( initialDate , 1 ) ;
@@ -40,7 +58,7 @@ export const useMontYearPick = (
4058 date = recursiveYearAdjust ( date , isNext ) ;
4159 year = getYear ( date ) ;
4260 }
43- updateMonthYear ( month , year ) ;
61+ validateMonthYear ( month , year , isNext ) ;
4462 } ;
4563
4664 const updateMonthYear = ( month : number , year : number ) : void => {
0 commit comments