panel 2 courier api
This commit is contained in:
parent
dacd083bd8
commit
770e631da4
@ -113,33 +113,30 @@ function EmailContent({ email }: { email: Email }) {
|
|||||||
|
|
||||||
setIsLoading(true);
|
setIsLoading(true);
|
||||||
try {
|
try {
|
||||||
// Debug the email object
|
// First try to directly render any available content
|
||||||
console.log('EmailContent received email:', {
|
if (email.content && mounted) {
|
||||||
id: email.id,
|
setContent(
|
||||||
subject: email.subject,
|
<div
|
||||||
hasContent: !!email.content,
|
className="email-content prose prose-sm max-w-none dark:prose-invert"
|
||||||
contentLength: email.content ? email.content.length : 0,
|
dangerouslySetInnerHTML={{ __html: DOMPurify.sanitize(email.content) }}
|
||||||
hasTextContent: !!email.textContent,
|
/>
|
||||||
hasRawContent: !!email.rawContent,
|
);
|
||||||
hasBody: !!email.body
|
setIsLoading(false);
|
||||||
});
|
|
||||||
|
|
||||||
// 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);
|
|
||||||
}
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Check if we have any content to parse
|
if (email.textContent && mounted) {
|
||||||
if (!email.content && !email.body && !email.rawContent) {
|
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) {
|
if (mounted) {
|
||||||
setContent(<div className="text-gray-500">No content available</div>);
|
setContent(<div className="text-gray-500">No content available</div>);
|
||||||
setIsLoading(false);
|
setIsLoading(false);
|
||||||
@ -147,7 +144,6 @@ function EmailContent({ email }: { email: Email }) {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Use the best available content source
|
|
||||||
const formattedEmail = (email.content || email.body || email.rawContent || '').trim();
|
const formattedEmail = (email.content || email.body || email.rawContent || '').trim();
|
||||||
if (!formattedEmail) {
|
if (!formattedEmail) {
|
||||||
if (mounted) {
|
if (mounted) {
|
||||||
@ -157,15 +153,8 @@ function EmailContent({ email }: { email: Email }) {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Debug the formatted email
|
|
||||||
console.log('Attempting to decode email content, length:', formattedEmail.length);
|
|
||||||
|
|
||||||
try {
|
try {
|
||||||
const parsedEmail = await decodeEmail(formattedEmail);
|
const parsedEmail = await decodeEmail(formattedEmail);
|
||||||
console.log('Parsed email result:', {
|
|
||||||
hasHtml: !!parsedEmail.html,
|
|
||||||
hasText: !!parsedEmail.text,
|
|
||||||
});
|
|
||||||
|
|
||||||
if (mounted) {
|
if (mounted) {
|
||||||
if (parsedEmail.html) {
|
if (parsedEmail.html) {
|
||||||
@ -248,35 +237,6 @@ function EmailContent({ email }: { email: Email }) {
|
|||||||
function renderEmailContent(email: Email) {
|
function renderEmailContent(email: Email) {
|
||||||
if (!email) return <div className="text-gray-500">No email selected</div>;
|
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} />;
|
return <EmailContent email={email} />;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1142,50 +1102,14 @@ export default function CourrierPage() {
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
{/* Debug info */}
|
{/* Email status message */}
|
||||||
<div className="mb-4 p-3 bg-yellow-50 text-xs border border-yellow-200 rounded">
|
<p className="text-xs text-blue-600 mb-4">
|
||||||
<strong>Debug info:</strong>
|
Viewing message from: {selectedEmail.from} • {new Date(selectedEmail.date).toLocaleString()}
|
||||||
<pre className="mt-1 overflow-auto">
|
</p>
|
||||||
{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>
|
|
||||||
|
|
||||||
<div className="prose max-w-none">
|
<div className="prose max-w-none">
|
||||||
{/* Server-parsed HTML content */}
|
{/* Go back to using the original renderEmailContent function */}
|
||||||
{selectedEmail.content && (
|
{renderEmailContent(selectedEmail)}
|
||||||
<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>
|
|
||||||
)}
|
|
||||||
</div>
|
</div>
|
||||||
</ScrollArea>
|
</ScrollArea>
|
||||||
</>
|
</>
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user