import Link from 'next/link'; import { apiFetch } from '../../_lib/api'; interface MessageDetail { id: string; tenantId: string; platform: string; platformMsgId: string; sourceGroupId: string; sourceGroup: { id: string; name: string; platformId: string; claimStatus: string; isActive: boolean; createdAt: string; } | null; senderJid: string; senderName: string | null; senderTowerUser: { id: string; jid: string; phoneHash: string; displayName: string | null; createdAt: string; } | null; content: string; mediaUrl: string | null; tags: string[]; status: string; createdAt: string; updatedAt: string; approval: { id: string; adminId: string; decision: string; notes: string | null; decidedAt: string; } | null; } function Field({ label, children }: { label: string; children: React.ReactNode }) { return (
{label} {children ?? }
); } export default async function MessageDetailPage({ params, }: { params: Promise<{ id: string }>; }) { const { id } = await params; let msg: MessageDetail | null = null; let error: string | null = null; try { const res = await apiFetch(`/admin/messages/${id}`); if (res.ok) { msg = await res.json(); } else { error = `API returned ${res.status}`; } } catch { error = 'Failed to load message'; } if (error || !msg) { return (
← Back to search

{error ?? 'Message not found'}

); } return (
← Back to search

Message Detail

{msg.content}

{msg.tags.map((tag) => ( {tag} ))}

Metadata

{msg.status} {msg.id} {msg.platform} {msg.platformMsgId} {new Date(msg.createdAt).toLocaleString()} {new Date(msg.updatedAt).toLocaleString()}

Sender

{msg.senderJid} {msg.senderName} {msg.senderTowerUser && ( <> {msg.senderTowerUser.displayName} {msg.senderTowerUser.phoneHash} {msg.senderTowerUser.id} )}

Source Group

{msg.sourceGroup ? ( <> {msg.sourceGroup.name} {msg.sourceGroup.platformId} {msg.sourceGroup.claimStatus} {msg.sourceGroup.isActive ? 'Yes' : 'No'} ) : ( (deleted) )}
{msg.approval && (

Approval

{msg.approval.decision} {msg.approval.adminId} {new Date(msg.approval.decidedAt).toLocaleString()} {msg.approval.notes}
)} {msg.mediaUrl && (

Media

{msg.mediaUrl}
)}
); }