diff --git a/src/AppRoutes.tsx b/src/AppRoutes.tsx index f39f85d..2b7263c 100644 --- a/src/AppRoutes.tsx +++ b/src/AppRoutes.tsx @@ -30,6 +30,7 @@ import DashboardPage from './pages/user/dashboardPage'; // Timetable Module Pages import { TimetablePage, + TimetableListPage, ClassesPage, LessonPage, TaughtLessonsPage, @@ -162,7 +163,8 @@ const AppRoutes: React.FC = () => { }> }> {/* Timetable Module Routes */} - } /> + } /> + } /> } /> } /> } /> diff --git a/src/pages/timetable/TimetableListPage.tsx b/src/pages/timetable/TimetableListPage.tsx new file mode 100644 index 0000000..f64c4f3 --- /dev/null +++ b/src/pages/timetable/TimetableListPage.tsx @@ -0,0 +1,90 @@ +import React, { useEffect } from 'react'; +import { Link } from 'react-router-dom'; +import { CalendarToday, KeyboardArrowRight } from '@mui/icons-material'; +import useTimetableStore from '../../stores/timetableStore'; +import { format, parseISO } from 'date-fns'; + +const TimetableListPage: React.FC = () => { + const { timetables, timetablesLoading, timetablesError, fetchMyTimetables } = useTimetableStore(); + + useEffect(() => { + fetchMyTimetables(); + }, [fetchMyTimetables]); + + if (timetablesLoading) { + return ( +
+
+
+ ); + } + + if (timetablesError) { + return ( +
+
+

Error Loading Timetables

+

{timetablesError}

+ +
+
+ ); + } + + return ( +
+
+
+

Timetables

+

Your scheduled timetables

+
+
+ + {timetables.length === 0 ? ( +
+ +

No timetables yet

+

+ Timetables are created from a class. Go to{' '} + Classes{' '} + to get started. +

+
+ ) : ( +
+ {timetables.map((timetable) => ( + + +
+

{timetable.name}

+

+ {format(parseISO(timetable.start_date), 'MMM d, yyyy')} + {timetable.end_date + ? ` – ${format(parseISO(timetable.end_date), 'MMM d, yyyy')}` + : ' (ongoing)'} +

+
+ {timetable.recurrence_rule && ( + + Recurring + + )} + + + ))} +
+ )} +
+ ); +}; + +export default TimetableListPage; diff --git a/src/pages/timetable/index.ts b/src/pages/timetable/index.ts index c9bffe3..2f3d78b 100644 --- a/src/pages/timetable/index.ts +++ b/src/pages/timetable/index.ts @@ -3,6 +3,7 @@ */ export { default as TimetablePage } from './TimetablePage'; +export { default as TimetableListPage } from './TimetableListPage'; export { default as ClassesPage } from './ClassesPage'; export { default as LessonPage } from './LessonPage'; export { default as TaughtLessonsPage } from './TaughtLessonsPage';