Skip to content

Commit b0559e0

Browse files
Improve date handling in absence forms
Refactored date selection logic in DeclareAbsenceForm and EditAbsenceForm to handle null and invalid dates more robustly. Updated DateOfAbsence component to accept null date values and handle input state accordingly, ensuring better consistency and preventing errors when no date is selected.
1 parent 7dfa7c8 commit b0559e0

File tree

3 files changed

+23
-10
lines changed

3 files changed

+23
-10
lines changed

src/components/absences/modals/DateOfAbsence.tsx

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ import { useCallback, useEffect, useState } from 'react';
1313
import MiniCalendar from '../../calendar/MiniCalendar';
1414

1515
interface DateOfAbsenceProps {
16-
dateValue: Date;
16+
dateValue: Date | null;
1717
onDateSelect: (date: Date | null) => void;
1818
error?: string;
1919
label?: string;
@@ -33,9 +33,7 @@ export const DateOfAbsence: React.FC<DateOfAbsenceProps> = ({
3333
const [isOpen, setIsOpen] = useState(false);
3434

3535
useEffect(() => {
36-
if (dateValue) {
37-
setInputValue(dateValue.toLocaleDateString('en-CA'));
38-
}
36+
setInputValue(dateValue ? dateValue.toLocaleDateString('en-CA') : '');
3937
}, [dateValue]);
4038

4139
const handleInputChange = useCallback(
@@ -94,7 +92,7 @@ export const DateOfAbsence: React.FC<DateOfAbsenceProps> = ({
9492
</PopoverTrigger>
9593
<PopoverContent width="300px" p={2} boxShadow="lg">
9694
<MiniCalendar
97-
initialDate={dateValue}
95+
initialDate={dateValue ?? undefined}
9896
onDateSelect={handleDateSelect}
9997
selectDate={dateValue}
10098
/>

src/components/absences/modals/declare/DeclareAbsenceForm.tsx

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -296,14 +296,21 @@ const DeclareAbsenceForm: React.FC<DeclareAbsenceFormProps> = ({
296296
}
297297
};
298298

299-
const handleDateSelect = (date: Date) => {
299+
const handleDateSelect = (date: Date | null) => {
300300
setFormData((prev) => ({
301301
...prev,
302302
lessonDate: date ? date.toISOString().split('T')[0] : '',
303303
}));
304304
};
305305

306-
const selectedDate = new Date(formData.lessonDate + 'T00:00:00');
306+
const parsedLessonDate = formData.lessonDate
307+
? new Date(`${formData.lessonDate}T00:00:00`)
308+
: null;
309+
const dateValue =
310+
parsedLessonDate && !isNaN(parsedLessonDate.getTime())
311+
? parsedLessonDate
312+
: null;
313+
const selectedDate = dateValue ?? new Date();
307314
const now = new Date();
308315
const isWithin14Days =
309316
(selectedDate.getTime() - now.getTime()) / (1000 * 60 * 60 * 24) <= 14;
@@ -387,7 +394,7 @@ const DeclareAbsenceForm: React.FC<DeclareAbsenceFormProps> = ({
387394
/>
388395
</FormControl>
389396
<DateOfAbsence
390-
dateValue={initialDate}
397+
dateValue={dateValue}
391398
onDateSelect={handleDateSelect}
392399
error={errors.lessonDate}
393400
/>

src/components/absences/modals/edit/EditAbsenceForm.tsx

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -226,13 +226,21 @@ const EditAbsenceForm: React.FC<EditAbsenceFormProps> = ({
226226
}
227227
};
228228

229-
const handleDateSelect = (date: Date) => {
229+
const handleDateSelect = (date: Date | null) => {
230230
setFormData((prev) => ({
231231
...prev,
232232
lessonDate: date ? date.toISOString().split('T')[0] : '',
233233
}));
234234
};
235235

236+
const parsedLessonDate = formData.lessonDate
237+
? new Date(`${formData.lessonDate}T00:00:00`)
238+
: null;
239+
const dateValue =
240+
parsedLessonDate && !isNaN(parsedLessonDate.getTime())
241+
? parsedLessonDate
242+
: null;
243+
236244
const handleCloseNotify = () => {
237245
closeNotify();
238246
onClose?.();
@@ -353,7 +361,7 @@ const EditAbsenceForm: React.FC<EditAbsenceFormProps> = ({
353361
</FormControl>
354362

355363
<DateOfAbsence
356-
dateValue={initialData.start}
364+
dateValue={dateValue}
357365
onDateSelect={handleDateSelect}
358366
error={errors.lessonDate}
359367
/>

0 commit comments

Comments
 (0)