1+ import { ControlValueAccessor , NG_VALUE_ACCESSOR } from '@angular/forms' ;
2+ import { Directive , ElementRef , forwardRef , HostListener , Renderer2 } from '@angular/core' ;
3+
4+ export const NGQP_CHECKBOX_VALUE_ACCESSOR : any = {
5+ provide : NG_VALUE_ACCESSOR ,
6+ useExisting : forwardRef ( ( ) => CheckboxControlValueAccessorDirective ) ,
7+ multi : true
8+ } ;
9+
10+ @Directive ( {
11+ selector : 'input[type=checkbox][queryParamName]' ,
12+ providers : [ NGQP_CHECKBOX_VALUE_ACCESSOR ] ,
13+ } )
14+ export class CheckboxControlValueAccessorDirective implements ControlValueAccessor {
15+
16+ private fnChange = ( _ : boolean ) => { } ;
17+ private fnTouched = ( ) => { } ;
18+
19+ @HostListener ( 'change' , [ '$event' ] )
20+ public onInput ( event : UIEvent ) {
21+ this . fnChange ( ( event . target as HTMLInputElement ) . checked ) ;
22+ }
23+
24+ @HostListener ( 'blur' )
25+ public onBlur ( ) {
26+ this . fnTouched ( ) ;
27+ }
28+
29+ constructor ( private renderer : Renderer2 , private elementRef : ElementRef ) {
30+ }
31+
32+ public writeValue ( value : any ) {
33+ this . renderer . setProperty ( this . elementRef . nativeElement , 'checked' , value ) ;
34+ }
35+
36+ public registerOnChange ( fn : any ) {
37+ this . fnChange = fn ;
38+ }
39+
40+ public registerOnTouched ( fn : any ) {
41+ this . fnTouched = fn ;
42+ }
43+
44+ public setDisabledState ( isDisabled : boolean ) {
45+ this . renderer . setProperty ( this . elementRef . nativeElement , 'disabled' , isDisabled ) ;
46+ }
47+
48+ }
0 commit comments