courrier preview

This commit is contained in:
alma 2025-04-30 22:59:04 +02:00
parent 5ea88d2d6c
commit 5adf1a9a62

View File

@ -8,7 +8,11 @@ import { Button } from '@/components/ui/button';
import { Email } from '@/hooks/use-courrier';
interface EmailDetailViewProps {
email: Email & { html?: string; text?: string };
email: Email & {
html?: string;
text?: string;
starred?: boolean; // Add starred property to interface
};
onBack: () => void;
onReply: () => void;
onReplyAll: () => void;
@ -26,8 +30,9 @@ export default function EmailDetailView({
}: EmailDetailViewProps) {
// Format date for display
const formatDate = (dateString: string) => {
const date = new Date(dateString);
const formatDate = (dateString: string | Date) => {
// Convert to Date object if string
const date = typeof dateString === 'string' ? new Date(dateString) : dateString;
const now = new Date();
if (date.toDateString() === now.toDateString()) {
@ -40,8 +45,43 @@ export default function EmailDetailView({
// Render email content based on the email body
const renderEmailContent = () => {
try {
// Use fallback for content, html, or text
return <div dangerouslySetInnerHTML={{ __html: email.content || email.html || email.text || '' }} />;
console.log('EmailDetailView renderEmailContent', {
hasContent: !!email.content,
contentType: typeof email.content,
hasHtml: !!email.html,
hasText: !!email.text
});
// Determine what content to use and how to handle it
let contentToUse = '';
if (email.content) {
// If content is a string, use it directly
if (typeof email.content === 'string') {
contentToUse = email.content;
}
// If content is an object with html/text properties
else if (typeof email.content === 'object') {
contentToUse = email.content.html || email.content.text || '';
}
}
// Fall back to html or text properties if content is not available
else if (email.html) {
contentToUse = email.html;
}
else if (email.text) {
// Convert plain text to HTML with line breaks
contentToUse = email.text
.replace(/&/g, '&amp;')
.replace(/</g, '&lt;')
.replace(/>/g, '&gt;')
.replace(/\n/g, '<br>');
}
// Return content or fallback message
return contentToUse ?
<div dangerouslySetInnerHTML={{ __html: contentToUse }} /> :
<div className="text-gray-500">No content available</div>;
} catch (e) {
console.error('Error rendering email:', e);
return <div className="text-gray-500">Failed to render email content</div>;