import React, { useState, useEffect } from 'react'; import { AuditLogEntry, AuditLogFilters } from '../types/audit'; interface AuditLogTableProps { initialFilters: AuditLogFilters; } const PAGE_SIZE = 50; export function AuditLogTable({ initialFilters }: AuditLogTableProps) { const [filters, setFilters] = useState(initialFilters); const [page, setPage] = useState(1); const [entries, setEntries] = useState([]); const [totalPages, setTotalPages] = useState(1); const [loading, setLoading] = useState(true); const [error, setError] = useState(null); useEffect(() => { let cancelled = false; setLoading(true); setError(null); const params = new URLSearchParams(); params.set('page', String(page)); params.set('pageSize', String(PAGE_SIZE)); if (filters.actor) params.set('actor', filters.actor); if (filters.action) params.set('action', filters.action); if (filters.fromDate) params.set('fromDate', filters.fromDate); if (filters.toDate) params.set('toDate', filters.toDate); fetch(`/api/audit-logs?${params.toString()}`) .then((res) => { if (!res.ok) throw new Error(`Request failed: ${res.status}`); return res.json(); }) .then((data) => { if (cancelled) return; setEntries(data.entries); setTotalPages(data.totalPages); setLoading(false); }) .catch((err) => { if (cancelled) return; setError(err.message); setLoading(false); }); return () => { cancelled = true; }; }, [page, filters]); const handleFilterChange = (field: keyof AuditLogFilters, value: string) => { setFilters((prev) => ({ ...prev, [field]: value })); setPage(1); }; const handlePageChange = (newPage: number) => { if (newPage < 1 || newPage > totalPages) return; setPage(newPage); }; if (error) { return (