import Link from "next/link"; import { ReactNode } from "react"; import { Badge, SectionCard } from "@/components/ui"; import { getLocale, getTranslator } from "@/lib/i18n"; import type { CampaignRecord, ContactRecord, ConversationRecord, DashboardStats, TenantRecord, UserRecord } from "@/lib/demo-data"; import type { ConversationMessage, ConversationNote, ConversationSummary, InboxConversationDetail } from "@/lib/inbox-ops"; export async function DashboardPlaceholder({ stats, priorityQueue }: { stats: DashboardStats[]; priorityQueue: Array; }) { const t = getTranslator(await getLocale()); return (
{stats.map((item) => (
{item.value} {item.delta}
))}
{t("placeholders", "operation_chart_note")}
{priorityQueue.map((item) => (

{item.name}

{item.status}

{"snippet" in item ? item.snippet : "plan" in item ? `${item.plan} • ${item.channels}` : `${item.audience} • ${item.channel}`}

{"time" in item ? `${item.time} • ${item.assignee}` : "seats" in item ? item.seats : item.scheduledAt}

))}
); } export async function InboxPlaceholder({ conversations, selectedConversation, defaultPath, agents = [], filter = "all", role = "admin", canSelfAssign = false, assignConversation, updateConversationStatus, replyToConversation, addConversationNote, setConversationTags }: { conversations: ConversationSummary[]; selectedConversation: InboxConversationDetail | null; defaultPath: string; agents?: Array<{ id: string; name: string }>; filter?: "all" | "unassigned" | "resolved" | "open" | "pending"; role?: "admin" | "agent"; canSelfAssign?: boolean; assignConversation?: (formData: FormData) => Promise; updateConversationStatus?: (formData: FormData) => Promise; replyToConversation?: (formData: FormData) => Promise; addConversationNote?: (formData: FormData) => Promise; setConversationTags?: (formData: FormData) => Promise; }) { const t = getTranslator(await getLocale()); const currentPath = defaultPath || "/inbox"; const selectedId = selectedConversation?.id; const statusTone = (status: string) => { if (status === "Resolved") { return "success"; } if (status === "Pending") { return "warning"; } return "default"; }; const statusValue = (status: string) => { switch (status) { case "Open": return "OPEN"; case "Pending": return "PENDING"; case "Resolved": return "RESOLVED"; default: return "OPEN"; } }; const tagsValue = selectedConversation?.tagJson ? JSON.parse(selectedConversation.tagJson).filter((tag: string) => Boolean(tag.trim())).join(", ") : ""; return (
{conversations.map((item) => (

{item.name}

{item.time}

{item.snippet}

{item.assignee} {item.status}
))} {!conversations.length ?

{t("placeholders", "no_conversation_found")}

: null}
{!selectedConversation ? (

{t("placeholders", "select_to_reply")}

) : (

{selectedConversation.name} • {selectedConversation.phone}

{selectedConversation.channel}

{selectedConversation.assignee}

{localeStatus(t, "status", selectedConversation.status)}{" "} {selectedConversation.status}

{selectedConversation.messages.length === 0 ? t("placeholders", "no_messages") : null}
{selectedConversation.messages.map((message: ConversationMessage) => ( {message.body} ))}

{t("placeholders", "reply_label")}