From 28a63aef311cd52b95a15d23202acb6a322e6973 Mon Sep 17 00:00:00 2001 From: alma Date: Fri, 25 Apr 2025 18:51:09 +0200 Subject: [PATCH] panel 2 courier api restore --- app/courrier/page.tsx | 192 +++++++++++++++++++++++------------------- 1 file changed, 104 insertions(+), 88 deletions(-) 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...

+
) : filteredEmails.length === 0 ? (
@@ -947,7 +931,14 @@ export default function CourrierPage() { )}

Folder: {currentView}

Total emails: {emails.length}

-

Available folders: {availableFolders.length}

+
) : (
@@ -1127,33 +1118,42 @@ export default function CourrierPage() { {/* Scrollable content area */} -
- - - {selectedEmail.fromName?.charAt(0) || selectedEmail.from.charAt(0)} - - -
-

- {selectedEmail.fromName} <{selectedEmail.from}> -

-

- to {selectedEmail.to} -

- {selectedEmail.cc && ( -

- cc {selectedEmail.cc} -

- )} + {contentLoading ? ( +
+
+

Loading email content...

-
- {formatDate(new Date(selectedEmail.date))} -
-
+ ) : ( + <> +
+ + + {selectedEmail.fromName?.charAt(0) || selectedEmail.from.charAt(0)} + + +
+

+ {selectedEmail.fromName} <{selectedEmail.from}> +

+

+ to {selectedEmail.to} +

+ {selectedEmail.cc && ( +

+ cc {selectedEmail.cc} +

+ )} +
+
+ {formatDate(new Date(selectedEmail.date))} +
+
-
- {renderEmailContent(selectedEmail)} -
+
+ {renderEmailContent(selectedEmail)} +
+ + )} ) : ( @@ -1575,6 +1575,19 @@ export default function CourrierPage() { ); } + if (isLoadingInitial && !emails.length) { + return ( +
+
+
+
+

Loading your emails...

+
+
+
+ ); + } + return ( <> {/* Main layout */} @@ -1615,7 +1628,10 @@ export default function CourrierPage() {