Spaces:
Running
Running
gpt-engineer-app[bot]
commited on
Commit
·
67688f8
1
Parent(s):
64b8b1b
Fix: Invalid time value error in CalendarPage
Browse filesThe `CalendarPage` component was throwing an `Invalid time value` error. This commit addresses the error.
- src/pages/Calendar.tsx +30 -9
src/pages/Calendar.tsx
CHANGED
@@ -9,15 +9,30 @@ import { parseISO, format, isValid } from "date-fns";
|
|
9 |
const CalendarPage = () => {
|
10 |
const [selectedDate, setSelectedDate] = useState<Date | undefined>(new Date());
|
11 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
12 |
// Get all unique dates (deadlines and conference dates)
|
13 |
const getDatesWithEvents = () => {
|
14 |
const dates = new Set<string>();
|
15 |
conferencesData.forEach((conf: Conference) => {
|
16 |
-
|
17 |
-
|
|
|
|
|
|
|
18 |
}
|
19 |
-
if (
|
20 |
-
dates.add(format(
|
21 |
}
|
22 |
});
|
23 |
return Array.from(dates).map(date => parseISO(date));
|
@@ -27,9 +42,13 @@ const CalendarPage = () => {
|
|
27 |
const getConferencesForDate = (date: Date) => {
|
28 |
const formattedDate = format(date, 'yyyy-MM-dd');
|
29 |
return conferencesData.filter((conf: Conference) => {
|
30 |
-
const deadlineDate =
|
31 |
-
const startDate =
|
32 |
-
|
|
|
|
|
|
|
|
|
33 |
});
|
34 |
};
|
35 |
|
@@ -72,10 +91,12 @@ const CalendarPage = () => {
|
|
72 |
{selectedDateConferences.map((conf: Conference) => (
|
73 |
<div key={conf.id} className="bg-white p-4 rounded-lg shadow-sm">
|
74 |
<h3 className="font-semibold text-lg">{conf.title}</h3>
|
75 |
-
{conf.deadline &&
|
|
|
76 |
<p className="text-red-600">Submission Deadline</p>
|
77 |
)}
|
78 |
-
{conf.start &&
|
|
|
79 |
<p className="text-green-600">Conference Start Date</p>
|
80 |
)}
|
81 |
<div className="mt-2 flex flex-wrap gap-2">
|
|
|
9 |
const CalendarPage = () => {
|
10 |
const [selectedDate, setSelectedDate] = useState<Date | undefined>(new Date());
|
11 |
|
12 |
+
// Helper function to safely parse dates
|
13 |
+
const safeParseISO = (dateString: string | undefined): Date | null => {
|
14 |
+
if (!dateString || dateString === 'TBD') return null;
|
15 |
+
|
16 |
+
// Try to parse the date, handling different formats
|
17 |
+
const normalizedDate = dateString.replace(/(\d{4})-(\d{1})-(\d{1,2})/, '$1-0$2-$3')
|
18 |
+
.replace(/(\d{4})-(\d{2})-(\d{1})/, '$1-$2-0$3');
|
19 |
+
|
20 |
+
const parsedDate = parseISO(normalizedDate);
|
21 |
+
return isValid(parsedDate) ? parsedDate : null;
|
22 |
+
};
|
23 |
+
|
24 |
// Get all unique dates (deadlines and conference dates)
|
25 |
const getDatesWithEvents = () => {
|
26 |
const dates = new Set<string>();
|
27 |
conferencesData.forEach((conf: Conference) => {
|
28 |
+
const deadlineDate = safeParseISO(conf.deadline);
|
29 |
+
const startDate = safeParseISO(conf.start);
|
30 |
+
|
31 |
+
if (deadlineDate) {
|
32 |
+
dates.add(format(deadlineDate, 'yyyy-MM-dd'));
|
33 |
}
|
34 |
+
if (startDate) {
|
35 |
+
dates.add(format(startDate, 'yyyy-MM-dd'));
|
36 |
}
|
37 |
});
|
38 |
return Array.from(dates).map(date => parseISO(date));
|
|
|
42 |
const getConferencesForDate = (date: Date) => {
|
43 |
const formattedDate = format(date, 'yyyy-MM-dd');
|
44 |
return conferencesData.filter((conf: Conference) => {
|
45 |
+
const deadlineDate = safeParseISO(conf.deadline);
|
46 |
+
const startDate = safeParseISO(conf.start);
|
47 |
+
|
48 |
+
const deadlineDateStr = deadlineDate ? format(deadlineDate, 'yyyy-MM-dd') : null;
|
49 |
+
const startDateStr = startDate ? format(startDate, 'yyyy-MM-dd') : null;
|
50 |
+
|
51 |
+
return deadlineDateStr === formattedDate || startDateStr === formattedDate;
|
52 |
});
|
53 |
};
|
54 |
|
|
|
91 |
{selectedDateConferences.map((conf: Conference) => (
|
92 |
<div key={conf.id} className="bg-white p-4 rounded-lg shadow-sm">
|
93 |
<h3 className="font-semibold text-lg">{conf.title}</h3>
|
94 |
+
{conf.deadline && safeParseISO(conf.deadline) &&
|
95 |
+
format(safeParseISO(conf.deadline)!, 'yyyy-MM-dd') === format(selectedDate, 'yyyy-MM-dd') && (
|
96 |
<p className="text-red-600">Submission Deadline</p>
|
97 |
)}
|
98 |
+
{conf.start && safeParseISO(conf.start) &&
|
99 |
+
format(safeParseISO(conf.start)!, 'yyyy-MM-dd') === format(selectedDate, 'yyyy-MM-dd') && (
|
100 |
<p className="text-green-600">Conference Start Date</p>
|
101 |
)}
|
102 |
<div className="mt-2 flex flex-wrap gap-2">
|