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';