From 3aae79e76b68ef0ce3ee565be9f15d4a567fe7a8 Mon Sep 17 00:00:00 2001 From: alma Date: Fri, 25 Apr 2025 20:25:43 +0200 Subject: [PATCH] panel 2 courier api restore --- app/courrier/page.tsx | 262 +++++++++++++++++++++++++++++++++++------- 1 file changed, 220 insertions(+), 42 deletions(-) diff --git a/app/courrier/page.tsx b/app/courrier/page.tsx index dacac128..506aa88f 100644 --- a/app/courrier/page.tsx +++ b/app/courrier/page.tsx @@ -625,23 +625,112 @@ export default function CourrierPage() { // Process emails and sort by date const processedEmails = (data.emails || []) - .map((email: any) => ({ - id: email.id, - accountId: 1, - from: email.from || '', - fromName: email.fromName || email.from?.split('@')[0] || '', - to: email.to || '', - subject: email.subject || '(No subject)', - content: email.preview || '', - date: email.date || new Date().toISOString(), - read: email.read || false, - starred: email.starred || false, - folder: email.folder || currentView, - cc: email.cc, - bcc: email.bcc, - flags: email.flags || [], - hasAttachments: email.hasAttachments || false - })) + .map((email: any) => { + // Add proper handling for from field which might be an array or object + let fromText = ''; + let fromName = ''; + let toText = ''; + let ccText = ''; + let bccText = ''; + + // Handle 'from' field + if (email.from) { + if (Array.isArray(email.from)) { + if (email.from.length > 0) { + if (typeof email.from[0] === 'object') { + fromText = email.from[0].address || ''; + fromName = email.from[0].name || email.from[0].address?.split('@')[0] || ''; + } else { + fromText = email.from[0] || ''; + fromName = fromText.split('@')[0] || ''; + } + } + } + else if (typeof email.from === 'object') { + fromText = email.from.address || ''; + fromName = email.from.name || email.from.address?.split('@')[0] || ''; + } + else if (typeof email.from === 'string') { + fromText = email.from; + fromName = email.fromName || email.from.split('@')[0] || ''; + } + } + + // Handle 'to' field + if (email.to) { + if (Array.isArray(email.to)) { + if (email.to.length > 0) { + if (typeof email.to[0] === 'object') { + toText = email.to.map((t: any) => t.address || '').join(', '); + } else { + toText = email.to.join(', '); + } + } + } + else if (typeof email.to === 'object') { + toText = email.to.address || ''; + } + else if (typeof email.to === 'string') { + toText = email.to; + } + } + + // Handle 'cc' field + if (email.cc) { + if (Array.isArray(email.cc)) { + if (email.cc.length > 0) { + if (typeof email.cc[0] === 'object') { + ccText = email.cc.map((c: any) => c.address || '').join(', '); + } else { + ccText = email.cc.join(', '); + } + } + } + else if (typeof email.cc === 'object') { + ccText = email.cc.address || ''; + } + else if (typeof email.cc === 'string') { + ccText = email.cc; + } + } + + // Handle 'bcc' field + if (email.bcc) { + if (Array.isArray(email.bcc)) { + if (email.bcc.length > 0) { + if (typeof email.bcc[0] === 'object') { + bccText = email.bcc.map((b: any) => b.address || '').join(', '); + } else { + bccText = email.bcc.join(', '); + } + } + } + else if (typeof email.bcc === 'object') { + bccText = email.bcc.address || ''; + } + else if (typeof email.bcc === 'string') { + bccText = email.bcc; + } + } + + return { + id: email.id, + accountId: 1, + from: fromText, + fromName: fromName, + to: toText, + subject: email.subject || '(No subject)', + content: email.content || '', + date: email.date || new Date().toISOString(), + read: email.read || false, + starred: email.starred || false, + folder: email.folder || currentView, + cc: ccText, + bcc: bccText, + flags: email.flags || [], + hasAttachments: email.hasAttachments || false + }; + }) .sort((a: Email, b: Email) => new Date(b.date).getTime() - new Date(a.date).getTime()); // Set emails @@ -691,7 +780,7 @@ export default function CourrierPage() { return account ? account.color : 'bg-gray-500'; }; - // Update handleEmailSelect to use the full content that's already in the emails data + // Update handleEmailSelect to handle the from field correctly const handleEmailSelect = async (emailId: string) => { try { setContentLoading(true); @@ -1105,15 +1194,15 @@ export default function CourrierPage() {
- {selectedEmail.fromName?.charAt(0) || selectedEmail.from.charAt(0)} + {selectedEmail.fromName?.charAt(0) || selectedEmail.from?.charAt(0) || '?'}

- {selectedEmail.fromName} <{selectedEmail.from}> + {selectedEmail.fromName || 'Unknown'} {selectedEmail.from && <{selectedEmail.from}>}

- to {selectedEmail.to} + to {selectedEmail.to || 'No recipients'}

{selectedEmail.cc && (

@@ -1143,7 +1232,7 @@ export default function CourrierPage() {

); - // Update the email list item to match header checkbox alignment + // Update the email list item to safely display the fromName const renderEmailListItem = (email: Email) => (
- {email.fromName || email.from} + {email.fromName || email.from || 'Unknown'} {!email.read && ( @@ -1230,8 +1319,8 @@ export default function CourrierPage() { read: email.read || false, starred: email.starred || false, folder: email.folder || newMailbox, - cc: email.cc, - bcc: email.bcc, + cc: email.cc || '', + bcc: email.bcc || '', flags: email.flags || [], raw: email.body || '' })); @@ -1539,23 +1628,112 @@ export default function CourrierPage() { // Process and sort emails const processedEmails = (data.emails || []) - .map((email: any) => ({ - id: email.id, - accountId: 1, - from: email.from || '', - fromName: email.fromName || email.from?.split('@')[0] || '', - to: email.to || '', - subject: email.subject || '(No subject)', - content: email.content || '', // Full content is now included from the API - date: email.date || new Date().toISOString(), - read: email.read || false, - starred: email.starred || false, - folder: email.folder || currentView, - cc: email.cc, - bcc: email.bcc, - flags: email.flags || [], - hasAttachments: email.hasAttachments || false - })) + .map((email: any) => { + // Add proper handling for from field which might be an array or object + let fromText = ''; + let fromName = ''; + let toText = ''; + let ccText = ''; + let bccText = ''; + + // Handle 'from' field + if (email.from) { + if (Array.isArray(email.from)) { + if (email.from.length > 0) { + if (typeof email.from[0] === 'object') { + fromText = email.from[0].address || ''; + fromName = email.from[0].name || email.from[0].address?.split('@')[0] || ''; + } else { + fromText = email.from[0] || ''; + fromName = fromText.split('@')[0] || ''; + } + } + } + else if (typeof email.from === 'object') { + fromText = email.from.address || ''; + fromName = email.from.name || email.from.address?.split('@')[0] || ''; + } + else if (typeof email.from === 'string') { + fromText = email.from; + fromName = email.fromName || email.from.split('@')[0] || ''; + } + } + + // Handle 'to' field + if (email.to) { + if (Array.isArray(email.to)) { + if (email.to.length > 0) { + if (typeof email.to[0] === 'object') { + toText = email.to.map((t: any) => t.address || '').join(', '); + } else { + toText = email.to.join(', '); + } + } + } + else if (typeof email.to === 'object') { + toText = email.to.address || ''; + } + else if (typeof email.to === 'string') { + toText = email.to; + } + } + + // Handle 'cc' field + if (email.cc) { + if (Array.isArray(email.cc)) { + if (email.cc.length > 0) { + if (typeof email.cc[0] === 'object') { + ccText = email.cc.map((c: any) => c.address || '').join(', '); + } else { + ccText = email.cc.join(', '); + } + } + } + else if (typeof email.cc === 'object') { + ccText = email.cc.address || ''; + } + else if (typeof email.cc === 'string') { + ccText = email.cc; + } + } + + // Handle 'bcc' field + if (email.bcc) { + if (Array.isArray(email.bcc)) { + if (email.bcc.length > 0) { + if (typeof email.bcc[0] === 'object') { + bccText = email.bcc.map((b: any) => b.address || '').join(', '); + } else { + bccText = email.bcc.join(', '); + } + } + } + else if (typeof email.bcc === 'object') { + bccText = email.bcc.address || ''; + } + else if (typeof email.bcc === 'string') { + bccText = email.bcc; + } + } + + return { + id: email.id, + accountId: 1, + from: fromText, + fromName: fromName, + to: toText, + subject: email.subject || '(No subject)', + content: email.content || '', + date: email.date || new Date().toISOString(), + read: email.read || false, + starred: email.starred || false, + folder: email.folder || currentView, + cc: ccText, + bcc: bccText, + flags: email.flags || [], + hasAttachments: email.hasAttachments || false + }; + }) .sort((a: Email, b: Email) => new Date(b.date).getTime() - new Date(a.date).getTime()); // Set emails appropriately