From 19fa52e7e3dbe4f221aaa7af24344634c9341c69 Mon Sep 17 00:00:00 2001 From: alma Date: Wed, 16 Apr 2025 17:04:09 +0200 Subject: [PATCH] mail page connected with folders 7 --- app/mail/page.tsx | 100 ++++++++++++++++++++++++---------------------- 1 file changed, 53 insertions(+), 47 deletions(-) diff --git a/app/mail/page.tsx b/app/mail/page.tsx index 771e58d..86ccdcb 100644 --- a/app/mail/page.tsx +++ b/app/mail/page.tsx @@ -432,8 +432,29 @@ function cleanEmailContent(content: string): string { type MailFolder = string; type MailView = MailFolder | 'starred'; -// Map the exact IMAP folders to our sidebar items -const sidebarNavItems = [ +// Map IMAP folders to sidebar items with icons +const getFolderIcon = (folder: string) => { + switch (folder.toLowerCase()) { + case 'inbox': + return Inbox; + case 'sent': + return Send; + case 'drafts': + return Edit; + case 'trash': + return Trash; + case 'spam': + return AlertOctagon; + case 'archive': + case 'archives': + return Archive; + default: + return Folder; + } +}; + +// Initial sidebar items +const initialSidebarItems = [ { view: 'INBOX' as MailView, label: 'Inbox', @@ -444,7 +465,7 @@ const sidebarNavItems = [ view: 'starred' as MailView, label: 'Starred', icon: Star, - folder: null // Special case for starred items + folder: null } ]; @@ -488,6 +509,7 @@ export default function MailPage() { const [folders, setFolders] = useState([]); const [unreadCount, setUnreadCount] = useState(0); const [availableFolders, setAvailableFolders] = useState([]); + const [sidebarItems, setSidebarItems] = useState(initialSidebarItems); // Debug logging for email distribution useEffect(() => { @@ -977,41 +999,32 @@ export default function MailPage() { ); }; - // Render the sidebar navigation - const renderSidebarNav = () => ( - - ); + // Update sidebar items when available folders change + useEffect(() => { + if (availableFolders.length > 0) { + const newItems = [ + ...initialSidebarItems, + ...availableFolders + .filter(folder => !['INBOX'].includes(folder)) // Exclude folders already in initial items + .map(folder => ({ + view: folder as MailView, + label: folder.charAt(0).toUpperCase() + folder.slice(1).toLowerCase(), + icon: getFolderIcon(folder), + folder: folder + })) + ]; + setSidebarItems(newItems); + } + }, [availableFolders]); - // Email list panel section + // Sort emails by date (most recent first) + const sortedEmails = useMemo(() => { + return [...emails].sort((a, b) => { + return new Date(b.date).getTime() - new Date(a.date).getTime(); + }); + }, [emails]); + + // Render the email list using sorted emails const renderEmailList = () => (
{/* Email list header */} @@ -1021,12 +1034,11 @@ export default function MailPage() {

{currentView === 'INBOX' ? 'Inbox' : currentView === 'starred' ? 'Starred' : - currentView === 'Archives' || currentView === 'Archive' ? 'Archives' : currentView.charAt(0).toUpperCase() + currentView.slice(1)}

- {emails.length} emails + {sortedEmails.length} emails
@@ -1037,7 +1049,7 @@ export default function MailPage() {
- ) : emails.length === 0 ? ( + ) : sortedEmails.length === 0 ? (

@@ -1049,16 +1061,10 @@ export default function MailPage() { {currentView === 'Spam' && 'No spam emails'} {(currentView === 'Archives' || currentView === 'Archive') && 'No archived emails'}

- {/* Debug info */} -
-

Current view: {currentView}

-

Total emails: {emails.length}

-

Folders present: {[...new Set(emails.map(e => e.folder))].join(', ')}

-
) : (
- {emails.map((email) => ( + {sortedEmails.map((email) => (