From 4113eeb2abd9716b1e6da4a9765aa01ad7e83446 Mon Sep 17 00:00:00 2001 From: Michaela <85624192+mkrbr@users.noreply.github.com> Date: Fri, 2 Jan 2026 11:04:18 +0100 Subject: [PATCH] Allows closing dropdown with Escape key (#11489) Implements the ability to close the dropdown list by pressing the Escape key. This enhances the user experience by providing a keyboard shortcut to dismiss the dropdown, improving accessibility and efficiency. --- .../dropdown/dropdown-cloud.widget.html | 2 ++ .../dropdown/dropdown-cloud.widget.spec.ts | 19 +++++++++++++++++++ 2 files changed, 21 insertions(+) diff --git a/lib/process-services-cloud/src/lib/form/components/widgets/dropdown/dropdown-cloud.widget.html b/lib/process-services-cloud/src/lib/form/components/widgets/dropdown/dropdown-cloud.widget.html index a23f75a89e..828e727acb 100644 --- a/lib/process-services-cloud/src/lib/form/components/widgets/dropdown/dropdown-cloud.widget.html +++ b/lib/process-services-cloud/src/lib/form/components/widgets/dropdown/dropdown-cloud.widget.html @@ -24,6 +24,8 @@ [multiple]="field.hasMultipleValues" [disabled]="field.readOnly" [required]="field.required" + #select + (keydown.escape)="select.close()" > diff --git a/lib/process-services-cloud/src/lib/form/components/widgets/dropdown/dropdown-cloud.widget.spec.ts b/lib/process-services-cloud/src/lib/form/components/widgets/dropdown/dropdown-cloud.widget.spec.ts index b030a4a81c..44c05633eb 100644 --- a/lib/process-services-cloud/src/lib/form/components/widgets/dropdown/dropdown-cloud.widget.spec.ts +++ b/lib/process-services-cloud/src/lib/form/components/widgets/dropdown/dropdown-cloud.widget.spec.ts @@ -187,6 +187,25 @@ describe('DropdownCloudWidgetComponent', () => { expect(formCloudService.getRestWidgetData).not.toHaveBeenCalled(); }); + it('should close dropdown when Escape key is pressed', async () => { + const dropdown = await loader.getHarness(MatSelectHarness.with({ selector: '.adf-select' })); + await dropdown.open(); + + const filterInput = fixture.debugElement.query(By.css('.adf-select')); + filterInput.nativeElement.focus(); + filterInput.nativeElement.dispatchEvent( + new KeyboardEvent('keydown', { + key: 'Escape', + code: 'Escape', + bubbles: true + }) + ); + + fixture.detectChanges(); + + expect(await dropdown.isOpen()).toBeFalse(); + }); + describe('should load data from restUrl when form is NOT readonly', () => { beforeEach(() => { spyOn(formCloudService, 'getRestWidgetData').and.returnValue(of([]));