'use client'; import { useEffect, useState } from 'react'; import type { Kuppel, LogbuchEintrag } from '@/types/logbuch'; interface Props { kuppel: Kuppel; refreshKey: number; onEdit: (entry: LogbuchEintrag) => void; limit?: number; compact?: boolean; } function formatDateTime(dt: string): string { if (!dt) return ''; const d = new Date(dt); if (isNaN(d.getTime())) return dt; return d.toLocaleString('de-DE', { day: '2-digit', month: '2-digit', year: 'numeric', hour: '2-digit', minute: '2-digit' }); } export default function LogbuchList({ kuppel, refreshKey, onEdit, limit = 20, compact = false }: Props) { const [entries, setEntries] = useState([]); const [loading, setLoading] = useState(true); const [deleteId, setDeleteId] = useState(null); const [error, setError] = useState(''); useEffect(() => { setLoading(true); fetch(`/api/logbuch?kuppel=${encodeURIComponent(kuppel)}&limit=${limit}`) .then((r) => { if (!r.ok) throw new Error(); return r.json(); }) .then((data) => { setEntries(data); setLoading(false); }) .catch(() => { setError('Fehler beim Laden.'); setLoading(false); }); }, [kuppel, refreshKey]); async function confirmDelete(id: number) { try { const res = await fetch(`/api/logbuch/${id}`, { method: 'DELETE' }); if (!res.ok) throw new Error(); setEntries((prev) => prev.filter((e) => e.ID !== id)); } catch { setError('Fehler beim Löschen.'); } finally { setDeleteId(null); } } if (loading) return
Lade Einträge...
; if (error) return
{error}
; if (entries.length === 0) return
Keine Einträge vorhanden.
; return (
{!compact && } {!compact && } {entries.map((e) => ( {!compact && } {!compact && ( )} ))}
Beginn Ende Art Besucher BEOsObjekteBemerkungenAktionen
{formatDateTime(e.Beginn)} {formatDateTime(e.Ende)} {e.ArtFuehrung} {e.Besucher} {e.BEOs || '—'}{e.Objekte || '—'} {e.Bemerkungen || ''}
{deleteId !== null && (

Eintrag löschen?

Dieser Eintrag wird unwiderruflich gelöscht.

)}
); }