From 6bfd21dd1b545ea311716ee3b48efb87a8288e15 Mon Sep 17 00:00:00 2001 From: Moosa Ali Naseer Date: Wed, 20 May 2026 10:07:56 +0500 Subject: [PATCH 1/2] test(mailviewer): cover empty overflow menu #656 --- .../singlemailviewer.component.spec.ts | 23 +++++++++++++++++++ 1 file changed, 23 insertions(+) diff --git a/src/app/mailviewer/singlemailviewer.component.spec.ts b/src/app/mailviewer/singlemailviewer.component.spec.ts index d4bc44f93..4ce1f6e44 100644 --- a/src/app/mailviewer/singlemailviewer.component.spec.ts +++ b/src/app/mailviewer/singlemailviewer.component.spec.ts @@ -215,6 +215,29 @@ describe('SingleMailViewerComponent', () => { expect(component).toBeTruthy(); }); + it('does not show overflow menu for plaintext messages when every plaintext toolbar action fits', () => { + component.mailContentHTML = null; + + component.morebuttonindex = 9; + expect(component.hasHiddenToolbarActions()).toBeTrue(); + + component.morebuttonindex = 10; + expect(component.hasHiddenToolbarActions()).toBeFalse(); + }); + + it('keeps overflow menu visible when HTML-only toolbar actions are hidden', () => { + component.mailContentHTML = '

HTML content

'; + + component.morebuttonindex = 10; + expect(component.hasHiddenToolbarActions()).toBeTrue(); + + component.morebuttonindex = 11; + expect(component.hasHiddenToolbarActions()).toBeTrue(); + + component.morebuttonindex = 12; + expect(component.hasHiddenToolbarActions()).toBeFalse(); + }); + it('show mail', fakeAsync(() => { expect(component).toBeTruthy(); From 4ceeb5075c3b8aa1e6e4462469a579bae592a540 Mon Sep 17 00:00:00 2001 From: Moosa Ali Naseer Date: Wed, 20 May 2026 10:08:02 +0500 Subject: [PATCH 2/2] fix(mailviewer): hide empty overflow menu #656 --- src/app/mailviewer/singlemailviewer.component.html | 8 ++++---- src/app/mailviewer/singlemailviewer.component.ts | 11 +++++++++++ 2 files changed, 15 insertions(+), 4 deletions(-) diff --git a/src/app/mailviewer/singlemailviewer.component.html b/src/app/mailviewer/singlemailviewer.component.html index 5eaf9debb..55b5dafb7 100644 --- a/src/app/mailviewer/singlemailviewer.component.html +++ b/src/app/mailviewer/singlemailviewer.component.html @@ -77,7 +77,7 @@ matTooltip="Original HTML" [href]="'/rest/v1/email/'+messageId+'/html'" target="_blank"> - @@ -176,16 +176,16 @@ Block Sender/Domain - View source - - Original HTML diff --git a/src/app/mailviewer/singlemailviewer.component.ts b/src/app/mailviewer/singlemailviewer.component.ts index 1bb81b032..875de3caa 100644 --- a/src/app/mailviewer/singlemailviewer.component.ts +++ b/src/app/mailviewer/singlemailviewer.component.ts @@ -60,6 +60,8 @@ const resizerHeightKey = 'rmm7resizerheight'; const resizerPercentageKey = 'rmm7resizerpercentage'; const TOOLBAR_BUTTON_WIDTH = 30; +const PLAINTEXT_TOOLBAR_ACTION_COUNT = 10; +const HTML_TOOLBAR_ACTION_COUNT = 12; type Mail = any; @@ -331,6 +333,15 @@ export class SingleMailViewerComponent implements OnInit, DoCheck, AfterViewInit this.attachmentAreaCols = Math.floor(toolbarwidth / 150) + 1; } } + + /** + * Returns true while the overflow menu contains at least one toolbar action. + */ + public hasHiddenToolbarActions(): boolean { + const actionCount = this.mailContentHTML ? HTML_TOOLBAR_ACTION_COUNT : PLAINTEXT_TOOLBAR_ACTION_COUNT; + return this.morebuttonindex < actionCount; + } + public changeOrientation(orientation: string) { this.orientationChangeRequest.emit(orientation); }