courrier multi account restore compose

This commit is contained in:
alma 2025-04-30 14:22:51 +02:00
parent 5138649fcd
commit e5022de6be
2 changed files with 74 additions and 1 deletions

View File

@ -138,6 +138,19 @@ export const useEmailState = () => {
// Ensure all emails have proper account ID and folder format
if (Array.isArray(data.emails)) {
// Log email dates for debugging
if (data.emails.length > 0) {
logEmailOp('EMAIL_DATES', `First few email dates before processing:`,
data.emails.slice(0, 5).map((e: any) => ({
id: e.id.substring(0, 8),
subject: e.subject?.substring(0, 20),
date: e.date,
dateObj: new Date(e.date),
timestamp: new Date(e.date).getTime()
}))
);
}
data.emails.forEach((email: Email) => {
// If email doesn't have an accountId, set it to the effective one
if (!email.accountId) {
@ -148,6 +161,22 @@ export const useEmailState = () => {
if (email.folder && !email.folder.includes(':')) {
email.folder = `${email.accountId}:${email.folder}`;
}
// Ensure date is a valid Date object (handle strings or timestamps)
if (email.date && !(email.date instanceof Date)) {
try {
// Convert to a proper Date object if it's a string or number
const dateObj = new Date(email.date);
// Verify it's a valid date
if (!isNaN(dateObj.getTime())) {
email.date = dateObj;
}
} catch (err) {
// If conversion fails, log and use current date as fallback
console.error(`Invalid date format for email ${email.id}: ${email.date}`);
email.date = new Date();
}
}
});
}

View File

@ -165,9 +165,53 @@ export function emailReducer(state: EmailState, action: EmailAction): EmailState
}
case 'SET_EMAILS':
// Sort emails by date (newest first) to ensure consistent sorting
// First make a copy to avoid mutating the input
const unsortedEmails = [...action.payload];
// For debugging - log a few emails before sorting
if (unsortedEmails.length > 0) {
console.log(`[EMAIL_REDUCER] Sorting ${unsortedEmails.length} emails`);
// Log a sample of emails before sorting
console.log('[EMAIL_REDUCER] Sample emails before sorting:',
unsortedEmails.slice(0, 3).map(e => ({
id: e.id.substring(0, 8),
subject: e.subject?.substring(0, 20),
date: e.date,
timestamp: new Date(e.date).getTime()
}))
);
}
// Sort by date, newest first
const sortedEmails = unsortedEmails.sort((a, b) => {
const dateA = new Date(a.date).getTime();
const dateB = new Date(b.date).getTime();
// Handle invalid dates
if (isNaN(dateA) && isNaN(dateB)) return 0;
if (isNaN(dateA)) return 1; // Put invalid dates at the end
if (isNaN(dateB)) return -1;
return dateB - dateA; // Newest first
});
// For debugging - log a few emails after sorting
if (sortedEmails.length > 0) {
console.log('[EMAIL_REDUCER] Sample emails after sorting:',
sortedEmails.slice(0, 3).map(e => ({
id: e.id.substring(0, 8),
subject: e.subject?.substring(0, 20),
date: e.date,
timestamp: new Date(e.date).getTime()
}))
);
}
return {
...state,
emails: action.payload,
emails: sortedEmails,
isLoading: false
};