feat: implement AuditLogsList and PolicyEngineList components to visualize system logs and engine configurations.

This commit is contained in:
azeeee05
2026-08-20 15:53:40 +05:30
parent 47344f3005
commit 78a6fbcb6b
2 changed files with 25 additions and 20 deletions
+14 -16
View File
@@ -108,20 +108,9 @@ export default function AuditLogsList() {
const result = await getAuditLogs(filters); const result = await getAuditLogs(filters);
// Client-side search on entityLabel / entityId setLogs(result.data || []);
const filtered = search setTotalItems(result.total || 0);
? result.data.filter( setTotalPages(result.totalPages || 1);
(l) =>
l.entityLabel?.toLowerCase().includes(search.toLowerCase()) ||
l.entityId?.toLowerCase().includes(search.toLowerCase()) ||
l.module?.toLowerCase().includes(search.toLowerCase()) ||
l.performedBy?.toLowerCase().includes(search.toLowerCase()),
)
: result.data;
setLogs(filtered);
setTotalItems(result.total);
setTotalPages(result.totalPages);
} catch (err) { } catch (err) {
console.error("Failed to fetch audit logs", err); console.error("Failed to fetch audit logs", err);
setLogs([]); setLogs([]);
@@ -129,7 +118,7 @@ export default function AuditLogsList() {
setLoading(false); setLoading(false);
} }
}, },
[search, daysFilter], [daysFilter],
); );
useEffect(() => { useEffect(() => {
@@ -290,6 +279,15 @@ export default function AuditLogsList() {
// ─── Render ───────────────────────────────────────────────────────────────── // ─── Render ─────────────────────────────────────────────────────────────────
const displayedLogs = search
? logs.filter((l) =>
l.entityLabel?.toLowerCase().includes(search.toLowerCase()) ||
l.entityId?.toLowerCase().includes(search.toLowerCase()) ||
l.module?.toLowerCase().includes(search.toLowerCase()) ||
l.performedBy?.toLowerCase().includes(search.toLowerCase())
)
: logs;
const startIndex = totalItems > 0 ? (currentPage - 1) * PAGE_SIZE + 1 : 0; const startIndex = totalItems > 0 ? (currentPage - 1) * PAGE_SIZE + 1 : 0;
const endIndex = Math.min(currentPage * PAGE_SIZE, totalItems); const endIndex = Math.min(currentPage * PAGE_SIZE, totalItems);
@@ -297,7 +295,7 @@ export default function AuditLogsList() {
<div className="w-full flex flex-col gap-6"> <div className="w-full flex flex-col gap-6">
<CustomTable<AuditLog> <CustomTable<AuditLog>
columns={columns} columns={columns}
data={logs} data={displayedLogs}
leftHeaderActions={ leftHeaderActions={
<div className="w-[360px]"> <div className="w-[360px]">
<CustomInput <CustomInput
@@ -83,7 +83,7 @@ export default function PolicyEngineList() {
const fetchPolicies = useCallback( const fetchPolicies = useCallback(
(page: number) => { (page: number) => {
setLoading(true); setLoading(true);
getPolicies(page, PAGE_SIZE, search) getPolicies(page, PAGE_SIZE)
.then((res) => { .then((res) => {
setPolicies(res.data || []); setPolicies(res.data || []);
setTotalItems(res.total || 0); setTotalItems(res.total || 0);
@@ -99,12 +99,12 @@ export default function PolicyEngineList() {
setLoading(false); setLoading(false);
}); });
}, },
[search], [],
); );
useEffect(() => { useEffect(() => {
fetchPolicies(currentPage); fetchPolicies(currentPage);
}, [currentPage, search, fetchPolicies]); }, [currentPage, fetchPolicies]);
// ─── Handlers ────────────────────────────────────────────────────────────── // ─── Handlers ──────────────────────────────────────────────────────────────
@@ -141,6 +141,13 @@ export default function PolicyEngineList() {
} }
}; };
const displayedPolicies = search
? policies.filter(p =>
p.policyName?.toLowerCase().includes(search.toLowerCase()) ||
p.jurisdiction?.toLowerCase().includes(search.toLowerCase())
)
: policies;
const startIndex = totalItems > 0 ? (currentPage - 1) * PAGE_SIZE + 1 : 0; const startIndex = totalItems > 0 ? (currentPage - 1) * PAGE_SIZE + 1 : 0;
const endIndex = Math.min(currentPage * PAGE_SIZE, totalItems); const endIndex = Math.min(currentPage * PAGE_SIZE, totalItems);
@@ -233,7 +240,7 @@ export default function PolicyEngineList() {
<> <>
<CustomTable<PolicyEngineResponse> <CustomTable<PolicyEngineResponse>
columns={columns} columns={columns}
data={policies} data={displayedPolicies}
leftHeaderActions={ leftHeaderActions={
<div className="w-[380px]"> <div className="w-[380px]">
<CustomInput <CustomInput