"use client"; import React, { useEffect, useState, useCallback } from "react"; import { useRouter } from "next/navigation"; import { Plus, Eye, Pencil } from "lucide-react"; import Link from "next/link"; import api from "@/lib/api"; import GlassPageHeader from "@/components/ui/GlassPageHeader"; import GlassBreadcrumb from "@/components/ui/GlassBreadcrumb"; import GlassTable, { type TableColumn } from "@/components/ui/GlassTable"; import GlassSearch from "@/components/ui/GlassSearch"; import GlassButton from "@/components/ui/GlassButton"; import GlassLoader from "@/components/ui/GlassLoader"; import type { ClassResponse } from "@/types"; export default function ClassesPage(): React.ReactElement { const router = useRouter(); const [classes, setClasses] = useState([]); const [filtered, setFiltered] = useState([]); const [loading, setLoading] = useState(true); useEffect(() => { async function fetch(): Promise { try { const { data } = await api.get("/admin/classes"); setClasses(data); setFiltered(data); } catch { setClasses([]); setFiltered([]); } finally { setLoading(false); } } fetch(); }, []); const handleSearch = useCallback((q: string) => { if (!q.trim()) { setFiltered(classes); return; } const lq = q.toLowerCase(); setFiltered(classes.filter((c) => c.name.toLowerCase().includes(lq) || c.subject_name.toLowerCase().includes(lq) || c.subject_code.toLowerCase().includes(lq) )); }, [classes]); const columns: TableColumn>[] = [ { key: "name", header: "Class Name", sortable: true }, { key: "subject_name", header: "Subject", sortable: true, render: (r) => {String(r.subject_name)}({String(r.subject_code)}) }, { key: "enrolled_count", header: "Enrolled", render: (r) => {String(r.enrolled_count)}{r.max_students ? ` / ${String(r.max_students)}` : ""} }, { key: "classroom_name", header: "Classroom", render: (r) => {String(r.classroom_name || "—")} }, { key: "actions", header: "Actions", render: (row) => (
View Edit
), }, ]; if (loading) return ; return (
} onClick={() => router.push("/admin/classes/create")}>Create Class} />
)[]} emptyMessage="No classes found" />
); }