"use client"; import Link from "next/link"; import { useState } from "react"; import { SlideOver } from "@/components/ui/SlideOver"; import { actionBadgeStyle } from "@/lib/colors"; import type { AuditChange } from "@/lib/supabase/types"; // Eine Protokollzeile zum Aufklappen. // // Die Liste zeigt, *dass* etwas geändert wurde; hier steht, *was*. Beides in // der Tabelle unterzubringen ginge nicht — bei sieben geänderten Feldern // wäre die Zeile höher als der Bildschirm. export type AuditEintrag = { id: string; occurred_at: string; actor_name: string; action: string; target_label: string; target_employee_id: string | null; details: string | null; changes: AuditChange[] | null; }; const zeitFormat = new Intl.DateTimeFormat("de-AT", { day: "2-digit", month: "2-digit", year: "numeric", hour: "2-digit", minute: "2-digit", second: "2-digit", timeZone: "Europe/Vienna", }); /** Leerer Wert heisst „war nicht gesetzt“ — und das ist eine Aussage. */ function Wert({ text, art }: { text: string | null; art: "vorher" | "nachher" }) { if (text === null || text === "") { return leer; } return {text}; } export function AuditDetail({ eintrag }: { eintrag: AuditEintrag }) { const [offen, setOffen] = useState(false); const anzahl = eintrag.changes?.length ?? 0; return ( <> setOffen(false)} title={eintrag.target_label} subtitle={`${eintrag.action} · ${zeitFormat.format(new Date(eintrag.occurred_at))}`} >
Aktion
{eintrag.action}
Benutzer:in
{eintrag.actor_name}
Zeitpunkt
{zeitFormat.format(new Date(eintrag.occurred_at))}
{eintrag.target_employee_id && ( <>
Objekt
{eintrag.target_label}
)}
{eintrag.details && (

{eintrag.details}

)}

Geänderte Felder

{anzahl > 0 ? (
{eintrag.changes!.map((c, i) => ( ))}
Feld Vorher Nachher
{c.feld}
) : ( // Kein Aufzählungszeichen für „nichts da“: der Grund ist wichtig, // damit niemand einen Fehler vermutet.

Für diesen Eintrag liegen keine Feldwerte vor. Vorgänge wie Eintritt, Austritt oder Import erfassen keine Einzelfelder — und Einträge von vor der Erweiterung des Protokolls haben nur die Feldnamen behalten, nicht die Werte. Nachliefern lässt sich das nicht.

)}
); }