'use client'; import { useState, useEffect } from 'react'; import ComposeEmail from './ComposeEmail'; import { EmailMessage as NewEmailMessage } from '@/types/email'; import { EmailMessage as OldEmailMessage, formatReplyEmail as oldFormatReplyEmail, formatForwardedEmail as oldFormatForwardedEmail } from '@/lib/utils/email-formatter'; interface ComposeEmailAdapterProps { initialEmail?: NewEmailMessage | null; type?: 'new' | 'reply' | 'reply-all' | 'forward'; onClose: () => void; onSend: (emailData: { to: string; cc?: string; bcc?: string; subject: string; body: string; attachments?: Array<{ name: string; content: string; type: string; }>; }) => Promise; } /** * 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 }: ComposeEmailAdapterProps) { // Convert the new EmailMessage format to the old format const [adaptedEmail, setAdaptedEmail] = useState(null); useEffect(() => { if (!initialEmail) { setAdaptedEmail(null); return; } try { // Convert the new EmailMessage to the old format const oldFormat: OldEmailMessage = { id: initialEmail.id, messageId: initialEmail.messageId, subject: initialEmail.subject, from: initialEmail.from, to: initialEmail.to, cc: initialEmail.cc, bcc: initialEmail.bcc, date: initialEmail.date, // Convert new flags object to old format string array flags: initialEmail.flags ? { seen: initialEmail.flags.seen || false, flagged: initialEmail.flags.flagged || false, answered: initialEmail.flags.answered || false, deleted: initialEmail.flags.deleted || false, draft: initialEmail.flags.draft || false } : undefined, // Convert new content format to old format content: initialEmail.content.isHtml && initialEmail.content.html ? initialEmail.content.html : initialEmail.content.text, html: initialEmail.content.isHtml ? initialEmail.content.html : undefined, text: initialEmail.content.text, attachments: initialEmail.attachments.map(att => ({ filename: att.filename, contentType: att.contentType, content: att.content, size: att.size || 0 })) }; console.log('ComposeEmailAdapter: Converted new format to old format', oldFormat); setAdaptedEmail(oldFormat); } catch (error) { console.error('Error adapting email for ComposeEmail:', error); setAdaptedEmail(null); } }, [initialEmail]); // If still adapting, show loading if (initialEmail && !adaptedEmail) { return
Loading email...
; } // Pass the adapted email to the original ComposeEmail component return ( ); }