From 15892ff2220cc5b1ef537c39c2d1130b6c590dd4 Mon Sep 17 00:00:00 2001 From: crisbeto Date: Sun, 15 Oct 2017 16:18:09 +0200 Subject: [PATCH] fix(select): active item not being updated on click in multiple mode Fixes the active option not being updated when the user clicks inside a multi-select, causing it to be stuck on the first option. --- src/lib/select/select.spec.ts | 16 ++++++++++++++++ src/lib/select/select.ts | 1 + 2 files changed, 17 insertions(+) diff --git a/src/lib/select/select.spec.ts b/src/lib/select/select.spec.ts index 83038234601e..55fe582fe39d 100644 --- a/src/lib/select/select.spec.ts +++ b/src/lib/select/select.spec.ts @@ -3458,6 +3458,22 @@ describe('MatSelect', () => { 'Expected `multiple` to have been set on dynamically-added option.'); })); + it('should update the active item index on click', fakeAsync(() => { + trigger.click(); + fixture.detectChanges(); + flush(); + + expect(fixture.componentInstance.select._keyManager.activeItemIndex).toBe(0); + + const options = overlayContainerElement.querySelectorAll('mat-option') as + NodeListOf; + + options[2].click(); + fixture.detectChanges(); + + expect(fixture.componentInstance.select._keyManager.activeItemIndex).toBe(2); + })); + }); }); diff --git a/src/lib/select/select.ts b/src/lib/select/select.ts index 778f16bc8764..f22f06989f9f 100644 --- a/src/lib/select/select.ts +++ b/src/lib/select/select.ts @@ -852,6 +852,7 @@ export class MatSelect extends _MatSelectMixinBase implements AfterContentInit, this._selectionModel.toggle(option); this.stateChanges.next(); wasSelected ? option.deselect() : option.select(); + this._keyManager.setActiveItem(this._getOptionIndex(option)!); this._sortValues(); } else { this._clearSelection(option.value == null ? undefined : option);