import { useState, useEffect, useCallback } from "react"; import { getCareersApi, deleteCareerApi } from "@/api/career"; import apiClient from "@/api/client"; 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 { Loader2, Plus, Pencil, Trash, RefreshCw } from "lucide-react"; export default function CareerPage() { const [careers, setCareers] = useState([]); const [loading, setLoading] = useState(true); const [openModal, setOpenModal] = useState(false); const [editing, setEditing] = useState(null); const [searchText, setSearchText] = useState(""); const [form, setForm] = useState({ post: "", designation: "", qualification: "", experienceNeed: "", email: "", number: "", status: "new", }); const fetchAll = useCallback(async () => { setLoading(true); try { const res = await getCareersApi(); setCareers(res?.data || []); } catch (err) { console.error(err); } finally { setLoading(false); } }, []); useEffect(() => { fetchAll(); }, [fetchAll]); const filteredCareers = careers.filter((item) => item.post?.toLowerCase().includes(searchText.toLowerCase()), ); function handleChange(e: any) { setForm({ ...form, [e.target.name]: e.target.value }); } function openAdd() { setEditing(null); setForm({ post: "", designation: "", qualification: "", experienceNeed: "", email: "", number: "", status: "new", }); setOpenModal(true); } function openEdit(item: any) { setEditing(item); setForm({ post: item.post || "", designation: item.designation || "", qualification: item.qualification || "", experienceNeed: item.experienceNeed || "", email: item.email || "", number: item.number || "", status: item.status || "new", }); setOpenModal(true); } async function handleSubmit() { try { if (editing) { await apiClient.patch(`/careers/${editing.id}`, form); } else { await apiClient.post("/careers", form); } setOpenModal(false); fetchAll(); } catch (err) { console.error(err); } } async function handleDelete(id: number) { if (!confirm("Delete career?")) return; await deleteCareerApi(id); fetchAll(); } return (

Careers

setSearchText(e.target.value)} className="w-[220px]" />
Career List
ID Post Designation Qualification Experience Email Phone Status Actions {loading ? ( ) : filteredCareers.length === 0 ? ( No careers found ) : ( filteredCareers.map((item) => ( {item.id} {item.post} {item.designation} {item.qualification} {item.experienceNeed} {item.email} {item.number} {item.status} )) )}
{/* MODAL */} {editing ? "Edit Career" : "Add Career"}
); }