"use client"; import { generateInvoiceEmailTemplate } from "~/lib/email-templates"; import { getAppUrl } from "~/lib/app-url"; interface EmailPreviewProps { subject: string; fromEmail: string; toEmail: string; ccEmail?: string; bccEmail?: string; content: string; customMessage?: string; invoice?: { invoiceNumber: string; issueDate: Date; dueDate: Date; taxRate: number; status?: string; totalAmount?: number; currency?: string | null; client?: { name: string; email: string | null; }; business?: { name: string; email: string | null; }; items?: Array<{ id: string; date?: Date; description?: string; hours: number; rate: number; amount?: number; }>; }; className?: string; } export function EmailPreview({ subject, fromEmail, toEmail, ccEmail, bccEmail, content, customMessage, invoice, className, }: EmailPreviewProps) { // Calculate total from invoice items if available const calculateTotal = () => { if (!invoice?.items) return 0; const subtotal = invoice.items.reduce( (sum, item) => sum + item.hours * item.rate, 0, ); const taxAmount = subtotal * (invoice.taxRate / 100); return subtotal + taxAmount; }; // Generate the branded email template if invoice is provided const emailTemplate = invoice ? generateInvoiceEmailTemplate({ invoice: { invoiceNumber: invoice.invoiceNumber, issueDate: invoice.issueDate, dueDate: invoice.dueDate, status: invoice.status ?? "draft", totalAmount: invoice.totalAmount ?? calculateTotal(), taxRate: invoice.taxRate, currency: invoice.currency, client: { name: invoice.client?.name ?? "Client", email: invoice.client?.email ?? null, }, business: invoice.business ?? null, items: invoice.items?.map((item) => ({ date: item.date ?? new Date(), description: item.description ?? "Service", hours: item.hours, rate: item.rate, amount: item.amount ?? item.hours * item.rate, })) ?? [], }, customContent: content, customMessage: customMessage, userName: invoice.business?.name ?? "Your Business", userEmail: fromEmail, baseUrl: getAppUrl(), }) : null; return (
{/* Email Headers */}
From: {fromEmail}
To: {toEmail}
Subject: {subject || "No subject"}
{(ccEmail ?? bccEmail) && (
{ccEmail && (
CC: {ccEmail}
)} {bccEmail && (
BCC: {bccEmail}
)}
)}
{/* Email Content */} {emailTemplate ? (