Skip to content

Commit 4071937

Browse files
committed
fix: unselected date when changing time, reset time when selecting last selectable date (day)
1 parent d0e80d2 commit 4071937

File tree

1 file changed

+37
-21
lines changed

1 file changed

+37
-21
lines changed

src/lib/form/datepicker/index.tsx

Lines changed: 37 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)