import { useState } from "react"; import { Card, CardContent } from "@/components/ui/card"; import { Input } from "@/components/ui/input"; import { Button } from "@/components/ui/button"; import { Badge } from "@/components/ui/badge"; import { Dialog, DialogContent, DialogHeader, DialogTitle, DialogFooter } from "@/components/ui/dialog"; import { Label } from "@/components/ui/label"; import { Table, TableBody, TableCell, TableHead, TableHeader, TableRow } from "@/components/ui/table"; import { Search, Plus, Trash2, Users } from "lucide-react"; import { useBatches, useCourses } from "@/hooks/queries"; import { lmsService } from "@/services/lms.service"; import { useMutation, useQueryClient } from "@tanstack/react-query"; import { useToast } from "@/hooks/use-toast"; import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from "@/components/ui/select"; export default function ClassroomsPage() { const [search, setSearch] = useState(""); const [createOpen, setCreateOpen] = useState(false); const [form, setForm] = useState({ name: "", course_id: "", start_date: "", end_date: "", max_students: "" }); const { toast } = useToast(); const qc = useQueryClient(); const batchesQ = useBatches({ size: 200 }); const coursesQ = useCourses({ size: 200 }); const batches = batchesQ.data?.items ?? []; const courses = coursesQ.data?.items ?? []; const createMut = useMutation({ mutationFn: (data: Parameters[0]) => lmsService.createBatch(data), onSuccess: () => { qc.invalidateQueries({ queryKey: ["lms", "batches"] }); setCreateOpen(false); setForm({ name: "", course_id: "", start_date: "", end_date: "", max_students: "" }); toast({ title: "Classroom created" }); }, onError: (err: Error) => toast({ title: "Error", description: err.message, variant: "destructive" }), }); const deleteMut = useMutation({ mutationFn: (id: number) => lmsService.deleteBatch(id), onSuccess: () => { qc.invalidateQueries({ queryKey: ["lms", "batches"] }); toast({ title: "Deleted" }); }, onError: (err: Error) => toast({ title: "Error", description: err.message, variant: "destructive" }), }); const q = search.toLowerCase(); const filtered = batches.filter(b => b.name.toLowerCase().includes(q) || b.course_name?.toLowerCase().includes(q)); const loading = batchesQ.isLoading; return (

Classrooms

Create and manage batches (classrooms).

setSearch(e.target.value)} />
{loading ? (
) : ( Name Course Students Capacity Dates Status {filtered.length === 0 && ( No classrooms found. )} {filtered.map((b) => ( {b.name} {b.course_name} {b.student_count} {b.capacity} {b.start_date} — {b.end_date} {b.status} ))}
)} Create Classroom
setForm(f => ({ ...f, name: e.target.value }))} placeholder="e.g. IELTS Prep Group A" />
setForm(f => ({ ...f, start_date: e.target.value }))} />
setForm(f => ({ ...f, end_date: e.target.value }))} />
setForm(f => ({ ...f, max_students: e.target.value }))} placeholder="30" />
); }