From bed5d81b6b5fb5ecac050ad5587fcb4cea3a9b68 Mon Sep 17 00:00:00 2001 From: kurilova Date: Fri, 31 May 2024 09:40:54 +0000 Subject: [PATCH 1/2] Focus first interactive element in cert container when cert snack bar closed --- .../pages/certificates/certificates.store.spec.ts | 10 ++++++++-- .../src/app/pages/certificates/certificates.store.ts | 3 ++- modules/ui/src/app/services/notification.service.ts | 12 ++++++++++-- 3 files changed, 20 insertions(+), 5 deletions(-) diff --git a/modules/ui/src/app/pages/certificates/certificates.store.spec.ts b/modules/ui/src/app/pages/certificates/certificates.store.spec.ts index 0582bb3e4..29026accf 100644 --- a/modules/ui/src/app/pages/certificates/certificates.store.spec.ts +++ b/modules/ui/src/app/pages/certificates/certificates.store.spec.ts @@ -139,12 +139,17 @@ describe('CertificatesStore', () => { }); it('should notify', () => { + const container = document.createElement('DIV'); + container.classList.add('certificates-drawer-content'); + document.querySelector('body')?.appendChild(container); + certificateStore.uploadCertificate(FILE); expect(notificationServiceMock.notify).toHaveBeenCalledWith( 'Certificate successfully added.\niot.bms.google.com by Google, Inc. valid until 01 Sep 2024', 0, 'certificate-notification', - 10000 + 10000, + container ); }); }); @@ -157,7 +162,8 @@ describe('CertificatesStore', () => { 'File "some very long strange n..." is not added.\nThe file name should be alphanumeric, symbols -_. are allowed.\nFile extension must be .cert, .crt, .pem, .cer.\nMax name length is 24 characters.\nFile size should be a max of 4KB', 0, 'certificate-notification', - 24000 + 24000, + null ); }); }); diff --git a/modules/ui/src/app/pages/certificates/certificates.store.ts b/modules/ui/src/app/pages/certificates/certificates.store.ts index dde05f0fd..21f96eed0 100644 --- a/modules/ui/src/app/pages/certificates/certificates.store.ts +++ b/modules/ui/src/app/pages/certificates/certificates.store.ts @@ -144,7 +144,8 @@ export class CertificatesStore extends ComponentStore { message, 0, 'certificate-notification', - Math.ceil(message.length / SYMBOLS_PER_SECOND) * 1000 + Math.ceil(message.length / SYMBOLS_PER_SECOND) * 1000, + window.document.querySelector('.certificates-drawer-content') ); } diff --git a/modules/ui/src/app/services/notification.service.ts b/modules/ui/src/app/services/notification.service.ts index 7d7a69b6a..4b72105fc 100644 --- a/modules/ui/src/app/services/notification.service.ts +++ b/modules/ui/src/app/services/notification.service.ts @@ -46,7 +46,13 @@ export class NotificationService { private zone: NgZone ) {} - notify(message: string, duration = 0, panelClass = '', timeout = TIMEOUT_MS) { + notify( + message: string, + duration = 0, + panelClass = '', + timeout = TIMEOUT_MS, + container?: Document | Element | null + ) { const panelClasses = ['test-run-notification']; if (panelClass) { panelClasses.push(panelClass); @@ -66,7 +72,9 @@ export class NotificationService { this.snackBarRef .afterDismissed() .pipe(take(1)) - .subscribe(() => this.focusManagerService.focusFirstElementInContainer()); + .subscribe(() => + this.focusManagerService.focusFirstElementInContainer(container) + ); } dismiss() { this.snackBar.dismiss(); From bf13eda8ace077ef2653bb9dbe1782ac8c4411a2 Mon Sep 17 00:00:00 2001 From: kurilova Date: Fri, 31 May 2024 10:07:48 +0000 Subject: [PATCH 2/2] Focus first interactive element in cert container when cert snack bar closed --- .../src/app/pages/certificates/certificates.store.spec.ts | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/modules/ui/src/app/pages/certificates/certificates.store.spec.ts b/modules/ui/src/app/pages/certificates/certificates.store.spec.ts index 29026accf..06e3accf6 100644 --- a/modules/ui/src/app/pages/certificates/certificates.store.spec.ts +++ b/modules/ui/src/app/pages/certificates/certificates.store.spec.ts @@ -142,8 +142,8 @@ describe('CertificatesStore', () => { const container = document.createElement('DIV'); container.classList.add('certificates-drawer-content'); document.querySelector('body')?.appendChild(container); - certificateStore.uploadCertificate(FILE); + expect(notificationServiceMock.notify).toHaveBeenCalledWith( 'Certificate successfully added.\niot.bms.google.com by Google, Inc. valid until 01 Sep 2024', 0, @@ -156,6 +156,9 @@ describe('CertificatesStore', () => { describe('with invalid certificate file', () => { it('should notify about errors', () => { + const container = document.createElement('DIV'); + container.classList.add('certificates-drawer-content'); + document.querySelector('body')?.appendChild(container); certificateStore.uploadCertificate(INVALID_FILE); expect(notificationServiceMock.notify).toHaveBeenCalledWith( @@ -163,7 +166,7 @@ describe('CertificatesStore', () => { 0, 'certificate-notification', 24000, - null + container ); }); });