Skip to content

Commit 08259b8

Browse files
committed
feat(core): Added RangeControlValueAccessor
relates #14
1 parent 5fcb4cf commit 08259b8

4 files changed

Lines changed: 53 additions & 1 deletion

File tree

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
11
export { DefaultControlValueAccessorDirective } from './default-control-value-accessor.directive';
22
export { NumberControlValueAccessorDirective } from './number-control-value-accessor.directive';
3+
export { RangeControlValueAccessorDirective } from './range-control-value-accessor.directive';
34
export { SelectControlValueAccessorDirective, NgqpSelectOptionDirective } from './select-control-value-accessor.directive';

projects/ngqp/core/src/lib/accessors/number-control-value-accessor.directive.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@ export class NumberControlValueAccessorDirective implements ControlValueAccessor
3131
constructor(private renderer: Renderer2, private elementRef: ElementRef) {
3232
}
3333

34-
public writeValue(value: string) {
34+
public writeValue(value: any) {
3535
const normalizedValue = value === null ? '' : value;
3636
this.renderer.setProperty(this.elementRef.nativeElement, 'value', normalizedValue);
3737
}
Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,49 @@
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+
}

projects/ngqp/core/src/lib/query-param.module.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ import {
55
DefaultControlValueAccessorDirective,
66
NgqpSelectOptionDirective,
77
NumberControlValueAccessorDirective,
8+
RangeControlValueAccessorDirective,
89
SelectControlValueAccessorDirective
910
} from './accessors/accessors';
1011

@@ -15,6 +16,7 @@ const DIRECTIVES: Type<any>[] = [
1516
// Accessors
1617
DefaultControlValueAccessorDirective,
1718
NumberControlValueAccessorDirective,
19+
RangeControlValueAccessorDirective,
1820
SelectControlValueAccessorDirective,
1921
NgqpSelectOptionDirective,
2022
];

0 commit comments

Comments
 (0)