'use client';
import DOMPurify from 'dompurify';
/**
* Client-side utilities for formatting email content
* This file contains functions for formatting email content in the browser
* without any server dependencies.
*/
export interface EmailAddress {
address: string;
name?: string;
}
export interface FormattedEmail {
subject: string;
to?: EmailAddress[];
cc?: EmailAddress[];
bcc?: EmailAddress[];
body: string;
}
export interface EmailMessageForFormatting {
subject?: string;
from?: EmailAddress | EmailAddress[];
to?: EmailAddress | EmailAddress[];
date?: Date | string;
html?: string;
text?: string;
cc?: EmailAddress | EmailAddress[];
bcc?: EmailAddress | EmailAddress[];
}
/**
* Format an email for replying or forwarding
* Client-side friendly version that doesn't depend on server modules
*/
export function formatEmailForReply(
originalEmail: EmailMessageForFormatting,
type: 'reply' | 'replyAll' | 'forward' = 'reply'
): FormattedEmail {
// Format the subject with Re: or Fwd: prefix
const subject = formatSubject(originalEmail.subject || '', type);
// Initialize recipients based on reply type
let to: EmailAddress[] = [];
let cc: EmailAddress[] = [];
if (type === 'reply' && originalEmail.from) {
to = Array.isArray(originalEmail.from) ? originalEmail.from : [originalEmail.from];
} else if (type === 'replyAll') {
// To: original sender
if (originalEmail.from) {
to = Array.isArray(originalEmail.from) ? originalEmail.from : [originalEmail.from];
}
// CC: all other recipients
if (originalEmail.to) {
cc = Array.isArray(originalEmail.to) ? originalEmail.to : [originalEmail.to];
}
if (originalEmail.cc) {
const existingCc = Array.isArray(originalEmail.cc) ? originalEmail.cc : [originalEmail.cc];
cc = [...cc, ...existingCc];
}
// Remove duplicates and self from CC (would need user's email here)
// This is simplified - in a real app you'd filter out the current user
cc = cc.filter((value, index, self) =>
index === self.findIndex((t) => t.address === value.address)
);
}
// Create the quoted content with header
const quoteHeader = createQuoteHeader(originalEmail);
// Get the original content, preferring HTML over plain text
let originalContent = '';
if (originalEmail.html) {
// Sanitize any potentially unsafe HTML
originalContent = DOMPurify.sanitize(originalEmail.html);
} else if (originalEmail.text) {
// Convert text to HTML by replacing newlines with br tags
originalContent = originalEmail.text.replace(/\n/g, '
');
}
// Combine the header with the original content
const body = `
${quoteHeader}${originalContent || 'No content available'}