Skip to content

Commit 19df3e7

Browse files
committed
feat(core): Added CheckboxControlValueAccessor
relates #14
1 parent 08259b8 commit 19df3e7

4 files changed

Lines changed: 52 additions & 0 deletions

File tree

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
export { DefaultControlValueAccessorDirective } from './default-control-value-accessor.directive';
22
export { NumberControlValueAccessorDirective } from './number-control-value-accessor.directive';
33
export { RangeControlValueAccessorDirective } from './range-control-value-accessor.directive';
4+
export { CheckboxControlValueAccessorDirective } from './checkbox-control-value-accessor.directive';
45
export { SelectControlValueAccessorDirective, NgqpSelectOptionDirective } from './select-control-value-accessor.directive';
Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,48 @@
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+
}

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

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ export class RangeControlValueAccessorDirective implements ControlValueAccessor
1717
private fnTouched = () => {};
1818

1919
@HostListener('input', ['$event'])
20+
@HostListener('change', ['$event'])
2021
public onInput(event: UIEvent) {
2122
const value = (event.target as HTMLInputElement).value;
2223
this.fnChange(value === '' ? null : parseFloat(value));

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

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ import { NgModule, Type } from '@angular/core';
22
import { QueryParamNameDirective } from './query-param-name.directive';
33
import { QueryParamGroupDirective } from './query-param-group.directive';
44
import {
5+
CheckboxControlValueAccessorDirective,
56
DefaultControlValueAccessorDirective,
67
NgqpSelectOptionDirective,
78
NumberControlValueAccessorDirective,
@@ -17,6 +18,7 @@ const DIRECTIVES: Type<any>[] = [
1718
DefaultControlValueAccessorDirective,
1819
NumberControlValueAccessorDirective,
1920
RangeControlValueAccessorDirective,
21+
CheckboxControlValueAccessorDirective,
2022
SelectControlValueAccessorDirective,
2123
NgqpSelectOptionDirective,
2224
];

0 commit comments

Comments
 (0)