import { useEffect, useState } from "react"; import { Link } from "react-router"; import { ProtectedRoute } from "~/components/ProtectedRoute"; import { SubjectCard } from "~/components/SubjectCard"; import { LoadingSpinner } from "~/components/LoadingSpinner"; import { Button } from "~/components/Button"; import { api } from "~/api/client"; import type { Subject, Grade } from "~/types/api"; import { calculateSubjectAverage } from "~/utils/gradeCalculations"; export default function SubjectsList() { const [subjects, setSubjects] = useState([]); const [grades, setGrades] = useState([]); const [loading, setLoading] = useState(true); useEffect(() => { loadData(); }, []); const loadData = async () => { try { const [subjectsData, gradesData] = await Promise.all([ api.getSubjects(), api.getGrades(), ]); setSubjects(subjectsData); setGrades(gradesData); } catch (error) { console.error("Failed to load subjects:", error); } finally { setLoading(false); } }; const handleDelete = async (subjectId: string) => { if (!confirm("Are you sure? This will delete all grades for this subject.")) { return; } try { await api.deleteSubject(subjectId); setSubjects(subjects.filter((s) => s._id !== subjectId)); setGrades(grades.filter((g) => g.subject_id !== subjectId)); } catch (error) { alert("Failed to delete subject"); } }; if (loading) { return (
); } // Use the first subject's grading system as the primary system const primaryGradeSystem = subjects[0]?.grade_system || "percentage"; return (
← Back to Dashboard

Manage Subjects

{subjects.length > 0 ? (
{subjects.map((subject) => { const subjectGrades = grades.filter((g) => g.subject_id === subject._id); const avgData = calculateSubjectAverage(subject, subjectGrades); return ( handleDelete(subject._id)} /> ); })}
) : (

No subjects yet. Create your first subject!

)}
); }