From 35f1356e13642fc0eae6d59cb905d90367f4a291 Mon Sep 17 00:00:00 2001 From: Andrew Seguin Date: Wed, 19 Jan 2022 10:42:04 -0700 Subject: [PATCH] Revert "fix(cdk/a11y): activeItem out of date if active index is removed from ListKeyManager (#14471)" This reverts commit e61c2fa18cd855b8fafa0ef279de67d6ea33d8bc. --- .../a11y/key-manager/list-key-manager.spec.ts | 17 ++--------------- src/cdk/a11y/key-manager/list-key-manager.ts | 7 ++----- src/material-experimental/mdc-menu/menu.spec.ts | 2 -- src/material/menu/menu.spec.ts | 2 -- 4 files changed, 4 insertions(+), 24 deletions(-) diff --git a/src/cdk/a11y/key-manager/list-key-manager.spec.ts b/src/cdk/a11y/key-manager/list-key-manager.spec.ts index f520db426b05..774cd05779d4 100644 --- a/src/cdk/a11y/key-manager/list-key-manager.spec.ts +++ b/src/cdk/a11y/key-manager/list-key-manager.spec.ts @@ -82,28 +82,15 @@ describe('Key managers', () => { spyOn(keyManager, 'setActiveItem').and.callThrough(); }); - it('should maintain the active item if the amount of items changes', fakeAsync(() => { + it('should maintain the active item if the amount of items changes', () => { expect(keyManager.activeItemIndex).toBe(0); expect(keyManager.activeItem!.getLabel()).toBe('one'); itemList.reset([new FakeFocusable('zero'), ...itemList.toArray()]); itemList.notifyOnChanges(); - tick(); expect(keyManager.activeItemIndex).toBe(1); expect(keyManager.activeItem!.getLabel()).toBe('one'); - })); - - it('should keep the active item in sync if the active item is removed', fakeAsync(() => { - expect(keyManager.activeItemIndex).toBe(0); - expect(keyManager.activeItem!.getLabel()).toBe('one'); - - itemList.reset(itemList.toArray().slice(1)); - itemList.notifyOnChanges(); - tick(); - - expect(keyManager.activeItemIndex).toBe(0); - expect(keyManager.activeItem!.getLabel()).toBe('two'); - })); + }); it('should start off the activeItem as null', () => { expect(new ListKeyManager([]).activeItem).toBeNull(); diff --git a/src/cdk/a11y/key-manager/list-key-manager.ts b/src/cdk/a11y/key-manager/list-key-manager.ts index 2bb9a260698b..8f64379dcbe3 100644 --- a/src/cdk/a11y/key-manager/list-key-manager.ts +++ b/src/cdk/a11y/key-manager/list-key-manager.ts @@ -70,11 +70,8 @@ export class ListKeyManager { const itemArray = newItems.toArray(); const newIndex = itemArray.indexOf(this._activeItem); - if (newIndex !== this._activeItemIndex) { - // Timeout is required to avoid "changed after checked" errors. - setTimeout(() => { - this.setActiveItem(newIndex > -1 ? newIndex : this._activeItemIndex); - }, 0); + if (newIndex > -1 && newIndex !== this._activeItemIndex) { + this._activeItemIndex = newIndex; } } }); diff --git a/src/material-experimental/mdc-menu/menu.spec.ts b/src/material-experimental/mdc-menu/menu.spec.ts index e5535fa5aa8e..3143f9a86a3e 100644 --- a/src/material-experimental/mdc-menu/menu.spec.ts +++ b/src/material-experimental/mdc-menu/menu.spec.ts @@ -1176,7 +1176,6 @@ describe('MDC-based MatMenu', () => { fixture.detectChanges(); tick(500); fixture.detectChanges(); - tick(); expect(fixture.componentInstance.items.length).toBe(0); })); @@ -1202,7 +1201,6 @@ describe('MDC-based MatMenu', () => { .toBe(true); tick(500); fixture.detectChanges(); - tick(); expect(trigger.menuOpen).withContext('Expected menu to be closed').toBe(false); })); diff --git a/src/material/menu/menu.spec.ts b/src/material/menu/menu.spec.ts index 3d0ba55be20c..1adb1fd42934 100644 --- a/src/material/menu/menu.spec.ts +++ b/src/material/menu/menu.spec.ts @@ -1171,7 +1171,6 @@ describe('MatMenu', () => { fixture.detectChanges(); tick(500); fixture.detectChanges(); - tick(); expect(fixture.componentInstance.items.length).toBe(0); })); @@ -1197,7 +1196,6 @@ describe('MatMenu', () => { .toBe(true); tick(500); fixture.detectChanges(); - tick(); expect(trigger.menuOpen).withContext('Expected menu to be closed').toBe(false); }));