diff --git a/components/layout/mailbox-context-menu.tsx b/components/layout/mailbox-context-menu.tsx index 5807d0851..557aa83f1 100644 --- a/components/layout/mailbox-context-menu.tsx +++ b/components/layout/mailbox-context-menu.tsx @@ -30,7 +30,7 @@ interface Position { export type MailboxContextTarget = | { kind: "mailbox"; mailbox: Mailbox; hasChildren: boolean } - | { kind: "folders-section" }; + | { kind: "folders-section"; accountId?: string }; const PATH_SEPARATOR = " › "; const MAX_PATH_LENGTH = 40; @@ -82,7 +82,7 @@ interface MailboxContextMenuProps { onMarkAllFoldersRead?: () => void; onEmptyFolder?: (mailboxId: string) => void; onCreateSubfolder?: (parentId: string) => void; - onCreateFolder?: () => void; + onCreateFolder?: (accountId?: string) => void; onRenameFolder?: (mailboxId: string) => void; onDeleteFolder?: (mailboxId: string) => void; onImportEmail?: (mailboxId: string) => void; @@ -119,18 +119,23 @@ export function MailboxContextMenu({ if (target.kind === "folders-section") { return ( - handleAction(onMarkAllFoldersRead!)} - disabled={!onMarkAllFoldersRead} - /> - + {!target.accountId && ( + <> + handleAction(onMarkAllFoldersRead!)} + disabled={!onMarkAllFoldersRead} + /> + + + )} handleAction(onCreateFolder!)} + onClick={() => handleAction(() => onCreateFolder?.(target.accountId))} disabled={!onCreateFolder} + testId="mailbox-new-folder" /> handleAction(() => onCreateSubfolder?.(mailbox.id))} disabled={!onCreateSubfolder || !canCreateChild} + testId="mailbox-new-subfolder" /> handleAction(() => onRenameFolder?.(mailbox.id))} disabled={!onRenameFolder || !canRename} + testId="mailbox-rename" /> @@ -216,6 +223,7 @@ export function MailboxContextMenu({ onClick={() => handleAction(() => onDeleteFolder?.(mailbox.id))} disabled={!onDeleteFolder || !canDelete} destructive + testId="mailbox-delete" /> diff --git a/components/layout/sidebar.tsx b/components/layout/sidebar.tsx index b0678299e..a381070d3 100644 --- a/components/layout/sidebar.tsx +++ b/components/layout/sidebar.tsx @@ -84,7 +84,7 @@ interface SidebarProps { onMarkAllFoldersRead?: () => void; onEmptyFolder?: (mailboxId: string) => void; onCreateSubfolder?: (parentId: string) => void; - onCreateFolder?: () => void; + onCreateFolder?: (accountId?: string) => void; onRenameFolder?: (mailboxId: string) => void; onDeleteFolder?: (mailboxId: string) => void; onImportEmail?: (mailboxId: string) => void; @@ -338,6 +338,7 @@ function SidebarRow({ e.stopPropagation(); onExpandToggle(); }} + data-testid="folder-expand-toggle" className="flex items-center justify-center rounded hover:bg-muted active:bg-accent transition-colors" style={{ width: CHEVRON_SLOT, height: CHEVRON_SLOT }} title={isExpanded ? t('collapse_tooltip') : t('expand_tooltip')} @@ -394,6 +395,7 @@ function SidebarSectionHeader({ icon, sub, testId, + onContextMenu, }: { label: string; expanded: boolean; @@ -405,6 +407,7 @@ function SidebarSectionHeader({ icon?: ReactNode; sub?: boolean; testId?: string; + onContextMenu?: (event: React.MouseEvent) => void; }) { if (isCollapsed) { return first ? null :
; @@ -419,6 +422,7 @@ function SidebarSectionHeader({ return (