import { useT } from "@agent-native/core/client/i18n"; import { postNavigate, isInAgentEmbed, } from "@agent-native/core/client/navigation"; import type { EmailMessage } from "@shared/types"; import { IconExternalLink } from "@tabler/icons-react"; import { useMemo } from "react"; import { useSearchParams } from "react-router"; import { Button } from "@/components/ui/button"; import { Skeleton } from "@/components/ui/skeleton"; import { useThreadMessages } from "@/hooks/use-emails"; import messages from "@/i18n/en-US"; import { sanitizeHtml } from "@/lib/sanitize-html"; import { formatEmailDate, formatEmailDateFull, cn } from "@/lib/utils"; export function meta() { return [{ title: messages.mail.routeTitles.emailThread }]; } // ─── Message Card ──────────────────────────────────────────────────────────── function MessageCard({ message }: { message: EmailMessage }) { const fromName = message.from.name || message.from.email; const toList = message.to.map((a) => a.name || a.email).join(", "); const safeHtml = useMemo( () => (message.bodyHtml ? sanitizeHtml(message.bodyHtml) : null), [message.bodyHtml], ); return (
{fromName}
{toList && (
To: {toList}
)} {safeHtml ? (
) : (
          {message.body}
        
)}
); } // ─── Error State ───────────────────────────────────────────────────────────── function ErrorState({ message }: { message: string }) { const t = useT(); return (
{t("mail.routeTitles.unableToLoadThread")}
{message}
); } // ─── Loading Skeleton ───────────────────────────────────────────────────────── function LoadingSkeleton() { return (
{[1, 2].map((i) => (
))}
); } // ─── Route ──────────────────────────────────────────────────────────────────── export default function EmailEmbedRoute() { const t = useT(); const [params] = useSearchParams(); const threadId = params.get("threadId"); const view = params.get("view") ?? "inbox"; const inEmbed = isInAgentEmbed(); const { data: messages, isLoading } = useThreadMessages( threadId ?? undefined, ); if (!threadId) { return ; } const subject = messages && messages.length > 0 ? messages[0].subject : undefined; return (
{/* Header bar */}
{subject ? (

{subject}

) : isLoading ? ( ) : (

{t("mail.routeTitles.emailThread")}

)}
{inEmbed && ( )}
{/* Thread content */}
{isLoading && !messages ? ( ) : !messages || messages.length === 0 ? ( ) : (
{messages.map((msg) => ( ))}
)}
); }