import { useEffect, useState } from 'react'; import { listMessages, deleteMessage, ApiError } from '../../../lib/api'; import type { Message } from '../../../lib/types'; import { confirmDialog, notify } from '../../../lib/confirm'; export default function Inbox() { const [messages, setMessages] = useState(null); const [error, setError] = useState(''); const [expandedId, setExpandedId] = useState(null); useEffect(() => { load(); }, []); async function load() { try { const data = await listMessages(); setMessages(data); setError(''); } catch (e) { setError(e instanceof ApiError ? e.message : 'Failed to load messages.'); setMessages([]); } } async function remove(id: string) { const ok = await confirmDialog({ title: 'Delete this message?', message: 'This cannot be undone.', confirmLabel: 'Delete', }); if (!ok) return; try { await deleteMessage(id); setMessages(prev => (prev ?? []).filter(m => m.id !== id)); } catch (e) { notify(e instanceof ApiError ? e.message : 'Failed to delete.'); } } function formatDate(ms: number): string { const d = new Date(ms); return d.toLocaleString(undefined, { year: 'numeric', month: 'short', day: 'numeric', hour: '2-digit', minute: '2-digit', }); } if (messages === null) { return

Loading…

; } if (error) { return (
{error}
); } if (messages.length === 0) { return (
Inbox empty

No messages yet.

When visitors send a note from the contact page, it'll appear here.

); } return ( ); }