import { useParams, Link } from "react-router-dom"; import { Card, CardContent, CardHeader, CardTitle } from "@/components/ui/card"; import { Badge } from "@/components/ui/badge"; import { Button } from "@/components/ui/button"; import { Table, TableBody, TableCell, TableHead, TableHeader, TableRow } from "@/components/ui/table"; import { useBatches, useStudents, useTimetable } from "@/hooks/queries"; import { ArrowLeft, Users, Calendar, BookOpen } from "lucide-react"; export default function AdminBatchDetail() { const { id } = useParams(); const batchId = id ? Number(id) : NaN; const { data: batchesData, isLoading: lb } = useBatches(); const { data: studentsData, isLoading: ls } = useStudents( Number.isFinite(batchId) ? { batch_id: batchId, size: 500 } : { size: 500 }, ); const { data: timetableData, isLoading: ltt } = useTimetable(); const batches = batchesData?.items ?? []; const students = studentsData?.items ?? []; const timetableSessions = Array.isArray(timetableData) ? timetableData : []; if (lb || ls || ltt) return
; const batch = batches.find(b => String(b.id) === id); if (!batch) return
Batch not found.
; const studentIds = Array.isArray(batch.student_ids) ? batch.student_ids : []; const batchStudents = Number.isFinite(batchId) ? students.filter((s) => s.batch_id === batchId) : students.filter((s) => studentIds.includes(s.id)); const coursePrefix = (batch.course_name || "").split(" ")[0]; const batchSessions = timetableSessions.filter(s => s.batch_name === batch.name || (coursePrefix && (s.course_name || "").includes(coursePrefix)), ); return (

{batch.name}

{batch.course_name} · {batch.teacher_name}

{batch.student_count}/{batch.capacity}

Students

{batch.schedule}

Schedule

{batch.start_date} — {batch.end_date}

Duration

{batch.status}

Status

Enrolled Students StudentAttendanceAvg GradeRisk {batchStudents.map(s => ( {s.name} ))}
Timetable {batchSessions.length === 0 ? (

No sessions scheduled.

) : batchSessions.map(s => (

{s.day} {s.start_time}–{s.end_time}

{s.room}

{s.course_name}
))}
); }