panel 2 courier api

This commit is contained in:
alma 2025-04-25 16:48:30 +02:00
parent dacd083bd8
commit 770e631da4

View File

@ -113,33 +113,30 @@ function EmailContent({ email }: { email: Email }) {
setIsLoading(true);
try {
// Debug the email object
console.log('EmailContent received email:', {
id: email.id,
subject: email.subject,
hasContent: !!email.content,
contentLength: email.content ? email.content.length : 0,
hasTextContent: !!email.textContent,
hasRawContent: !!email.rawContent,
hasBody: !!email.body
});
// First check if we have pre-parsed content
if (email.textContent) {
if (mounted) {
setContent(
<div className="email-content whitespace-pre-wrap">
{email.textContent}
</div>
);
setIsLoading(false);
setError(null);
}
// First try to directly render any available content
if (email.content && mounted) {
setContent(
<div
className="email-content prose prose-sm max-w-none dark:prose-invert"
dangerouslySetInnerHTML={{ __html: DOMPurify.sanitize(email.content) }}
/>
);
setIsLoading(false);
return;
}
// Check if we have any content to parse
if (!email.content && !email.body && !email.rawContent) {
if (email.textContent && mounted) {
setContent(
<div className="email-content whitespace-pre-wrap">
{email.textContent}
</div>
);
setIsLoading(false);
return;
}
// If we have nothing to display, try the client-side decoding
if (!email.content && !email.textContent && !email.body && !email.rawContent) {
if (mounted) {
setContent(<div className="text-gray-500">No content available</div>);
setIsLoading(false);
@ -147,7 +144,6 @@ function EmailContent({ email }: { email: Email }) {
return;
}
// Use the best available content source
const formattedEmail = (email.content || email.body || email.rawContent || '').trim();
if (!formattedEmail) {
if (mounted) {
@ -157,15 +153,8 @@ function EmailContent({ email }: { email: Email }) {
return;
}
// Debug the formatted email
console.log('Attempting to decode email content, length:', formattedEmail.length);
try {
const parsedEmail = await decodeEmail(formattedEmail);
console.log('Parsed email result:', {
hasHtml: !!parsedEmail.html,
hasText: !!parsedEmail.text,
});
if (mounted) {
if (parsedEmail.html) {
@ -248,35 +237,6 @@ function EmailContent({ email }: { email: Email }) {
function renderEmailContent(email: Email) {
if (!email) return <div className="text-gray-500">No email selected</div>;
console.log('Rendering email content:', {
id: email.id,
hasContent: !!email.content,
contentStartsWith: email.content?.substring(0, 30),
hasHtml: email.content?.includes('<html') || email.content?.includes('<body'),
hasTextContent: !!email.textContent,
hasRawContent: !!email.rawContent
});
// Some emails might have content directly in HTML format
if (email.content && (email.content.includes('<html') || email.content.includes('<body'))) {
return (
<div
className="email-content prose prose-sm max-w-none dark:prose-invert"
dangerouslySetInnerHTML={{ __html: DOMPurify.sanitize(email.content) }}
/>
);
}
// If we have textContent, display it directly
if (email.textContent) {
return (
<div className="email-content whitespace-pre-wrap">
{email.textContent}
</div>
);
}
// Use EmailContent component for more complex parsing
return <EmailContent email={email} />;
}
@ -1142,50 +1102,14 @@ export default function CourrierPage() {
</div>
</div>
{/* Debug info */}
<div className="mb-4 p-3 bg-yellow-50 text-xs border border-yellow-200 rounded">
<strong>Debug info:</strong>
<pre className="mt-1 overflow-auto">
{JSON.stringify({
id: selectedEmail.id,
hasContent: !!selectedEmail.content,
contentLen: selectedEmail.content?.length || 0,
hasTextContent: !!selectedEmail.textContent,
textContentLen: selectedEmail.textContent?.length || 0,
hasRawContent: !!selectedEmail.rawContent,
rawContentLen: selectedEmail.rawContent?.length || 0,
}, null, 2)}
</pre>
</div>
{/* Email status message */}
<p className="text-xs text-blue-600 mb-4">
Viewing message from: {selectedEmail.from} {new Date(selectedEmail.date).toLocaleString()}
</p>
<div className="prose max-w-none">
{/* Server-parsed HTML content */}
{selectedEmail.content && (
<div className="mt-2">
<div
className="email-content prose prose-sm max-w-none dark:prose-invert"
dangerouslySetInnerHTML={{ __html: DOMPurify.sanitize(selectedEmail.content) }}
/>
</div>
)}
{/* Direct output fallback */}
{!selectedEmail.content && selectedEmail.textContent && (
<div className="mt-6 p-4 border border-blue-200 rounded bg-blue-50">
<h3 className="text-sm font-medium mb-2">Direct Text Content:</h3>
<div className="whitespace-pre-wrap text-sm">{selectedEmail.textContent}</div>
</div>
)}
{selectedEmail.rawContent && !(selectedEmail.content || selectedEmail.textContent) && (
<div className="mt-6 p-4 border border-red-200 rounded bg-red-50">
<h3 className="text-sm font-medium mb-2">Raw Email Content:</h3>
<div className="whitespace-pre-wrap text-xs max-h-96 overflow-auto">
{selectedEmail.rawContent.substring(0, 2000)}
{selectedEmail.rawContent.length > 2000 && '... (truncated)'}
</div>
</div>
)}
{/* Go back to using the original renderEmailContent function */}
{renderEmailContent(selectedEmail)}
</div>
</ScrollArea>
</>