"use client"; import { useState, useEffect } from "react"; import { getRecentWebhookActivity } from "@/actions/wholesale"; type WebhookLogEntry = { id: string; event_type: string; order_id: string | null; status: string; attempts: number; created_at: string; response: string | null; }; type Props = { brandId: string; }; const EVENT_LABELS: Record = { order_created: "Order Created", order_fulfilled: "Order Fulfilled", deposit_recorded: "Deposit Recorded", order_paid: "Order Paid", }; const STATUS_STYLES: Record = { sent: "bg-green-900/40 text-green-400", success: "bg-green-900/40 text-green-400", failed: "bg-red-900/40 text-red-400", pending: "bg-yellow-100 text-yellow-700", retrying: "bg-yellow-100 text-yellow-700", }; export default function WebhookLogsSection({ brandId }: Props) { const [logs, setLogs] = useState([]); const [loading, setLoading] = useState(true); const [expanded, setExpanded] = useState(false); useEffect(() => { getRecentWebhookActivity(brandId, 25).then((entries) => { setLogs(entries); setLoading(false); }); }, [brandId]); if (loading) { return (
Loading webhook logs…
); } if (logs.length === 0) { return (
No webhook events yet. Deposits, order updates, and fulfillments will appear here.
); } return (

Wholesale Webhook Events ({logs.length})

{(expanded ? logs : logs.slice(0, 5)).map((entry) => (
{EVENT_LABELS[entry.event_type] ?? entry.event_type} {entry.status} {entry.attempts > 1 && ( {entry.attempts} attempts )}
{entry.response && (

{entry.response}

)}

{new Date(entry.created_at).toLocaleString()}

))}
{!expanded && logs.length > 5 && ( )}
); }