panel 2 courier api
This commit is contained in:
parent
dacd083bd8
commit
770e631da4
@ -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>
|
||||
</>
|
||||
|
||||
Loading…
Reference in New Issue
Block a user