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 */}
setSearchQuery(e.target.value)} className="w-full pl-10 pr-4 py-2 border border-gray-300 rounded-lg focus:ring-2 focus:ring-blue-500 focus:border-blue-500" />
{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.subject}

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