panel 2 courier api restore

This commit is contained in:
alma 2025-04-25 20:25:43 +02:00
parent c4f9bee7ee
commit 3aae79e76b

View File

@ -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() {
<div className="flex items-center gap-4 mb-6">
<Avatar className="h-10 w-10">
<AvatarFallback>
{selectedEmail.fromName?.charAt(0) || selectedEmail.from.charAt(0)}
{selectedEmail.fromName?.charAt(0) || selectedEmail.from?.charAt(0) || '?'}
</AvatarFallback>
</Avatar>
<div className="flex-1">
<p className="font-medium text-gray-900">
{selectedEmail.fromName} <span className="text-gray-500">&lt;{selectedEmail.from}&gt;</span>
{selectedEmail.fromName || 'Unknown'} {selectedEmail.from && <span className="text-gray-500">&lt;{selectedEmail.from}&gt;</span>}
</p>
<p className="text-sm text-gray-500">
to {selectedEmail.to}
to {selectedEmail.to || 'No recipients'}
</p>
{selectedEmail.cc && (
<p className="text-sm text-gray-500">
@ -1143,7 +1232,7 @@ export default function CourrierPage() {
</div>
);
// Update the email list item to match header checkbox alignment
// Update the email list item to safely display the fromName
const renderEmailListItem = (email: Email) => (
<div
key={email.id}
@ -1164,7 +1253,7 @@ export default function CourrierPage() {
<div className="flex items-center justify-between gap-2 mb-1">
<div className="flex items-center gap-2 min-w-0">
<span className={`text-sm truncate ${!email.read ? 'font-semibold text-gray-900' : 'text-gray-600'}`}>
{email.fromName || email.from}
{email.fromName || email.from || 'Unknown'}
</span>
{!email.read && (
<span className="w-1.5 h-1.5 bg-blue-600 rounded-full flex-shrink-0"></span>
@ -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