import type { Metadata } from "next"; import Link from "next/link"; import { PageHeader } from "@/components/status"; import { Button, buttonVariants } from "@/components/ui/button"; import { Card, CardContent } from "@/components/ui/card"; import { Input } from "@/components/ui/input"; import { api, unwrap } from "@/lib/api"; import { AuditTable } from "../audit-table"; import { ConsoleNav, requireConsole } from "../console-nav"; export const metadata: Metadata = { title: "Audit Log" }; const filters = ["action", "actor", "person", "catalog", "product", "room", "q", "from", "to"] as const; type Filters = Partial>; export default async function AuditPage({ searchParams }: { searchParams: Promise> }) { const { console: data } = await requireConsole("/console/audit"); const params = await searchParams; const f: Filters = {}; for (const k of filters) { const v = params[k]; if (typeof v === "string" && v.trim()) f[k] = v.trim().slice(0, 100); } const before = typeof params.before === "string" && /^\d+$/.test(params.before) ? Number(params.before) : undefined; const { entries, before: next } = unwrap(await api.console.audit.get({ query: { ...f, ...(before ? { before } : {}), limit: 100 } })); const older = new URLSearchParams({ ...f, ...(next ? { before: String(next) } : {}) }); const moderator = data.moderation !== null; return ( <> {moderator ? "Every change on the hub." : "Changes to what you manage, and the ones you made."}
{moderator && }
{Object.keys(f).length > 0 && ( Clear )}
{next && entries.length === 100 && (
Older
)} ); }