import { useState } from "react"; import { useQuery } from "@tanstack/react-query"; import { Card, CardContent, CardHeader, CardTitle } from "@/components/ui/card"; import { Button } from "@/components/ui/button"; import { Input } from "@/components/ui/input"; import { Search, ChevronLeft, ChevronRight, Filter, Terminal, } from "lucide-react"; import { auditService, type AuditLog } from "@/services"; import { format } from "date-fns"; import { cn } from "@/lib/utils"; export default function ActivityLogPage() { const [page, setPage] = useState(1); const [limit] = useState(15); const [search, setSearch] = useState(""); const { data: auditData, isLoading } = useQuery({ queryKey: ["activity-log", page, limit, search], queryFn: async () => { const params: Record = { page, limit }; if (search) params.search = search; return await auditService.getAuditLogs(params); }, }); const getActionColor = (action: string) => { const act = action.toUpperCase(); if (act.includes("CREATE")) return "text-blue-600 bg-blue-50 border-blue-100"; if (act.includes("UPDATE")) return "text-emerald-600 bg-emerald-50 border-emerald-100"; if (act.includes("DELETE")) return "text-rose-600 bg-rose-50 border-rose-100"; if (act.includes("LOGIN")) return "text-purple-600 bg-purple-50 border-purple-100"; return "text-slate-600 bg-slate-50 border-slate-100"; }; return (

Activity Log

Audit trail of all administrative actions.

{/* View only access: Export button removed */}
System Audit
setSearch(e.target.value)} />
{isLoading ? ( ) : auditData?.data && auditData.data.length > 0 ? ( auditData.data.map((log: AuditLog) => ( )) ) : ( )}
Action User ID Resource IP Address Timestamp
Synchronizing audit records...
{log.action} {log.userId || "SYSTEM"} {log.resourceType}:{" "} {log.resourceId.substring(0, 8)}... {log.ipAddress || "--"} {format(new Date(log.timestamp), "MMM dd, HH:mm:ss")}
No activity logs recorded.
{auditData && auditData.totalPages > 1 && (

Page {auditData.page} of {auditData.totalPages} ({auditData.total}{" "} records)

)}
); }