import { Card, CardContent, Chip, Stack, Table, TableBody, TableCell, TableHead, TablePagination, TableRow, TextField, Typography, } from "@mui/material"; import { useQuery } from "@tanstack/react-query"; import { useState } from "react"; import { api, buildQuery } from "../../api/client"; import type { AuditEntry } from "../../api/types"; interface GlobalAudit { items: AuditEntry[]; total: number; page: number; page_size: number; } export function AdminAuditPage() { const [page, setPage] = useState(1); const [ncrNumber, setNcrNumber] = useState(""); const audit = useQuery({ queryKey: ["admin-audit", page, ncrNumber], queryFn: () => api( `/api/admin/audit${buildQuery({ page, page_size: 50, ncr_number: ncrNumber })}`, ), placeholderData: (prev) => prev, }); return ( { setNcrNumber(e.target.value); setPage(1); }} /> Immutable system-wide audit trail (field-level before/after values). When Who Action Field Before After {(audit.data?.items ?? []).map((a) => ( {new Date(a.created_at).toLocaleString()} {a.user.display_name} {a.detail && ( {a.detail} )} {a.field_name ?? ""} {a.old_value ?? ""} {a.new_value ?? ""} ))}
setPage(p + 1)} rowsPerPage={50} rowsPerPageOptions={[50]} />
); }