import { useState, useEffect, useCallback } from "react"; import { getAcademicsApi, deleteAcademicsApi } from "@/api/academics"; import { exportToExcel } from "@/utils/exportToExcel"; 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 { Input } from "@/components/ui/input"; import { Loader2, Trash, RefreshCw, Download } from "lucide-react"; export default function AcademicsPage() { const [records, setRecords] = useState([]); const [loading, setLoading] = useState(true); const [searchText, setSearchText] = useState(""); const fetchAll = useCallback(async () => { setLoading(true); try { const res = await getAcademicsApi(); setRecords(res?.data || []); } catch (err) { console.error(err); } finally { setLoading(false); } }, []); useEffect(() => { fetchAll(); }, [fetchAll]); const filteredRecords = records.filter((item) => { return ( item.fullName?.toLowerCase().includes(searchText.toLowerCase()) || item.number?.includes(searchText) || item.emailId?.toLowerCase().includes(searchText.toLowerCase()) || item.subject?.toLowerCase().includes(searchText.toLowerCase()) || item.courseName?.toLowerCase().includes(searchText.toLowerCase()) ); }); async function handleDelete(id: number) { if (!confirm("Delete record?")) return; await deleteAcademicsApi(id); fetchAll(); } const handleExport = () => { const exportData = filteredRecords.map((item) => ({ ID: item.id, Name: item.fullName, Phone: item.number, Email: item.emailId, Course: item.courseName, Subject: item.subject, Message: item.message, Date: new Date(item.createdAt).toLocaleDateString(), })); exportToExcel(exportData, "academics"); }; return (

Academics & Research

setSearchText(e.target.value)} className="w-[260px]" />
Academics Records
ID Name Phone Email Course Subject Message Date Actions {loading ? ( ) : filteredRecords.length === 0 ? ( No records found ) : ( filteredRecords.map((item) => ( {item.id} {item.fullName} {item.number} {item.emailId} {item.courseName} {item.subject} {item.message} {new Date(item.createdAt).toLocaleDateString()} )) )}
); }