"use client"; import { useCallback, useEffect, useState } from "react"; import { api } from "@/lib/api"; import { formatDate } from "@/lib/utils"; import { Eye, EyeOff, Trash2 } from "lucide-react"; type Row = { id: string; paymentHash: string; content: string; authorName: string; pubkey: string | null; satsPaid: number; status: string; likeCount: number; createdAt: string; }; export default function AdminBoardMessagesPage() { const [rows, setRows] = useState([]); const [loading, setLoading] = useState(true); const [error, setError] = useState(""); const load = useCallback(async () => { try { const data = await api.getAdminBoardMessages(); setRows(data); setError(""); } catch (e: unknown) { setError(e instanceof Error ? e.message : "Failed to load"); } finally { setLoading(false); } }, []); useEffect(() => { load(); }, [load]); const toggleHide = async (id: string) => { try { await api.hideBoardMessage(id); await load(); } catch (e: unknown) { setError(e instanceof Error ? e.message : "Hide failed"); } }; const softDelete = async (id: string) => { if (!confirm("Mark this message as deleted? It will disappear from the public board.")) return; try { await api.deleteBoardMessage(id); await load(); } catch (e: unknown) { setError(e instanceof Error ? e.message : "Delete failed"); } }; if (loading) { return (

Loading board messages…

); } return (

Message board

Lightning-paid public messages. Hide toggles visibility on the site; delete marks a row as removed without dropping history.

{error &&

{error}

}
{rows.map((r) => ( ))}
Content Author Sats Status Date Actions

{r.content}

{r.authorName} {r.satsPaid} {r.status} {formatDate(r.createdAt)}
{rows.length === 0 && (

No board messages yet.

)}
); }