From 339cd4b9ab8226c7c1922cdcc5e4cfecff0bf1c2 Mon Sep 17 00:00:00 2001 From: Linus Rath <139418639+rathlinus@users.noreply.github.com> Date: Wed, 28 Oct 2026 10:46:20 +0100 Subject: [PATCH] fix: put Delete folder last in the folder menu, after Refresh --- .../mailbox-context-menu-order.test.tsx | 34 +++++++++++++++++++ components/layout/mailbox-context-menu.tsx | 16 ++++----- 2 files changed, 41 insertions(+), 9 deletions(-) create mode 100644 components/layout/__tests__/mailbox-context-menu-order.test.tsx diff --git a/components/layout/__tests__/mailbox-context-menu-order.test.tsx b/components/layout/__tests__/mailbox-context-menu-order.test.tsx new file mode 100644 index 000000000..947fb0062 --- /dev/null +++ b/components/layout/__tests__/mailbox-context-menu-order.test.tsx @@ -0,0 +1,34 @@ +import { render, screen } from '@testing-library/react'; +import { describe, expect, it, vi } from 'vitest'; +import type { Mailbox } from '@/lib/jmap/types'; + +// R6: destructive entries come last. The folder menu had Refresh after +// "Delete folder". + +vi.mock('@/components/email/rules-menu', () => ({ FolderRulesSubMenu: () => null })); + +const { MailboxContextMenu } = await import('../mailbox-context-menu'); + +const folder = { id: 'p', name: 'Projects', sortOrder: 1, totalEmails: 2, unreadEmails: 0, myRights: {} } as unknown as Mailbox; + +describe('MailboxContextMenu', () => { + it('ends with Empty folder and Delete folder', () => { + render( + , + ); + const labels = screen.getAllByRole('menuitem').map((item) => item.textContent); + expect(labels.slice(-2)).toEqual(['empty_folder_generic', 'delete_folder']); + expect(labels).toContain('refresh'); + }); +}); diff --git a/components/layout/mailbox-context-menu.tsx b/components/layout/mailbox-context-menu.tsx index bb2f8d34a..afaf59d08 100644 --- a/components/layout/mailbox-context-menu.tsx +++ b/components/layout/mailbox-context-menu.tsx @@ -293,7 +293,14 @@ export function MailboxContextMenu({ onClick={() => handleAction(() => onImportEmail?.(mailbox.id))} disabled={!onImportEmail || !canAddItems} /> + handleAction(onRefresh!)} + disabled={!onRefresh} + /> + {/* Destructive entries last (R6). */} - - - - handleAction(onRefresh!)} - disabled={!onRefresh} - /> ); }