fix: connect MailFilterPanel and MailSortPanel to MailList with useMemo

This commit is contained in:
Agent Zero
2026-07-30 13:29:08 +02:00
parent 952890d95c
commit 75432cbcfd
+16 -4
View File
@@ -4,7 +4,7 @@
* Account selection is integrated into the folder tree (left pane).
*/
import React, { useState, useEffect, useCallback, useRef } from 'react';
import React, { useState, useEffect, useCallback, useRef, useMemo } from 'react';
import { useTranslation } from 'react-i18next';
import { Link } from 'react-router-dom';
import { Card } from '@/components/ui/Card';
@@ -19,8 +19,8 @@ import { MailComposeForm, type ComposeMode } from '@/components/mail/MailCompose
import { useWindowStore } from '@/store/windowStore';
import { usePluginToolbarStore } from '@/store/pluginToolbarStore';
import { ArrowRight, Check, ChevronLeft, ExternalLink, Loader2, Plus, Redo2, Trash2, TrendingUp, Undo2 } from 'lucide-react';
import { MailFilterPanel, type FilterState as MailFilterState, emptyFilterState as emptyMailFilterState } from '@/components/mail/MailFilterPanel';
import { MailSortPanel, type SortState as MailSortState, emptySortState as emptyMailSortState } from '@/components/mail/MailSortPanel';
import { MailFilterPanel, type FilterState as MailFilterState, emptyFilterState as emptyMailFilterState, applyFilters as applyMailFilters } from '@/components/mail/MailFilterPanel';
import { MailSortPanel, type SortState as MailSortState, emptySortState as emptyMailSortState, applySorting as applyMailSorting } from '@/components/mail/MailSortPanel';
import { MailGroupPanel, type GroupState as MailGroupState, emptyGroupState as emptyMailGroupState } from '@/components/mail/MailGroupPanel';
import type { Tag } from '@/api/tags';
import { useSavedFilters } from '@/api/savedFilters';
@@ -94,6 +94,18 @@ export function MailPage() {
const [mailSortState, setMailSortState] = useState<MailSortState>(emptyMailSortState);
const [mailGroupState, setMailGroupState] = useState<MailGroupState>(emptyMailGroupState);
// Apply filter + sort to mails before rendering
const processedMails = useMemo(() => {
let result = mails;
if (mailFilterState.conditions.length > 0) {
result = applyMailFilters(result, mailFilterState);
}
if (mailSortState.conditions.length > 0) {
result = applyMailSorting(result, mailSortState);
}
return result;
}, [mails, mailFilterState, mailSortState]);
// Ref to track the current folder ID for async callbacks (prevents race conditions)
const selectedFolderIdRef = useRef<string | null>(null);
useEffect(() => {
@@ -876,7 +888,7 @@ export function MailPage() {
data-testid="mail-list-pane"
>
<MailList
mails={mails}
mails={processedMails}
selectedMailId={selectedMail?.id || null}
onSelectMail={handleSelectMail}
loading={loadingMails}