import { useState } from "react"; import { Card, CardContent } from "@/components/ui/card"; import { Button } from "@/components/ui/button"; import { Input } from "@/components/ui/input"; import { Table, TableBody, TableCell, TableHead, TableHeader, TableRow } from "@/components/ui/table"; import { Dialog, DialogContent, DialogHeader, DialogTitle, DialogTrigger } from "@/components/ui/dialog"; import { Label } from "@/components/ui/label"; import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from "@/components/ui/select"; import { Plus, Pencil, Trash2, Loader2 } from "lucide-react"; import { useDepartments, useCreateDepartment, useUpdateDepartment, useDeleteDepartment, } from "@/hooks/queries/useAcademic"; import { useToast } from "@/hooks/use-toast"; import type { Department, DepartmentCreateRequest } from "@/types/academic"; export default function DepartmentManager() { const { toast } = useToast(); const { data: deptsData, isLoading } = useDepartments(); const depts = deptsData?.items ?? []; const createDept = useCreateDepartment(); const updateDept = useUpdateDepartment(); const deleteDept = useDeleteDepartment(); const [showDialog, setShowDialog] = useState(false); const [editing, setEditing] = useState(null); const [form, setForm] = useState({ name: "", code: "" }); const openCreate = () => { setEditing(null); setForm({ name: "", code: "" }); setShowDialog(true); }; const openEdit = (dept: Department) => { setEditing(dept); setForm({ name: dept.name, code: dept.code, parent_id: dept.parent_id }); setShowDialog(true); }; const handleSave = () => { if (editing) { updateDept.mutate({ id: editing.id, data: form }, { onSuccess: () => { toast({ title: "Department updated" }); setShowDialog(false); }, onError: () => toast({ title: "Error", description: "Failed to update", variant: "destructive" }), }); } else { createDept.mutate(form, { onSuccess: () => { toast({ title: "Department created" }); setShowDialog(false); setForm({ name: "", code: "" }); }, onError: () => toast({ title: "Error", description: "Failed to create", variant: "destructive" }), }); } }; const handleDelete = (id: number) => { if (!window.confirm("Delete this department?")) return; deleteDept.mutate(id, { onSuccess: () => toast({ title: "Department deleted" }), onError: () => toast({ title: "Error", description: "Failed to delete", variant: "destructive" }), }); }; const isSaving = createDept.isPending || updateDept.isPending; if (isLoading) return
; return (

Departments

Manage departments and their hierarchy.

{editing ? "Edit Department" : "Create Department"}
setForm({ ...form, name: e.target.value })} />
setForm({ ...form, code: e.target.value })} />
Name Code Parent Courses Faculty Actions {depts.map((dept: Department) => ( {dept.name} {dept.code} {dept.parent_name ?? "—"} {dept.course_count} {dept.faculty_count}
))} {depts.length === 0 && ( No departments found. )}
); }