Skip to content

Commit ee63f63

Browse files
authored
fix(material-experimental/mdc-chips): removing chip on any key press (#19425)
Currently the MDC-based chip emits the `remove` event on any key press on the remove button which seems to have regressed inbetween the different version upgrades and refactors.
1 parent 7037c3a commit ee63f63

File tree

3 files changed

+21
-4
lines changed

3 files changed

+21
-4
lines changed

src/material-experimental/mdc-chips/chip-remove.spec.ts

Lines changed: 18 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ import {
77
import {Component, DebugElement} from '@angular/core';
88
import {By} from '@angular/platform-browser';
99
import {async, ComponentFixture, TestBed} from '@angular/core/testing';
10-
import {SPACE, ENTER} from '@angular/cdk/keycodes';
10+
import {SPACE, ENTER, TAB} from '@angular/cdk/keycodes';
1111
import {MatChip, MatChipsModule} from './index';
1212

1313
describe('MDC-based Chip Remove', () => {
@@ -156,6 +156,23 @@ describe('MDC-based Chip Remove', () => {
156156
expect(event.defaultPrevented).toBe(false);
157157
});
158158

159+
it ('should not remove on any key press', () => {
160+
let buttonElement = chipNativeElement.querySelector('button')!;
161+
162+
testChip.removable = true;
163+
fixture.detectChanges();
164+
165+
spyOn(testChip, 'didRemove');
166+
dispatchKeyboardEvent(buttonElement, 'keydown', TAB);
167+
fixture.detectChanges();
168+
169+
const fakeEvent = createFakeEvent('transitionend');
170+
(fakeEvent as any).propertyName = 'width';
171+
chipNativeElement.dispatchEvent(fakeEvent);
172+
173+
expect(testChip.didRemove).not.toHaveBeenCalled();
174+
});
175+
159176
it('should have a focus indicator', () => {
160177
const buttonElement = chipNativeElement.querySelector('button')!;
161178

src/material-experimental/mdc-chips/chip-row.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -62,7 +62,7 @@ export class MatChipRow extends MatChip implements AfterContentInit, AfterViewIn
6262
cells!: HTMLElement[];
6363

6464
/** Key codes for which this component has a custom handler. */
65-
HANDLED_KEYS = NAVIGATION_KEYS.concat([BACKSPACE, DELETE]);
65+
HANDLED_KEYS: Set<number> = new Set([...NAVIGATION_KEYS, BACKSPACE, DELETE]);
6666

6767
ngAfterContentInit() {
6868
super.ngAfterContentInit();

src/material-experimental/mdc-chips/chip.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -131,7 +131,7 @@ export class MatChip extends _MatChipMixinBase implements AfterContentInit, Afte
131131
/** Emits when the chip is blurred. */
132132
readonly _onBlur = new Subject<MatChipEvent>();
133133

134-
readonly HANDLED_KEYS: number[] = [];
134+
readonly HANDLED_KEYS: Set<number> = new Set([SPACE, ENTER]);
135135

136136
/** Whether this chip is a basic (unstyled) chip. */
137137
readonly _isBasicChip: boolean;
@@ -385,7 +385,7 @@ export class MatChip extends _MatChipMixinBase implements AfterContentInit, Afte
385385
const isKeyboardEvent = event.type.startsWith('key');
386386

387387
if (this.disabled || (isKeyboardEvent &&
388-
this.HANDLED_KEYS.indexOf((event as KeyboardEvent).keyCode) !== -1)) {
388+
!this.HANDLED_KEYS.has((event as KeyboardEvent).keyCode))) {
389389
return;
390390
}
391391

0 commit comments

Comments
 (0)