import { useState } from "react"; import { Card, CardContent, CardHeader, CardTitle, CardDescription } from "@/components/ui/card"; import { Button } from "@/components/ui/button"; import { Badge } from "@/components/ui/badge"; import { Table, TableBody, TableCell, TableHead, TableHeader, TableRow } from "@/components/ui/table"; import { Checkbox } from "@/components/ui/checkbox"; import { Loader2 } from "lucide-react"; import { useQuery, useMutation, useQueryClient } from "@tanstack/react-query"; import { institutionalExamService } from "@/services/institutional-exam.service"; import { useToast } from "@/hooks/use-toast"; import type { SubjectRegistration } from "@/types/institutional-exam"; const stateBadgeVariant: Record = { draft: "outline", confirm: "default", reject: "destructive", done: "secondary", }; export default function SubjectRegistrationPage() { const { toast } = useToast(); const qc = useQueryClient(); const [selectedSubjects, setSelectedSubjects] = useState([]); const { data: registrationsData, isLoading } = useQuery({ queryKey: ["subject-registrations", "list"], queryFn: () => institutionalExamService.listSubjectRegistrations(), }); const registrations = registrationsData?.items ?? []; const { data: available = [], isLoading: loadingAvailable } = useQuery({ queryKey: ["subject-registrations", "available"], queryFn: () => institutionalExamService.getAvailableSubjects(), }); const createMutation = useMutation({ mutationFn: () => institutionalExamService.createSubjectRegistration({ subject_ids: selectedSubjects, } as Parameters[0]), onSuccess: () => { qc.invalidateQueries({ queryKey: ["subject-registrations"] }); toast({ title: "Registration submitted" }); setSelectedSubjects([]); }, onError: () => toast({ title: "Error", description: "Registration failed", variant: "destructive" }), }); const toggleSubject = (id: number) => { setSelectedSubjects(prev => prev.includes(id) ? prev.filter(s => s !== id) : [...prev, id]); }; if (isLoading) return
; return (

Subject Registration

Register for subjects within your enrolled courses.

Available Subjects Select the subjects you want to register for this term. {loadingAvailable ? (
) : available.length > 0 ? (
{available.map((subj: SubjectRegistration) => ( ))}
) : (

No subjects available for registration.

)}
My Registrations Course Batch Subjects State {registrations.map((reg: SubjectRegistration) => ( {reg.course_name} {reg.batch_name}
{reg.subject_names.slice(0, 3).map((name, i) => ( {name} ))} {reg.subject_names.length > 3 && +{reg.subject_names.length - 3}}
{reg.state}
))} {registrations.length === 0 && ( No registrations yet. )}
); }