diff --git a/frontend/src/pages/Department.tsx b/frontend/src/pages/Department.tsx index f456c15..b06dc0b 100644 --- a/frontend/src/pages/Department.tsx +++ b/frontend/src/pages/Department.tsx @@ -1,5 +1,5 @@ -import {useState, useEffect, useCallback} from "react"; -import {AxiosError} from "axios"; +import { useState, useEffect, useCallback } from "react"; +import { AxiosError } from "axios"; import { getDepartmentsApi, @@ -17,8 +17,8 @@ import { TableRow, } from "@/components/ui/table"; -import {Card, CardContent, CardHeader, CardTitle} from "@/components/ui/card"; -import {Button} from "@/components/ui/button"; +import { Card, CardContent, CardHeader, CardTitle } from "@/components/ui/card"; +import { Button } from "@/components/ui/button"; import { Dialog, @@ -28,10 +28,10 @@ import { DialogFooter, } from "@/components/ui/dialog"; -import {Input} from "@/components/ui/input"; -import {Textarea} from "@/components/ui/textarea"; +import { Input } from "@/components/ui/input"; +import { Textarea } from "@/components/ui/textarea"; -import {Loader2, RefreshCw, Plus, Pencil, Trash} from "lucide-react"; +import { Loader2, RefreshCw, Plus, Pencil, Trash, Eye } from "lucide-react"; interface Department { departmentId: string; @@ -51,6 +51,9 @@ export default function DepartmentPage() { const [openModal, setOpenModal] = useState(false); const [editing, setEditing] = useState(null); + const [viewOpen, setViewOpen] = useState(false); + const [viewData, setViewData] = useState(null); + const [searchText, setSearchText] = useState(""); const [form, setForm] = useState({ @@ -85,32 +88,21 @@ export default function DepartmentPage() { fetchDepartments(); }, [fetchDepartments]); - const filteredDepartments = departments.filter((dep) => { - const text = searchText.toLowerCase(); + const filteredDepartments = departments.filter((dep) => + dep.name.toLowerCase().includes(searchText.toLowerCase()), + ); - return ( - dep.name.toLowerCase().includes(text) || - dep.departmentId.toLowerCase().includes(text) || - dep.para1.toLowerCase().includes(text) || - dep.para2.toLowerCase().includes(text) || - dep.para3.toLowerCase().includes(text) || - dep.facilities.toLowerCase().includes(text) || - dep.services.toLowerCase().includes(text) - ); - }); + function handleChange(e: any) { + setForm({ ...form, [e.target.name]: e.target.value }); + } - function handleChange( - e: React.ChangeEvent, - ) { - setForm({ - ...form, - [e.target.name]: e.target.value, - }); + function truncate(text: string, limit = 60) { + if (!text) return "-"; + return text.length > limit ? text.substring(0, limit) + "..." : text; } function openAdd() { setEditing(null); - setForm({ departmentId: "", name: "", @@ -120,7 +112,6 @@ export default function DepartmentPage() { facilities: "", services: "", }); - setOpenModal(true); } @@ -130,10 +121,15 @@ export default function DepartmentPage() { setOpenModal(true); } + function openView(dep: Department) { + setViewData(dep); + setViewOpen(true); + } + async function handleSubmit() { try { if (editing) { - const {departmentId, ...updateData} = form; + const { departmentId, ...updateData } = form; await updateDepartmentApi(editing.departmentId, updateData); } else { await createDepartmentApi(form); @@ -146,12 +142,11 @@ export default function DepartmentPage() { } } - async function handleDelete(departmentId: string) { - const confirmDelete = confirm("Delete this department?"); - if (!confirmDelete) return; + async function handleDelete(id: string) { + if (!confirm("Delete this department?")) return; try { - await deleteDepartmentApi(departmentId); + await deleteDepartmentApi(id); fetchDepartments(); } catch (error) { console.error(error); @@ -160,7 +155,6 @@ export default function DepartmentPage() { return (
- {/* HEADER */}

Departments

@@ -175,8 +169,7 @@ export default function DepartmentPage() { @@ -200,31 +193,29 @@ export default function DepartmentPage() { -
- +
+
- ID - Name - Para1 - Para2 - Para3 - Facilities - Services - Actions + ID + Name + Para1 + Facilities + Services + Actions {loading ? ( - + ) : filteredDepartments.length === 0 ? ( - + No departments found @@ -233,42 +224,47 @@ export default function DepartmentPage() { {dep.departmentId} - {dep.name} - - - {dep.para1} + +
{dep.name}
- - {dep.para2} + +
+ {truncate(dep.para1)} +
- - {dep.para3} + +
+ {truncate(dep.facilities)} +
- - {dep.facilities} + +
+ {truncate(dep.services)} +
- - {dep.services} - - - + + + @@ -281,64 +277,59 @@ export default function DepartmentPage() { - {/* MODAL */} - + {editing ? "Edit Department" : "Add Department"} -
+