Skip to content
This repository was archived by the owner on Oct 7, 2020. It is now read-only.

Commit 6537877

Browse files
authored
feat(select): Add output event for blur (#1977)
Adds `@Output() readonly blur = new EventEmitter<any>();` closes #1971
1 parent 1047ae0 commit 6537877

File tree

3 files changed

+21
-4
lines changed

3 files changed

+21
-4
lines changed

demos/src/app/components/select-demo/api.html

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -89,16 +89,20 @@ <h4 mdcSubtitle2>Events</h4>
8989
<tbody>
9090
<tr>
9191
<td>
92-
valueChange(index: number, value: string)
92+
valueChange(index: number, value: any)
9393
</td>
9494
<td>Event emitted on any value change.</td>
9595
</tr>
9696
<tr>
9797
<td>
98-
selectionChange(source: MdcSelect, index: number, value: string)
98+
selectionChange(source: MdcSelect, index: number, value: any)
9999
</td>
100100
<td>Event emitted if user changed the value.</td>
101101
</tr>
102+
<tr>
103+
<td>blur(value: any)</td>
104+
<td>Emitted whenever the select loses focus.</td>
105+
</tr>
102106
</tbody>
103107
</table>
104108
</div>

packages/select/select.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -276,6 +276,7 @@ export class MdcSelect extends _MdcSelectMixinBase implements AfterContentInit,
276276
*/
277277
@Output() readonly valueChange:
278278
EventEmitter<{ index: number, value: any }> = new EventEmitter<any>();
279+
@Output() readonly blur = new EventEmitter<any>();
279280

280281
@ViewChild(MdcFloatingLabel, {static: false}) _floatingLabel?: MdcFloatingLabel;
281282
@ViewChild(MdcLineRipple, {static: false}) _lineRipple?: MdcLineRipple;
@@ -508,6 +509,7 @@ export class MdcSelect extends _MdcSelectMixinBase implements AfterContentInit,
508509
this._foundation.handleBlur();
509510
this._onTouched();
510511
this.focused = false;
512+
this.blur.emit(this.value);
511513
}
512514
}
513515

test/select/select.test.ts

Lines changed: 13 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ import {fakeAsync, ComponentFixture, TestBed, flush} from '@angular/core/testing
1010
import {By} from '@angular/platform-browser';
1111
import {DOWN_ARROW} from '@angular/cdk/keycodes';
1212

13-
import {dispatchKeyboardEvent, dispatchMouseEvent, dispatchTouchEvent} from '../testing/dispatch-events';
13+
import {dispatchKeyboardEvent, dispatchMouseEvent, dispatchTouchEvent, dispatchFakeEvent} from '../testing/dispatch-events';
1414

1515
import {
1616
MdcSelectModule,
@@ -325,6 +325,15 @@ describe('MdcSelectModule', () => {
325325
fixture.detectChanges();
326326
expect(testInstance._menu.open).toBe(true);
327327
}));
328+
329+
it('#should handle blur event', () => {
330+
spyOn(testComponent, 'handleBlur');
331+
fixture.detectChanges();
332+
333+
dispatchFakeEvent(testInstance._selectedText.nativeElement, 'blur');
334+
fixture.detectChanges();
335+
expect(testComponent.handleBlur).toHaveBeenCalledTimes(1);
336+
});
328337
});
329338
});
330339

@@ -481,7 +490,7 @@ class SelectLazyLoad {
481490
template: `
482491
<form [formGroup]="foodForm" id="foodForm" #formDirective="ngForm">
483492
<mdc-select placeholder="Fruit" [helperText]="enhancedHelper" [required]="required"
484-
[disabled]="disabled" [outlined]="outlined">
493+
[disabled]="disabled" [outlined]="outlined" (blur)="handleBlur($event)">
485494
<mdc-menu [open]="open">
486495
<mdc-list>
487496
<mdc-list-item selected></mdc-list-item>
@@ -505,6 +514,8 @@ class EnhancedSelect {
505514
open: boolean;
506515
disabled: boolean;
507516

517+
handleBlur: (event?: any) => void = () => {};
518+
508519
compareFn(f1: any, f2: any): boolean {
509520
return f1 && f2 ? f1.id === f2.id : f1 === f2;
510521
}

0 commit comments

Comments
 (0)