fix: AI loop prevention (no tools on last iteration), calendar button first, mail filter in toolbar, AI folder rename query invalidation
Check Cross-Plugin Imports / check (push) Has been cancelled
Check Cross-Plugin Imports / check (push) Has been cancelled
This commit is contained in:
+37
-21
@@ -594,6 +594,43 @@ export function MailPage() {
|
||||
onSearch: handleSearch,
|
||||
onClick: () => {},
|
||||
},
|
||||
// FilterPanel — SavedFilterBar + TagSelector
|
||||
{
|
||||
id: 'filter-panel',
|
||||
plugin: 'mail',
|
||||
label: 'Filter',
|
||||
type: 'custom' as const,
|
||||
group: 'filter',
|
||||
customComponent: (
|
||||
<SavedFilterBar
|
||||
entityType="mail"
|
||||
currentFilters={{ search: searchQuery, sortBy, sortOrder, folderId: selectedFolderId }}
|
||||
onApplyFilter={(criteria) => {
|
||||
if (criteria.search !== undefined) handleSearch(criteria.search);
|
||||
if (criteria.sortBy) setSortBy(criteria.sortBy as 'date' | 'from' | 'subject');
|
||||
if (criteria.sortOrder) setSortOrder(criteria.sortOrder as 'asc' | 'desc');
|
||||
}}
|
||||
/>
|
||||
),
|
||||
onClick: () => {},
|
||||
},
|
||||
{
|
||||
id: 'tag-filter',
|
||||
plugin: 'mail',
|
||||
label: 'Tags',
|
||||
type: 'custom' as const,
|
||||
group: 'filter',
|
||||
customComponent: (
|
||||
<TagSelector
|
||||
entityType="file"
|
||||
entityId={selectedMail?.id ?? ''}
|
||||
selectedTags={selectedTags}
|
||||
onChange={setSelectedTags}
|
||||
placeholder={t('tags.selectPlaceholder', 'Tags filtern...')}
|
||||
/>
|
||||
),
|
||||
onClick: () => {},
|
||||
},
|
||||
{
|
||||
id: 'compose',
|
||||
plugin: 'mail',
|
||||
@@ -814,27 +851,6 @@ export function MailPage() {
|
||||
className="border-r border-secondary-200 bg-white"
|
||||
data-testid="mail-list-pane"
|
||||
>
|
||||
{/* Saved filter bar + tag selector */}
|
||||
<div className="flex items-center gap-2 px-3 py-2 border-b border-secondary-200 bg-secondary-50 flex-wrap" data-testid="mail-filter-bar">
|
||||
<SavedFilterBar
|
||||
entityType="mail"
|
||||
currentFilters={{ search: searchQuery, sortBy, sortOrder, folderId: selectedFolderId }}
|
||||
onApplyFilter={(criteria) => {
|
||||
if (criteria.search !== undefined) handleSearch(criteria.search);
|
||||
if (criteria.sortBy) setSortBy(criteria.sortBy as 'date' | 'from' | 'subject');
|
||||
if (criteria.sortOrder) setSortOrder(criteria.sortOrder as 'asc' | 'desc');
|
||||
}}
|
||||
/>
|
||||
<div className="flex-1 min-w-[180px]" data-testid="mail-tag-selector">
|
||||
<TagSelector
|
||||
entityType="file"
|
||||
entityId={selectedMail?.id ?? ''}
|
||||
selectedTags={selectedTags}
|
||||
onChange={setSelectedTags}
|
||||
placeholder={t('tags.selectPlaceholder', 'Tags filtern...')}
|
||||
/>
|
||||
</div>
|
||||
</div>
|
||||
<MailList
|
||||
mails={mails}
|
||||
selectedMailId={selectedMail?.id || null}
|
||||
|
||||
Reference in New Issue
Block a user