Skip to content

Commit 657cdb3

Browse files
authored
fix(angular/autocomplete): don't handle enter events with modifier keys (#1029)
Doesn't handle `ENTER` key presses and doesn't prevent their default action, if they have a modifier, in order to avoid interfering with any OS-level shortcuts. angular/components#14717
1 parent 939eb69 commit 657cdb3

File tree

2 files changed

+23
-1
lines changed

2 files changed

+23
-1
lines changed

src/angular/autocomplete/autocomplete-trigger.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -460,7 +460,7 @@ export class SbbAutocompleteTrigger
460460
event.preventDefault();
461461
}
462462

463-
if (this.activeOption && keyCode === ENTER && this.panelOpen) {
463+
if (this.activeOption && keyCode === ENTER && this.panelOpen && !hasModifierKey(event)) {
464464
this.activeOption._selectViaInteraction();
465465
this._resetActiveItem();
466466
event.preventDefault();

src/angular/autocomplete/autocomplete.spec.ts

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1516,6 +1516,28 @@ describe('SbbAutocomplete', () => {
15161516
expect(enterEvent.defaultPrevented).toBe(false, 'Default action should not be prevented.');
15171517
});
15181518

1519+
it('should not interfere with the ENTER key when pressing a modifier', fakeAsync(() => {
1520+
const trigger = fixture.componentInstance.trigger;
1521+
1522+
expect(input.value).toBeFalsy('Expected input to start off blank.');
1523+
expect(trigger.panelOpen).toBe(true, 'Expected panel to start off open.');
1524+
1525+
fixture.componentInstance.trigger._handleKeydown(downArrowEvent);
1526+
flush();
1527+
fixture.detectChanges();
1528+
1529+
Object.defineProperty(enterEvent, 'altKey', { get: () => true });
1530+
fixture.componentInstance.trigger._handleKeydown(enterEvent);
1531+
fixture.detectChanges();
1532+
1533+
expect(trigger.panelOpen).toBe(true, 'Expected panel to remain open.');
1534+
expect(input.value).toBeFalsy('Expected input to remain blank.');
1535+
expect(enterEvent.defaultPrevented).toBe(
1536+
false,
1537+
'Expected the default ENTER action not to have been prevented.'
1538+
);
1539+
}));
1540+
15191541
it('should fill the text field, not select an option, when SPACE is entered', () => {
15201542
typeInElement(input, 'New');
15211543
fixture.detectChanges();

0 commit comments

Comments
 (0)