fix(select): not resuming keyboard selection after clicking on single-select option (#11882)

This commit is contained in:
Kristiyan Kostadinov
2018-06-29 18:37:31 +02:00
committed by Joey Perrott
parent 8a5713ebf5
commit 195665fb17
2 changed files with 26 additions and 2 deletions
+22
View File
@@ -282,6 +282,28 @@ describe('MatSelect', () => {
'Expected value from second option to have been set on the model.');
}));
it('should resume focus from selected item after selecting via click', fakeAsync(() => {
const formControl = fixture.componentInstance.control;
const options = fixture.componentInstance.options.toArray();
expect(formControl.value).toBeFalsy('Expected no initial value.');
fixture.componentInstance.select.open();
fixture.detectChanges();
flush();
(overlayContainerElement.querySelectorAll('mat-option')[3] as HTMLElement).click();
fixture.detectChanges();
flush();
expect(formControl.value).toBe(options[3].value);
dispatchKeyboardEvent(select, 'keydown', DOWN_ARROW);
fixture.detectChanges();
expect(formControl.value).toBe(options[4].value);
}));
it('should select options via LEFT/RIGHT arrow keys on a closed select', fakeAsync(() => {
const formControl = fixture.componentInstance.control;
const options = fixture.componentInstance.options.toArray();
+4 -2
View File
@@ -892,12 +892,14 @@ export class MatSelect extends _MatSelectMixinBase implements AfterContentInit,
} else {
option.selected ? this._selectionModel.select(option) : this._selectionModel.deselect(option);
if (isUserInput) {
this._keyManager.setActiveItem(option);
}
if (this.multiple) {
this._sortValues();
if (isUserInput) {
this._keyManager.setActiveItem(option);
// In case the user selected the option with their mouse, we
// want to restore focus back to the trigger, in order to
// prevent the select keyboard controls from clashing with