courrier multi account restore compose
This commit is contained in:
parent
608005d9ee
commit
63eeb10033
@ -626,6 +626,11 @@ export default function CourrierPage() {
|
|||||||
// Set loading state immediately
|
// Set loading state immediately
|
||||||
setLoading(true);
|
setLoading(true);
|
||||||
|
|
||||||
|
// CRITICAL FIX: Clear email selection BEFORE changing folders
|
||||||
|
// This prevents stale emails from previous folders from being displayed
|
||||||
|
logEmailOp('MAILBOX-CHANGE', 'Clearing email selection before folder change');
|
||||||
|
handleEmailSelect('', '', '');
|
||||||
|
|
||||||
// Clear emails during transition to avoid UI flicker/confusion
|
// Clear emails during transition to avoid UI flicker/confusion
|
||||||
setEmails([]);
|
setEmails([]);
|
||||||
|
|
||||||
@ -804,6 +809,19 @@ export default function CourrierPage() {
|
|||||||
// First set loading state to provide visual feedback
|
// First set loading state to provide visual feedback
|
||||||
setLoading(true);
|
setLoading(true);
|
||||||
|
|
||||||
|
// CRITICAL FIX: Clear current selection to prevent stale email from previous account
|
||||||
|
// This ensures no emails from the previous account remain selected
|
||||||
|
logEmailOp('ACCOUNT-SELECT', `CRITICAL FIX: Clearing all email selections to prevent cross-account UI contamination`);
|
||||||
|
|
||||||
|
// Direct clearing of selected email for immediate UI effect
|
||||||
|
// Clear the selected email in the UI - Panel 3
|
||||||
|
handleEmailSelect('', '', '');
|
||||||
|
|
||||||
|
// Clear any multi-selected emails - Panel 2
|
||||||
|
if (selectedEmailIds.length > 0) {
|
||||||
|
toggleSelectAll();
|
||||||
|
}
|
||||||
|
|
||||||
// Clear current emails to avoid confusion during transition
|
// Clear current emails to avoid confusion during transition
|
||||||
setEmails([]);
|
setEmails([]);
|
||||||
|
|
||||||
|
|||||||
@ -125,8 +125,18 @@ export default function EmailPanel({
|
|||||||
// Load email content when selectedEmail changes
|
// Load email content when selectedEmail changes
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
if (selectedEmail) {
|
if (selectedEmail) {
|
||||||
|
// CRITICAL FIX: Store the current account ID to check for changes
|
||||||
|
// This helps prevent race conditions during account switching
|
||||||
|
const currentAccountId = selectedEmail.accountId;
|
||||||
|
console.log(`EmailPanel: Loading email ${selectedEmail.emailId} from account ${currentAccountId}`);
|
||||||
|
|
||||||
debouncedFetchEmail(selectedEmail.emailId, selectedEmail.accountId, selectedEmail.folder);
|
debouncedFetchEmail(selectedEmail.emailId, selectedEmail.accountId, selectedEmail.folder);
|
||||||
setIsComposing(false);
|
setIsComposing(false);
|
||||||
|
|
||||||
|
// Return a cleanup function that can detect and handle account changes
|
||||||
|
return () => {
|
||||||
|
console.log(`EmailPanel: Cleaning up email fetch for account ${currentAccountId}`);
|
||||||
|
};
|
||||||
}
|
}
|
||||||
}, [selectedEmail, debouncedFetchEmail]);
|
}, [selectedEmail, debouncedFetchEmail]);
|
||||||
|
|
||||||
|
|||||||
@ -49,6 +49,16 @@ export function useEmailFetch({ onEmailLoaded, onError }: UseEmailFetchProps = {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// CRITICAL FIX: Always abort any previous request when fetching a new email
|
||||||
|
// This prevents race conditions when switching accounts or folders
|
||||||
|
if (abortControllerRef.current) {
|
||||||
|
console.log(`useEmailFetch: Aborting previous request to fetch email ${emailId} from account ${accountId}`);
|
||||||
|
abortControllerRef.current.abort();
|
||||||
|
}
|
||||||
|
|
||||||
|
// Create a new abort controller for this request
|
||||||
|
abortControllerRef.current = new AbortController();
|
||||||
|
|
||||||
setState(prev => ({ ...prev, loading: true, error: null }));
|
setState(prev => ({ ...prev, loading: true, error: null }));
|
||||||
|
|
||||||
try {
|
try {
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user