import React, { useEffect, useState } from 'react';
import { Link, useNavigate } from 'react-router-dom';
import { Add, CalendarToday, FilterList, MenuBook, People, Search } from '@mui/icons-material';
import useTimetableStore from '../../stores/timetableStore';
import { useUser } from '../../contexts/UserContext';
const ClassesPage: React.FC = () => {
const navigate = useNavigate();
const { profile } = useUser();
const {
classes,
totalCount,
classesLoading,
classesError,
currentPage,
pageSize,
filterSubject,
filterSchoolYear,
filterAcademicTerm,
searchQuery,
fetchClasses,
setFilterSubject,
setFilterSchoolYear,
setFilterAcademicTerm,
setSearchQuery,
setPage,
clearFilters,
} = useTimetableStore();
const [showFilters, setShowFilters] = useState(false);
useEffect(() => {
fetchClasses({
subject: filterSubject || undefined,
school_year: filterSchoolYear || undefined,
academic_term: filterAcademicTerm || undefined,
search: searchQuery || undefined,
skip: currentPage * pageSize,
limit: pageSize,
});
}, [filterSubject, filterSchoolYear, filterAcademicTerm, searchQuery, currentPage, pageSize]);
const handleSearch = (e: React.FormEvent) => {
e.preventDefault();
setPage(0);
fetchClasses({
subject: filterSubject || undefined,
school_year: filterSchoolYear || undefined,
academic_term: filterAcademicTerm || undefined,
search: searchQuery || undefined,
skip: 0,
limit: pageSize,
});
};
const totalPages = Math.ceil(totalCount / pageSize);
return (
{/* Header */}
Classes
Manage classes, timetables, and student enrollments
{(profile?.role === 'teacher' || profile?.role === 'admin') && (
)}
{/* Search and Filters */}
{showFilters && (
)}
{/* Error Message */}
{classesError && (
{classesError}
)}
{/* Classes Grid */}
{classesLoading ? (
) : classes.length === 0 ? (
No classes found
{searchQuery || filterSubject || filterSchoolYear
? 'Try adjusting your filters'
: 'Create your first class to get started'}
) : (
<>
{classes.map((cls) => (
{cls.name}
{cls.school_year} • {cls.academic_term}
{cls.student_count} students
{cls.timetable_count} timetables
))}
{/* Pagination */}
{totalPages > 1 && (
Page {currentPage + 1} of {totalPages}
)}
>
)}
);
};
export default ClassesPage;