import React, { useState, useEffect } from 'react'; import { Card } from '../ui/card'; import { Button } from '../ui/button'; import { Input } from '../ui/input'; import { Search, Filter, History, User, Globe, Loader2 } from 'lucide-react'; import { adminService } from '../../services/adminService'; import { format } from 'date-fns'; export const AdminAuditLogsView: React.FC = () => { const [logs, setLogs] = useState([]); const [loading, setLoading] = useState(true); const [page, setPage] = useState(1); const [total, setTotal] = useState(0); const fetchLogs = async () => { setLoading(true); try { const data = await adminService.getAuditLogs({ page, limit: 20 }); setLogs(data.logs || []); setTotal(data.pagination?.total_items || 0); } catch (e) { console.error('Failed to fetch audit logs', e); } finally { setLoading(false); } }; useEffect(() => { fetchLogs(); }, [page]); return (

AUDIT PROTOCOL

Global Immutable Ledger

{loading ? ( ) : logs.length === 0 ? ( ) : ( logs.map((log) => ( )) )}
Timestamp User Action Resource Context Origin
No temporal data packets recovered.
{format(new Date(log.timestamp), 'MMM dd, HH:mm:ss')}
{log.user?.username || 'System'}
{log.action} {log.resource} #{log.resource_id?.slice(0, 8)} {JSON.stringify(log.context)}
{log.ip_address} {log.user_agent}
{/* Pagination placeholder */}
Packet: {logs.length} / Total: {total}
); };