53 lines
1.8 KiB
TypeScript
53 lines
1.8 KiB
TypeScript
import DOMPurify from 'dompurify';
|
|
|
|
export function formatEmailContent(email: any): string {
|
|
if (!email) {
|
|
console.log('formatEmailContent: No email provided');
|
|
return '';
|
|
}
|
|
|
|
try {
|
|
console.log('formatEmailContent: Raw email content:', {
|
|
content: email.content,
|
|
html: email.html,
|
|
text: email.text,
|
|
formattedContent: email.formattedContent
|
|
});
|
|
|
|
// Get the content in order of preference
|
|
let content = '';
|
|
|
|
if (email.content && typeof email.content === 'object') {
|
|
console.log('formatEmailContent: Using object content:', email.content);
|
|
content = email.content.html || email.content.text || '';
|
|
} else if (typeof email.content === 'string') {
|
|
console.log('formatEmailContent: Using direct string content');
|
|
content = email.content;
|
|
} else if (email.html) {
|
|
console.log('formatEmailContent: Using html content');
|
|
content = email.html;
|
|
} else if (email.text) {
|
|
console.log('formatEmailContent: Using text content');
|
|
content = email.text;
|
|
} else if (email.formattedContent) {
|
|
console.log('formatEmailContent: Using formattedContent');
|
|
content = email.formattedContent;
|
|
}
|
|
|
|
console.log('formatEmailContent: Content before sanitization:', content);
|
|
|
|
// Sanitize the content for display while preserving formatting
|
|
const sanitizedContent = DOMPurify.sanitize(content, {
|
|
ADD_TAGS: ['style', 'table', 'thead', 'tbody', 'tr', 'td', 'th'],
|
|
ADD_ATTR: ['class', 'style', 'dir', 'colspan', 'rowspan'],
|
|
ALLOW_DATA_ATTR: false
|
|
});
|
|
|
|
console.log('formatEmailContent: Final sanitized content:', sanitizedContent);
|
|
|
|
return sanitizedContent;
|
|
} catch (error) {
|
|
console.error('formatEmailContent: Error formatting email content:', error);
|
|
return '';
|
|
}
|
|
}
|