From 3d9c8e03ebbaacfaf8373453dfd9907c412a0ffc Mon Sep 17 00:00:00 2001 From: Agent Zero Date: Thu, 30 Jul 2026 18:44:43 +0200 Subject: [PATCH] fix: mail grouping loads all mails at once with large page_size, no infinite scroll during grouping --- frontend/src/api/mail.ts | 3 ++- frontend/src/pages/Mail.tsx | 15 +++++++++------ 2 files changed, 11 insertions(+), 7 deletions(-) diff --git a/frontend/src/api/mail.ts b/frontend/src/api/mail.ts index 0777ec1..e2864da 100644 --- a/frontend/src/api/mail.ts +++ b/frontend/src/api/mail.ts @@ -487,10 +487,11 @@ export function syncFolder(folderId: string): Promise<{ synced: number; error?: // ─── Mails ────────────────────────────────────────────────────────────────── -export function fetchMails(folderId: string, page: number, sortBy?: string, sortOrder?: string): Promise { +export function fetchMails(folderId: string, page: number, sortBy?: string, sortOrder?: string, pageSize?: number): Promise { const params = new URLSearchParams({ folder_id: folderId, page: String(page) }); if (sortBy) params.set('sort_by', sortBy); if (sortOrder) params.set('sort_order', sortOrder); + if (pageSize) params.set('page_size', String(pageSize)); return apiGet(`/mail?${params.toString()}`); } diff --git a/frontend/src/pages/Mail.tsx b/frontend/src/pages/Mail.tsx index 5366f3d..3858e57 100644 --- a/frontend/src/pages/Mail.tsx +++ b/frontend/src/pages/Mail.tsx @@ -193,11 +193,14 @@ export function MailPage() { setMailsTotal(result.total); } } else { - const result = await fetchMails(currentFolderId, mailsPage, sortBy, sortOrder); + // When grouping is active, load all mails at once (no pagination) + const isGrouping = mailGroupState.conditions.length > 0; + const pageToLoad = isGrouping ? 1 : mailsPage; + const result = await fetchMails(currentFolderId, pageToLoad, sortBy, sortOrder, isGrouping ? 10000 : undefined); // Only update if still on the same folder if (selectedFolderIdRef.current === currentFolderId) { - // Append for infinite scroll (page > 1), replace on page 1 or folder change - setMails(mailsPage > 1 ? (prev) => [...prev, ...result.mails] : result.mails); + // Append for infinite scroll (page > 1), replace on page 1 or folder change or grouping + setMails(!isGrouping && mailsPage > 1 ? (prev) => [...prev, ...result.mails] : result.mails); setMailsTotal(result.total); } } @@ -209,7 +212,7 @@ export function MailPage() { } } setLoadingMails(false); - }, [selectedFolderId, mailsPage, searchQuery, sortBy, sortOrder]); + }, [selectedFolderId, mailsPage, searchQuery, sortBy, sortOrder, mailGroupState]); useEffect(() => { loadMails(); @@ -908,7 +911,7 @@ export function MailPage() { setMailsPage((p) => p + 1); } }} - hasMore={mails.length < mailsTotal} + hasMore={mailGroupState.conditions.length === 0 && mails.length < mailsTotal} /> @@ -979,7 +982,7 @@ export function MailPage() { setMailsPage((p) => p + 1); } }} - hasMore={mails.length < mailsTotal} + hasMore={mailGroupState.conditions.length === 0 && mails.length < mailsTotal} /> )}