panel 2 courier api restore
This commit is contained in:
parent
c4f9bee7ee
commit
3aae79e76b
@ -625,23 +625,112 @@ export default function CourrierPage() {
|
|||||||
|
|
||||||
// Process emails and sort by date
|
// Process emails and sort by date
|
||||||
const processedEmails = (data.emails || [])
|
const processedEmails = (data.emails || [])
|
||||||
.map((email: any) => ({
|
.map((email: any) => {
|
||||||
id: email.id,
|
// Add proper handling for from field which might be an array or object
|
||||||
accountId: 1,
|
let fromText = '';
|
||||||
from: email.from || '',
|
let fromName = '';
|
||||||
fromName: email.fromName || email.from?.split('@')[0] || '',
|
let toText = '';
|
||||||
to: email.to || '',
|
let ccText = '';
|
||||||
subject: email.subject || '(No subject)',
|
let bccText = '';
|
||||||
content: email.preview || '',
|
|
||||||
date: email.date || new Date().toISOString(),
|
// Handle 'from' field
|
||||||
read: email.read || false,
|
if (email.from) {
|
||||||
starred: email.starred || false,
|
if (Array.isArray(email.from)) {
|
||||||
folder: email.folder || currentView,
|
if (email.from.length > 0) {
|
||||||
cc: email.cc,
|
if (typeof email.from[0] === 'object') {
|
||||||
bcc: email.bcc,
|
fromText = email.from[0].address || '';
|
||||||
flags: email.flags || [],
|
fromName = email.from[0].name || email.from[0].address?.split('@')[0] || '';
|
||||||
hasAttachments: email.hasAttachments || false
|
} 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());
|
.sort((a: Email, b: Email) => new Date(b.date).getTime() - new Date(a.date).getTime());
|
||||||
|
|
||||||
// Set emails
|
// Set emails
|
||||||
@ -691,7 +780,7 @@ export default function CourrierPage() {
|
|||||||
return account ? account.color : 'bg-gray-500';
|
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) => {
|
const handleEmailSelect = async (emailId: string) => {
|
||||||
try {
|
try {
|
||||||
setContentLoading(true);
|
setContentLoading(true);
|
||||||
@ -1105,15 +1194,15 @@ export default function CourrierPage() {
|
|||||||
<div className="flex items-center gap-4 mb-6">
|
<div className="flex items-center gap-4 mb-6">
|
||||||
<Avatar className="h-10 w-10">
|
<Avatar className="h-10 w-10">
|
||||||
<AvatarFallback>
|
<AvatarFallback>
|
||||||
{selectedEmail.fromName?.charAt(0) || selectedEmail.from.charAt(0)}
|
{selectedEmail.fromName?.charAt(0) || selectedEmail.from?.charAt(0) || '?'}
|
||||||
</AvatarFallback>
|
</AvatarFallback>
|
||||||
</Avatar>
|
</Avatar>
|
||||||
<div className="flex-1">
|
<div className="flex-1">
|
||||||
<p className="font-medium text-gray-900">
|
<p className="font-medium text-gray-900">
|
||||||
{selectedEmail.fromName} <span className="text-gray-500"><{selectedEmail.from}></span>
|
{selectedEmail.fromName || 'Unknown'} {selectedEmail.from && <span className="text-gray-500"><{selectedEmail.from}></span>}
|
||||||
</p>
|
</p>
|
||||||
<p className="text-sm text-gray-500">
|
<p className="text-sm text-gray-500">
|
||||||
to {selectedEmail.to}
|
to {selectedEmail.to || 'No recipients'}
|
||||||
</p>
|
</p>
|
||||||
{selectedEmail.cc && (
|
{selectedEmail.cc && (
|
||||||
<p className="text-sm text-gray-500">
|
<p className="text-sm text-gray-500">
|
||||||
@ -1143,7 +1232,7 @@ export default function CourrierPage() {
|
|||||||
</div>
|
</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) => (
|
const renderEmailListItem = (email: Email) => (
|
||||||
<div
|
<div
|
||||||
key={email.id}
|
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 justify-between gap-2 mb-1">
|
||||||
<div className="flex items-center gap-2 min-w-0">
|
<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'}`}>
|
<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>
|
</span>
|
||||||
{!email.read && (
|
{!email.read && (
|
||||||
<span className="w-1.5 h-1.5 bg-blue-600 rounded-full flex-shrink-0"></span>
|
<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,
|
read: email.read || false,
|
||||||
starred: email.starred || false,
|
starred: email.starred || false,
|
||||||
folder: email.folder || newMailbox,
|
folder: email.folder || newMailbox,
|
||||||
cc: email.cc,
|
cc: email.cc || '',
|
||||||
bcc: email.bcc,
|
bcc: email.bcc || '',
|
||||||
flags: email.flags || [],
|
flags: email.flags || [],
|
||||||
raw: email.body || ''
|
raw: email.body || ''
|
||||||
}));
|
}));
|
||||||
@ -1539,23 +1628,112 @@ export default function CourrierPage() {
|
|||||||
|
|
||||||
// Process and sort emails
|
// Process and sort emails
|
||||||
const processedEmails = (data.emails || [])
|
const processedEmails = (data.emails || [])
|
||||||
.map((email: any) => ({
|
.map((email: any) => {
|
||||||
id: email.id,
|
// Add proper handling for from field which might be an array or object
|
||||||
accountId: 1,
|
let fromText = '';
|
||||||
from: email.from || '',
|
let fromName = '';
|
||||||
fromName: email.fromName || email.from?.split('@')[0] || '',
|
let toText = '';
|
||||||
to: email.to || '',
|
let ccText = '';
|
||||||
subject: email.subject || '(No subject)',
|
let bccText = '';
|
||||||
content: email.content || '', // Full content is now included from the API
|
|
||||||
date: email.date || new Date().toISOString(),
|
// Handle 'from' field
|
||||||
read: email.read || false,
|
if (email.from) {
|
||||||
starred: email.starred || false,
|
if (Array.isArray(email.from)) {
|
||||||
folder: email.folder || currentView,
|
if (email.from.length > 0) {
|
||||||
cc: email.cc,
|
if (typeof email.from[0] === 'object') {
|
||||||
bcc: email.bcc,
|
fromText = email.from[0].address || '';
|
||||||
flags: email.flags || [],
|
fromName = email.from[0].name || email.from[0].address?.split('@')[0] || '';
|
||||||
hasAttachments: email.hasAttachments || false
|
} 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());
|
.sort((a: Email, b: Email) => new Date(b.date).getTime() - new Date(a.date).getTime());
|
||||||
|
|
||||||
// Set emails appropriately
|
// Set emails appropriately
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user