import { useParams, useNavigate } from "react-router-dom"; import { Card, CardContent, CardHeader, CardTitle } from "@/components/ui/card"; import { Button } from "@/components/ui/button"; import { Badge } from "@/components/ui/badge"; import { ArrowLeft, Loader2 } from "lucide-react"; import { useQuery, useMutation, useQueryClient } from "@tanstack/react-query"; import { admissionService } from "@/services/admission.service"; import { useToast } from "@/hooks/use-toast"; const stateBadgeVariant: Record = { draft: "outline", submit: "secondary", confirm: "default", admission: "default", reject: "destructive", cancel: "destructive", done: "secondary", }; export default function AdmissionDetail() { const { id } = useParams<{ id: string }>(); const navigate = useNavigate(); const { toast } = useToast(); const qc = useQueryClient(); const admissionId = Number(id); const { data: admission, isLoading } = useQuery({ queryKey: ["admissions", admissionId], queryFn: () => admissionService.getAdmission(admissionId), enabled: !!admissionId, }); const makeTransition = (action: "submit" | "confirm" | "admit" | "reject") => { const fns = { submit: admissionService.submitAdmission, confirm: admissionService.confirmAdmission, admit: admissionService.admitAdmission, reject: admissionService.rejectAdmission, }; return fns[action]; }; const transitionMutation = useMutation({ mutationFn: ({ action }: { action: "submit" | "confirm" | "admit" | "reject" }) => makeTransition(action)(admissionId), onSuccess: (_, { action }) => { qc.invalidateQueries({ queryKey: ["admissions"] }); toast({ title: `Admission ${action}${action === "submit" ? "ted" : action === "reject" ? "ed" : "ed"}` }); }, onError: () => toast({ title: "Error", description: "Action failed", variant: "destructive" }), }); if (isLoading) return
; if (!admission) return
Admission not found.
; return (

{admission.first_name} {admission.last_name}

Application #{admission.application_number}

{admission.state}
Applicant Information
Full Name
{admission.first_name} {admission.middle_name ?? ""} {admission.last_name}
Email
{admission.email}
Phone
{admission.phone ?? "—"}
Birth Date
{admission.birth_date ?? "—"}
Gender
{admission.gender === "m" ? "Male" : admission.gender === "f" ? "Female" : "Other"}
Nationality
{admission.nationality_name ?? "—"}
Application Details
Course
{admission.course_name}
Register
{admission.register_name}
Batch
{admission.batch_name ?? "—"}
Fees
{admission.fees}
Applied On
{new Date(admission.created_at).toLocaleDateString()}
Actions
{admission.state === "draft" && ( )} {admission.state === "submit" && ( <> )} {admission.state === "confirm" && ( <> )} {["admission", "reject", "done"].includes(admission.state) && (

No further actions available.

)}
); }