"use client" import { useState } from "react" import { Download } from "lucide-react" import { SettingsSectionHeader } from "@/components/gmail/settings/settings-section-header" import { SettingsSyncBanner } from "@/components/gmail/settings/settings-sync-banner" import { useAdminAuditLogs } from "@/lib/api/hooks/use-admin-queries" import { apiClient } from "@/lib/api/client" import { Button } from "@/components/ui/button" import { Table, TableBody, TableCell, TableHead, TableHeader, TableRow, } from "@/components/ui/table" export function AuditSection() { const [page, setPage] = useState(1) const { data, isFetching, isError, refetch } = useAdminAuditLogs({ page, page_size: 50 }) const logs = data?.logs ?? [] const total = data?.pagination.total ?? 0 const pageSize = data?.pagination.page_size ?? 50 const totalPages = Math.max(1, Math.ceil(total / pageSize)) async function exportLogs(format: "csv" | "ndjson") { const blob = await apiClient.getBlob(`/admin/audit/export?format=${format}&limit=5000`) const url = URL.createObjectURL(blob) const a = document.createElement("a") a.href = url a.download = `audit-export.${format === "csv" ? "csv" : "ndjson"}` a.click() URL.revokeObjectURL(url) } return ( <> refetch()} />
Date Acteur Action Détails {logs.length === 0 ? ( Aucun événement. ) : ( logs.map((log) => ( {new Date(log.created_at).toLocaleString("fr-FR")} {log.actor} {log.action} {typeof log.details === "string" ? log.details : JSON.stringify(log.details)} )) )}
{totalPages > 1 ? (
) : null} ) }