courrier multi account restore compose
This commit is contained in:
parent
5138649fcd
commit
e5022de6be
@ -138,6 +138,19 @@ export const useEmailState = () => {
|
|||||||
|
|
||||||
// Ensure all emails have proper account ID and folder format
|
// Ensure all emails have proper account ID and folder format
|
||||||
if (Array.isArray(data.emails)) {
|
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) => {
|
data.emails.forEach((email: Email) => {
|
||||||
// If email doesn't have an accountId, set it to the effective one
|
// If email doesn't have an accountId, set it to the effective one
|
||||||
if (!email.accountId) {
|
if (!email.accountId) {
|
||||||
@ -148,6 +161,22 @@ export const useEmailState = () => {
|
|||||||
if (email.folder && !email.folder.includes(':')) {
|
if (email.folder && !email.folder.includes(':')) {
|
||||||
email.folder = `${email.accountId}:${email.folder}`;
|
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();
|
||||||
|
}
|
||||||
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -165,9 +165,53 @@ export function emailReducer(state: EmailState, action: EmailAction): EmailState
|
|||||||
}
|
}
|
||||||
|
|
||||||
case 'SET_EMAILS':
|
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 {
|
return {
|
||||||
...state,
|
...state,
|
||||||
emails: action.payload,
|
emails: sortedEmails,
|
||||||
isLoading: false
|
isLoading: false
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user