'use client'; import { useState, useEffect } from 'react'; import ComposeEmail from './ComposeEmail'; import { EmailMessage } from '@/types/email'; import { formatReplyEmail, formatForwardedEmail } from '@/lib/utils/email-utils'; interface ComposeEmailAdapterProps { initialEmail?: EmailMessage | null; type?: 'new' | 'reply' | 'reply-all' | 'forward'; onClose: () => void; onSend: (emailData: { to: string; cc?: string; bcc?: string; subject: string; body: string; fromAccount?: string; attachments?: Array<{ name: string; content: string; type: string; }>; }) => Promise; accounts?: Array<{ id: string; email: string; display_name?: string; }>; } /** * Adapter component that converts between the new EmailMessage format * and the format expected by the legacy ComposeEmail component */ export default function ComposeEmailAdapter({ initialEmail, type = 'new', onClose, onSend, accounts = [] }: ComposeEmailAdapterProps) { // Convert the new EmailMessage format to the old format const [adaptedEmail, setAdaptedEmail] = useState(null); useEffect(() => { if (!initialEmail) { setAdaptedEmail(null); return; } try { console.log('ComposeEmailAdapter: Processing email for', type, initialEmail); // For reply or forward, use the email formatting utilities if (type === 'reply' || type === 'reply-all') { const formatted = formatReplyEmail(initialEmail, type); console.log('ComposeEmailAdapter: Formatted reply', formatted); // Create an object suitable for the legacy ComposeEmail component const adapted = { id: initialEmail.id, subject: formatted.subject, to: formatted.to, cc: formatted.cc || '', content: formatted.content?.html || formatted.content?.text || '', html: formatted.content?.html, text: formatted.content?.text, attachments: initialEmail.attachments || [] }; setAdaptedEmail(adapted); } else if (type === 'forward') { const formatted = formatForwardedEmail(initialEmail); console.log('ComposeEmailAdapter: Formatted forward', formatted); // Create an object suitable for the legacy ComposeEmail component const adapted = { id: initialEmail.id, subject: formatted.subject, to: '', cc: '', content: formatted.content?.html || formatted.content?.text || '', html: formatted.content?.html, text: formatted.content?.text, attachments: initialEmail.attachments || [] }; setAdaptedEmail(adapted); } else { // For new emails, just create a minimal template setAdaptedEmail({ subject: '', to: '', cc: '', content: '', html: '', text: '', attachments: [] }); } } catch (error) { console.error('Error adapting email for ComposeEmail:', error); // Provide a fallback minimal email setAdaptedEmail({ subject: initialEmail?.subject || '', to: initialEmail?.from || '', cc: '', content: '', html: '', text: '', attachments: [] }); } }, [initialEmail, type]); // If still adapting, show loading if (initialEmail && !adaptedEmail) { return
Loading email...
; } // Pass the adapted email to the original ComposeEmail component return ( ); }