import React, { useState, useEffect, useCallback } from 'react'; import { AuditLogEntry, AuditLogFilter, AuditLogPage } from '../types/audit'; import { fetchAuditLogs } from '../api/audit'; import Pagination from './Pagination'; import EmptyState from './EmptyState'; import LoadingSpinner from './LoadingSpinner'; import FilterBar from './FilterBar'; interface AuditLogViewerProps { initialFilters?: AuditLogFilter; } const PAGE_SIZE = 25; export default function AuditLogViewer({ initialFilters }: AuditLogViewerProps) { const [filters, setFilters] = useState( initialFilters ?? { user: '', action: '', dateFrom: '', dateTo: '' } ); const [page, setPage] = useState(1); const [data, setData] = useState(null); const [loading, setLoading] = useState(true); const [error, setError] = useState(null); const loadPage = useCallback(async () => { setLoading(true); setError(null); try { const result = await fetchAuditLogs({ user: filters.user || undefined, action: filters.action || undefined, dateFrom: filters.dateFrom || undefined, dateTo: filters.dateTo || undefined, page, pageSize: PAGE_SIZE, }); setData(result); } catch (err) { setError(err instanceof Error ? err.message : 'Failed to load audit logs'); setData(null); } finally { setLoading(false); } }, [filters, page]); useEffect(() => { loadPage(); }, [loadPage]); const handleFilterChange = (updated: AuditLogFilter) => { setFilters(updated); setPage(1); }; const handlePageChange = (newPage: number) => { setPage(newPage); }; if (loading) { return (
); } if (error) { return (