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