'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, short = false): string { if (!dt) return ''; const d = new Date(dt); if (isNaN(d.getTime())) return dt; if (short) { const pad = (n: number) => String(n).padStart(2, '0'); return `${pad(d.getDate())}.${pad(d.getMonth() + 1)}. ${pad(d.getHours())}:${pad(d.getMinutes())}`; } 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, limit]); 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.
; const cell = compact ? 'px-1.5 py-1 border border-gray-200 text-xs' : 'px-3 py-2 border border-gray-200'; const head = compact ? 'px-1.5 py-1 border border-gray-300 text-xs font-semibold' : 'px-3 py-2 border border-gray-300'; return (
{!compact && } {entries.map((e) => ( {!compact && ( )} ))}
Beginn Ende Art Bes. BEOs ObjekteBemerkungenAktionen
{formatDateTime(e.Beginn, compact)} {formatDateTime(e.Ende, compact)} {e.ArtFuehrung} {e.Besucher || ''} {e.BEOs || '—'} {e.Objekte || '—'}{e.Bemerkungen || ''}
{deleteId !== null && (

Eintrag löschen?

Dieser Eintrag wird unwiderruflich gelöscht.

)}
); }