@@ -24,10 +24,26 @@ const DatePicker: React.FC<IDatePicker> = ({ onSelect, time }) => {
2424 const [ date , setDate ] = useState ( new Date ( ) ) ;
2525 const [ hours , setHours ] = useState ( date . getHours ( ) ) ;
2626 const [ minutes , setMinutes ] = useState ( date . getMinutes ( ) ) ;
27+ const today = new Date ( ) ;
28+ const lastSelectableDate = new Date ( today ) ;
29+ lastSelectableDate . setDate ( today . getDate ( ) ) ;
30+
31+ const updateDateWithTime = ( selectedDate : Date ) => {
32+ if ( selectedDate . toDateString ( ) === lastSelectableDate . toDateString ( ) ) {
33+ const now = new Date ( ) ;
34+ selectedDate . setHours ( now . getHours ( ) , now . getMinutes ( ) ) ;
35+ setHours ( now . getHours ( ) ) ;
36+ setMinutes ( now . getMinutes ( ) ) ;
37+ } else {
38+ selectedDate . setHours ( hours , minutes ) ;
39+ }
40+ setDate ( selectedDate ) ;
41+ onSelect ( selectedDate ) ;
42+ } ;
43+
2744 const {
2845 firstDayOfWeek,
2946 activeMonths,
30- isDateSelected,
3147 isDateHovered,
3248 isFirstOrLastSelectedDate,
3349 isDateBlocked,
@@ -42,30 +58,21 @@ const DatePicker: React.FC<IDatePicker> = ({ onSelect, time }) => {
4258 startDate : date ,
4359 endDate : date ,
4460 focusedInput : START_DATE ,
45- onDatesChange : ( date ) => {
46- if ( date . startDate ) {
47- date . startDate . setHours ( hours , minutes ) ;
48- setDate ( date . startDate ) ;
49- onSelect ( date . startDate ) ;
61+ onDatesChange : ( data ) => {
62+ if ( data . startDate ) {
63+ updateDateWithTime ( new Date ( data . startDate ) ) ;
5064 }
5165 } ,
5266 numberOfMonths : 1 ,
5367 minBookingDays : 1 ,
5468 exactMinBookingDays : true ,
5569 } ) ;
5670
57- const onDateSelect = ( date : Date ) => {
58- handleDateSelect ( date ) ;
59- date . setHours ( hours , minutes ) ;
60- setDate ( date ) ;
61- onSelect ( date ) ;
62- } ;
63-
64- const onTimeChange = ( hours : number , minutes : number ) => {
71+ const onTimeChange = ( newHours : number , newMinutes : number ) => {
6572 const newDate = new Date ( date ) ;
66- newDate . setHours ( hours , minutes ) ;
67- setHours ( hours ) ;
68- setMinutes ( minutes ) ;
73+ newDate . setHours ( newHours , newMinutes ) ;
74+ setHours ( newHours ) ;
75+ setMinutes ( newMinutes ) ;
6976 setDate ( newDate ) ;
7077 onSelect ( newDate ) ;
7178 } ;
@@ -75,11 +82,20 @@ const DatePicker: React.FC<IDatePicker> = ({ onSelect, time }) => {
7582 value = { {
7683 focusedDate,
7784 isDateFocused,
78- isDateSelected,
85+ isDateSelected : ( selectedDate ) => {
86+ return (
87+ selectedDate . getDate ( ) === date . getDate ( ) &&
88+ selectedDate . getMonth ( ) === date . getMonth ( ) &&
89+ selectedDate . getFullYear ( ) === date . getFullYear ( )
90+ ) ;
91+ } ,
7992 isDateHovered,
8093 isDateBlocked,
8194 isFirstOrLastSelectedDate,
82- onDateSelect,
95+ onDateSelect : ( selectedDate : Date ) => {
96+ handleDateSelect ( selectedDate ) ;
97+ updateDateWithTime ( selectedDate ) ;
98+ } ,
8399 onDateFocus,
84100 onDateHover,
85101 } }
@@ -97,8 +113,8 @@ const DatePicker: React.FC<IDatePicker> = ({ onSelect, time }) => {
97113 date,
98114 hours,
99115 minutes,
100- setHours : ( hours ) => onTimeChange ( hours , minutes ) ,
101- setMinutes : ( minutes ) => onTimeChange ( hours , minutes ) ,
116+ setHours : ( newHours ) => onTimeChange ( newHours , minutes ) ,
117+ setMinutes : ( newMinutes ) => onTimeChange ( hours , newMinutes ) ,
102118 onSelect : ( ) => {
103119 date . setHours ( hours , minutes ) ;
104120 onSelect ( date ) ;
0 commit comments