import { getConversations } from "@/lib/conversations-queries"; import { relativeTime } from "@/lib/dates"; import Link from "next/link"; const MAX_ROWS = 6; /** * I messaggi che aspettano una risposta, in cima alla dashboard. * * Prima era un riquadro stretto in fondo alla terza colonna: c'era, ma sotto la * piega. Un messaggio non letto è la cosa più urgente della giornata e va vista * per prima — per questo occupa tutta la larghezza, e per questo sparisce del * tutto quando non c'è niente da leggere invece di lasciare a video una fascia * vuota che si impara a saltare. * * Si legge qui, si risponde in /admin/conversazioni. */ export async function InboxBand() { const conversations = await getConversations(); const unread = conversations.filter((c) => c.unread); if (unread.length === 0) return null; const visible = unread.slice(0, MAX_ROWS); const totalMessages = unread.reduce((sum, c) => sum + c.unreadCount, 0); return (

Da rispondere

{totalMessages} {totalMessages === 1 ? "messaggio" : "messaggi"} ·{" "} {unread.length} {unread.length === 1 ? "cliente" : "clienti"}
Apri conversazioni →
{visible.map((conv) => (

{conv.brand_name}

{/* `unread` implica almeno un messaggio: il null non capita, ma il tipo lo ammette da quando la lista include anche i clienti con cui non si è ancora scritto. */} {conv.lastMessageAt ? relativeTime(conv.lastMessageAt) : ""} {conv.unreadCount > 1 && ( {conv.unreadCount} nuovi )}

{conv.lastMessage}

{conv.lastEntityLabel}

Rispondi → ))}
{unread.length > MAX_ROWS && ( Altri {unread.length - MAX_ROWS} clienti in attesa )}
); }