diff --git a/app/courrier/page.tsx b/app/courrier/page.tsx index 72804aac..f82516cd 100644 --- a/app/courrier/page.tsx +++ b/app/courrier/page.tsx @@ -533,14 +533,20 @@ export default function CourrierPage() { return emails.find(email => email.id === selectedEmail?.id); }; - // Check for stored credentials + // Primary initialization effect - check credentials and load emails useEffect(() => { - const checkCredentials = async () => { + const initialize = async () => { try { + console.log('Initializing email client...'); + setLoading(true); + setIsLoadingInitial(true); + setError(null); + + // First check stored credentials console.log('Checking for stored credentials...'); - const response = await fetch('/api/courrier'); - if (!response.ok) { - const errorData = await response.json(); + const credResponse = await fetch('/api/courrier'); + if (!credResponse.ok) { + const errorData = await credResponse.json(); console.log('API response error:', errorData); if (errorData.error === 'No stored credentials found') { console.log('No credentials found, redirecting to login...'); @@ -549,64 +555,51 @@ export default function CourrierPage() { } throw new Error(errorData.error || 'Failed to check credentials'); } - console.log('Credentials verified, loading emails...'); - setLoading(false); - loadEmails(); + + // Then check mail credentials + const mailCredResponse = await fetch('/api/courrier/login'); + if (!mailCredResponse.ok) { + throw new Error('Mail credentials not found'); + } + const mailCredData = await mailCredResponse.json(); + console.log('Mail credentials found:', mailCredData.email); + + // Then load emails with folders + console.log('Loading emails and folders...'); + await loadEmails(); + + console.log('Initialization complete'); } catch (err) { - console.error('Error checking credentials:', err); - setError(err instanceof Error ? err.message : 'Failed to check credentials'); + console.error('Error initializing email client:', err); + setError(err instanceof Error ? err.message : 'Failed to initialize email client'); + } finally { setLoading(false); + setIsLoadingInitial(false); } }; - checkCredentials(); + initialize(); }, [router]); - // Check for email credentials - useEffect(() => { - async function checkMailCredentials() { - try { - const response = await fetch('/api/courrier/login'); - const data = await response.json(); - - if (response.status === 404 || !response.ok) { - console.log('Mail credentials not found'); - setError('Please configure your email account first'); - // Optionally redirect to login page - // router.push('/courrier/login'); - } else { - console.log('Mail credentials found:', data.email); - } - } catch (error) { - console.error('Error checking mail credentials:', error); - } - } - - checkMailCredentials(); - }, []); - - // Update your loadEmails function to properly handle folders + // Update your loadEmails function for better debugging const loadEmails = async (isLoadMore = false) => { try { - // Don't reload if we're already loading - if (isLoadingInitial || isLoadingMore) { + // Skip if already loading + if (!isLoadMore && (isLoadingInitial || isLoadingMore)) { console.log('Skipping email load - already loading'); return; } if (isLoadMore) { setIsLoadingMore(true); - } else { + } else if (!isLoadingInitial) { setLoading(true); } - setError(null); - // Create a cache key for this request - const cacheKey = `${currentView}-${page}-${emailsPerPage}`; - console.log('Loading emails with params:', { currentView, page, emailsPerPage }); + console.log(`Loading emails for ${currentView}, page ${page}...`); // Add timestamp parameter to force fresh data when needed - const timestamp = isLoadMore || page > 1 ? '' : `&_t=${Date.now()}`; + const timestamp = `&_t=${Date.now()}`; const response = await fetch( `/api/courrier?folder=${encodeURIComponent(currentView)}&page=${page}&limit=${emailsPerPage}${timestamp}`, @@ -618,25 +611,11 @@ export default function CourrierPage() { } const data = await response.json(); + console.log(`Received ${data.emails?.length || 0} emails, ${data.folders?.length || 0} folders`); - // Get available folders from the API response + // Set available folders if (data.folders && data.folders.length > 0) { - console.log('Setting available folders:', data.folders); setAvailableFolders(data.folders); - - // Generate sidebar items based on folders - const folderSidebarItems = data.folders.map((folderName: string) => ({ - label: folderName, - view: folderName, - icon: getFolderIcon(folderName) - })); - - // Update the sidebar items - setSidebarItems(prevItems => { - // Keep standard items (first 5 items) and replace folders - const standardItems = initialSidebarItems.slice(0, 5); - return [...standardItems, ...folderSidebarItems]; - }); } // Process emails keeping exact folder names and sort by date @@ -690,6 +669,7 @@ export default function CourrierPage() { setHasMore(data.hasMore); setError(null); + console.log('Emails loaded successfully'); } catch (err) { console.error('Error loading emails:', err); setError('Failed to load emails. Please try again.'); @@ -917,6 +897,7 @@ export default function CourrierPage() { const renderEmailList = () => { console.log('Rendering email list with state:', { loading, + isLoadingInitial, emailCount: emails.length, filteredEmailCount: filteredEmails.length, searchQuery: searchQuery.length > 0 ? searchQuery : 'empty', @@ -932,9 +913,12 @@ export default function CourrierPage() { className="flex-1 overflow-y-auto" onScroll={handleScroll} > - {loading ? ( + {loading || isLoadingInitial ? (
Loading emails...
+Folder: {currentView}
Total emails: {emails.length}
-Available folders: {availableFolders.length}
+- {selectedEmail.fromName} <{selectedEmail.from}> -
-- to {selectedEmail.to} -
- {selectedEmail.cc && ( -- cc {selectedEmail.cc} -
- )} + {contentLoading ? ( +Loading email content...
+ {selectedEmail.fromName} <{selectedEmail.from}> +
++ to {selectedEmail.to} +
+ {selectedEmail.cc && ( ++ cc {selectedEmail.cc} +
+ )} +Loading your emails...
+