/** * Change the current folder and load emails from that folder */ const changeFolder = async (folder: string, accountId?: string) => { console.log(`Changing folder to ${folder} for account ${accountId || 'default'}`); try { // Reset selected email setSelectedEmail(null); setSelectedEmailIds([]); // Record the new folder setCurrentFolder(folder); // Reset search query when changing folders setSearchQuery(''); // Reset to page 1 setPage(1); // Clear existing emails before loading new ones to prevent UI flicker setEmails([]); // Show loading state setIsLoading(true); // Load emails for the new folder with a deliberate delay to allow state to update await new Promise(resolve => setTimeout(resolve, 100)); await loadEmails(folder, 1, 20, accountId); } catch (error) { console.error(`Error changing to folder ${folder}:`, error); setError(`Failed to load emails from ${folder}: ${error instanceof Error ? error.message : 'Unknown error'}`); } finally { setIsLoading(false); } }; /** * Load emails for the current folder */ const loadEmails = async ( folderOverride?: string, pageOverride?: number, perPageOverride?: number, accountIdOverride?: string ) => { const folderToUse = folderOverride || currentFolder; const pageToUse = pageOverride || page; const perPageToUse = perPageOverride || perPage; const accountIdToUse = accountIdOverride !== undefined ? accountIdOverride : folderToUse.includes(':') ? folderToUse.split(':')[0] : undefined; console.log(`Loading emails: folder=${folderToUse}, page=${pageToUse}, accountId=${accountIdToUse || 'default'}`); try { setIsLoading(true); setError(''); // Construct the API URL with a unique timestamp to prevent caching let url = `/api/courrier/emails?folder=${encodeURIComponent(folderToUse)}&page=${pageToUse}&perPage=${perPageToUse}`; // Add accountId parameter if specified if (accountIdToUse) { url += `&accountId=${encodeURIComponent(accountIdToUse)}`; } // Add cache-busting timestamp url += `&_t=${Date.now()}`; console.log(`Fetching emails from API: ${url}`); const response = await fetch(url); if (!response.ok) { let errorText; try { const errorData = await response.json(); errorText = errorData.error || `Server error: ${response.status}`; } catch { errorText = `HTTP error: ${response.status}`; } throw new Error(errorText); } const data = await response.json(); if (pageOverride === 1 || !pageOverride) { // Replace emails when loading first page setEmails(data.emails); } else { // Append emails when loading subsequent pages setEmails(prev => [...prev, ...data.emails]); } // Update pagination info setTotalPages(data.totalPages); setMailboxes(data.mailboxes || []); return data; } catch (error) { console.error('Error loading emails:', error); setError(`Failed to load emails: ${error instanceof Error ? error.message : 'Unknown error'}`); return null; } finally { setIsLoading(false); } };