import {useState, useEffect, useCallback} from "react"; import {AxiosError} from "axios"; import { getDepartmentsApi, createDepartmentApi, updateDepartmentApi, deleteDepartmentApi, } from "@/api/department"; import { Table, TableBody, TableCell, TableHead, TableHeader, TableRow, } from "@/components/ui/table"; import {Card, CardContent, CardHeader, CardTitle} from "@/components/ui/card"; import {Button} from "@/components/ui/button"; import { Dialog, DialogContent, DialogHeader, DialogTitle, DialogFooter, } from "@/components/ui/dialog"; import {Input} from "@/components/ui/input"; import {Textarea} from "@/components/ui/textarea"; import {Loader2, RefreshCw, Plus, Pencil, Trash} from "lucide-react"; interface Department { departmentId: string; name: string; para1: string; para2: string; para3: string; facilities: string; services: string; } export default function DepartmentPage() { const [departments, setDepartments] = useState([]); const [loading, setLoading] = useState(true); const [error, setError] = useState(""); const [openModal, setOpenModal] = useState(false); const [editing, setEditing] = useState(null); const [form, setForm] = useState({ departmentId: "", name: "", para1: "", para2: "", para3: "", facilities: "", services: "", }); const fetchDepartments = useCallback(async () => { setLoading(true); setError(""); try { const res = await getDepartmentsApi(); setDepartments(res?.data || []); } catch (err) { if (err instanceof AxiosError) { setError(err.response?.data?.message || "Failed to load departments"); } else { setError("Something went wrong"); } } finally { setLoading(false); } }, []); useEffect(() => { fetchDepartments(); }, [fetchDepartments]); function handleChange( e: React.ChangeEvent, ) { setForm({ ...form, [e.target.name]: e.target.value, }); } function openAdd() { setEditing(null); setForm({ departmentId: "", name: "", para1: "", para2: "", para3: "", facilities: "", services: "", }); setOpenModal(true); } function openEdit(dep: Department) { setEditing(dep); setForm(dep); setOpenModal(true); } async function handleSubmit() { try { if (editing) { const {departmentId, ...updateData} = form; await updateDepartmentApi(editing.departmentId, updateData); } else { await createDepartmentApi(form); } setOpenModal(false); fetchDepartments(); } catch (error) { console.error(error); } } async function handleDelete(departmentId: string) { const confirmDelete = confirm("Delete this department?"); if (!confirmDelete) return; try { await deleteDepartmentApi(departmentId); fetchDepartments(); } catch (error) { console.error(error); } } return (

Departments

{error && (
{error}
)} Department List
ID Name Para1 Para2 Para3 Facilities Services Actions {loading ? ( ) : departments.length === 0 ? ( No departments found ) : ( departments.map((dep) => ( {dep.departmentId} {dep.name} {dep.para1} {dep.para2} {dep.para3} {dep.facilities} {dep.services} )) )}
{/* MODAL */} {editing ? "Edit Department" : "Add Department"}