From 4ba0e7c0cf474d4c5d4315ee441ee77e4a182edc Mon Sep 17 00:00:00 2001 From: sis0k0 Date: Fri, 9 Jun 2017 02:19:59 +0300 Subject: [PATCH 1/3] fix(forms): add (touch) event for controls fixes #804 --- nativescript-angular/tslint.json | 1 - .../value-accessors/checked-value-accessor.ts | 29 +++++++------ .../value-accessors/date-value-accessor.ts | 30 ++++++++------ .../value-accessors/number-value-accessor.ts | 29 +++++++------ .../selectedIndex-value-accessor.ts | 41 +++++++++++++------ .../value-accessors/text-value-accessor.ts | 41 +++++++++++++------ .../value-accessors/time-value-accessor.ts | 29 ++++++++----- 7 files changed, 128 insertions(+), 72 deletions(-) diff --git a/nativescript-angular/tslint.json b/nativescript-angular/tslint.json index faae1470c..4a49adfe4 100644 --- a/nativescript-angular/tslint.json +++ b/nativescript-angular/tslint.json @@ -7,7 +7,6 @@ "component-selector": [true, "element", "", "camelCase"], "use-input-property-decorator": true, "use-output-property-decorator": true, - "use-host-property-decorator": true, "no-input-rename": true, "no-output-rename": true, "use-pipe-transform-interface": true, diff --git a/nativescript-angular/value-accessors/checked-value-accessor.ts b/nativescript-angular/value-accessors/checked-value-accessor.ts index 9b4237bcd..627abacdf 100644 --- a/nativescript-angular/value-accessors/checked-value-accessor.ts +++ b/nativescript-angular/value-accessors/checked-value-accessor.ts @@ -1,10 +1,13 @@ -import { Directive, ElementRef, forwardRef, HostListener } from "@angular/core"; +import { Directive, ElementRef, forwardRef } from "@angular/core"; import { NG_VALUE_ACCESSOR } from "@angular/forms"; import { BaseValueAccessor } from "./base-value-accessor"; import { Switch } from "tns-core-modules/ui/switch"; -const CHECKED_VALUE_ACCESSOR = {provide: NG_VALUE_ACCESSOR, - useExisting: forwardRef(() => CheckedValueAccessor), multi: true}; +const CHECKED_VALUE_ACCESSOR = { + provide: NG_VALUE_ACCESSOR, + useExisting: forwardRef(() => CheckedValueAccessor), + multi: true, +}; /** * The accessor for setting a checked property and listening to changes that is used by the @@ -16,17 +19,18 @@ const CHECKED_VALUE_ACCESSOR = {provide: NG_VALUE_ACCESSOR, * ``` */ @Directive({ - // tslint:disable-next-line:max-line-length directive-selector - selector: "Switch[ngModel], Switch[formControlName], switch[ngModel], switch[formControlName], switch[ngModel], switch[formControlName]", - providers: [CHECKED_VALUE_ACCESSOR] + selector: + "Switch[ngModel],Switch[formControlName]," + + "switch[ngModel],switch[formControlName]", + providers: [CHECKED_VALUE_ACCESSOR], + host: { + "(touch)": "onTouched()", + "(checkedChange)": "onChange($event.value)", + }, }) export class CheckedValueAccessor extends BaseValueAccessor { // tslint:disable-line:directive-class-suffix - @HostListener("checkedChange", ["$event"]) - checkedChangeListener(event: any) { - this.onChange(event.value); - } - - onTouched = () => { }; + onChange = (_: any) => {}; + onTouched = () => {}; constructor(elementRef: ElementRef) { super(elementRef.nativeElement); @@ -36,5 +40,6 @@ export class CheckedValueAccessor extends BaseValueAccessor { // tslint: this.view.checked = value; } + registerOnChange(fn: (_: any) => {}): void { this.onChange = fn; } registerOnTouched(fn: () => void): void { this.onTouched = fn; } } diff --git a/nativescript-angular/value-accessors/date-value-accessor.ts b/nativescript-angular/value-accessors/date-value-accessor.ts index 66e312d68..508f562a3 100644 --- a/nativescript-angular/value-accessors/date-value-accessor.ts +++ b/nativescript-angular/value-accessors/date-value-accessor.ts @@ -1,10 +1,13 @@ -import { Directive, ElementRef, forwardRef, HostListener } from "@angular/core"; +import { Directive, ElementRef, forwardRef } from "@angular/core"; import { NG_VALUE_ACCESSOR } from "@angular/forms"; import { BaseValueAccessor } from "./base-value-accessor"; import { DatePicker } from "tns-core-modules/ui/date-picker"; -const DATE_VALUE_ACCESSOR = {provide: NG_VALUE_ACCESSOR, - useExisting: forwardRef(() => DateValueAccessor), multi: true}; +const DATE_VALUE_ACCESSOR = { + provide: NG_VALUE_ACCESSOR, + useExisting: forwardRef(() => DateValueAccessor), + multi: true, +}; /** * The accessor for setting a date and listening to changes that is used by the @@ -16,17 +19,19 @@ const DATE_VALUE_ACCESSOR = {provide: NG_VALUE_ACCESSOR, * ``` */ @Directive({ - // tslint:disable-next-line:max-line-length directive-selector - selector: "DatePicker[ngModel], DatePicker[formControlName], datePicker[ngModel], datePicker[formControlName], date-picker[ngModel], date-picker[formControlName]", - providers: [DATE_VALUE_ACCESSOR] + selector: "DatePicker[ngModel],DatePicker[formControlName]," + + "datepicker[ngModel],datepicker[formControlName]," + + "datePicker[ngModel],datePicker[formControlName]," + + "date-picker[ngModel],date-picker[formControlName]", + providers: [DATE_VALUE_ACCESSOR], + host: { + "(touch)": "onTouched()", + "(dateChange)": "onChange($event.value)", + }, }) export class DateValueAccessor extends BaseValueAccessor { // tslint:disable-line:directive-class-suffix - @HostListener("dateChange", ["$event"]) - dateChangeListener(event: any) { - this.onChange(event.value); - } - - onTouched = () => { }; + onChange = (_: any) => {}; + onTouched = () => {}; constructor(elementRef: ElementRef) { super(elementRef.nativeElement); @@ -36,5 +41,6 @@ export class DateValueAccessor extends BaseValueAccessor { // tslint this.view.date = value; } + registerOnChange(fn: (_: any) => {}): void { this.onChange = fn; } registerOnTouched(fn: () => void): void { this.onTouched = fn; } } diff --git a/nativescript-angular/value-accessors/number-value-accessor.ts b/nativescript-angular/value-accessors/number-value-accessor.ts index 28a528585..a1b001ffe 100644 --- a/nativescript-angular/value-accessors/number-value-accessor.ts +++ b/nativescript-angular/value-accessors/number-value-accessor.ts @@ -1,10 +1,13 @@ -import { Directive, ElementRef, forwardRef, HostListener } from "@angular/core"; +import { Directive, ElementRef, forwardRef } from "@angular/core"; import { NG_VALUE_ACCESSOR } from "@angular/forms"; import { BaseValueAccessor } from "./base-value-accessor"; import { Slider } from "tns-core-modules/ui/slider"; -const NUMBER_VALUE_ACCESSOR = {provide: NG_VALUE_ACCESSOR, - useExisting: forwardRef(() => NumberValueAccessor), multi: true}; +const NUMBER_VALUE_ACCESSOR = { + provide: NG_VALUE_ACCESSOR, + useExisting: forwardRef(() => NumberValueAccessor), + multi: true, +}; /** * The accessor for setting a value and listening to changes that is used by the @@ -16,17 +19,18 @@ const NUMBER_VALUE_ACCESSOR = {provide: NG_VALUE_ACCESSOR, * ``` */ @Directive({ - // tslint:disable-next-line:max-line-length directive-selector - selector: "Slider[ngModel], Slider[formControlName], slider[ngModel], slider[formControlName], slider[ngModel], slider[formControlName]", - providers: [NUMBER_VALUE_ACCESSOR] + selector: + "Slider[ngModel],Slider[formControlName]," + + "slider[ngModel],slider[formControlName]", + providers: [NUMBER_VALUE_ACCESSOR], + host: { + "(touch)": "onTouched()", + "(valueChange)": "onChange($event.value)", + }, }) export class NumberValueAccessor extends BaseValueAccessor { // tslint:disable-line:directive-class-suffix - @HostListener("valueChange", ["$event"]) - valueChangeListener(event: any) { - this.onChange(event.value); - } - - onTouched = () => { }; + onChange = (_: any) => {}; + onTouched = () => {}; constructor(elementRef: ElementRef) { super(elementRef.nativeElement); @@ -36,5 +40,6 @@ export class NumberValueAccessor extends BaseValueAccessor { // tslint:d this.view.value = value; } + registerOnChange(fn: (_: any) => {}): void { this.onChange = fn; } registerOnTouched(fn: () => void): void { this.onTouched = fn; } } diff --git a/nativescript-angular/value-accessors/selectedIndex-value-accessor.ts b/nativescript-angular/value-accessors/selectedIndex-value-accessor.ts index 521ecbc83..88a102a96 100644 --- a/nativescript-angular/value-accessors/selectedIndex-value-accessor.ts +++ b/nativescript-angular/value-accessors/selectedIndex-value-accessor.ts @@ -1,10 +1,13 @@ -import { Directive, ElementRef, forwardRef, AfterViewInit, HostListener } from "@angular/core"; +import { Directive, ElementRef, forwardRef, AfterViewInit } from "@angular/core"; import { NG_VALUE_ACCESSOR } from "@angular/forms"; import { BaseValueAccessor } from "./base-value-accessor"; import { View } from "tns-core-modules/ui/core/view"; -const SELECTED_INDEX_VALUE_ACCESSOR = {provide: NG_VALUE_ACCESSOR, - useExisting: forwardRef(() => SelectedIndexValueAccessor), multi: true}; +const SELECTED_INDEX_VALUE_ACCESSOR = { + provide: NG_VALUE_ACCESSOR, + useExisting: forwardRef(() => SelectedIndexValueAccessor), + multi: true, +}; export type SelectableView = {selectedIndex: number} & View; @@ -18,17 +21,30 @@ export type SelectableView = {selectedIndex: number} & View; * ``` */ @Directive({ - // tslint:disable-next-line:max-line-length directive-selector - selector: "SegmentedBar[ngModel], SegmentedBar[formControlName], segmentedBar[ngModel], segmentedBar[formControlName], segmented-bar[ngModel], segmented-bar[formControlName], ListPicker[ngModel], ListPicker[formControlName], listPicker[ngModel], listPicker[formControlName], list-picker[ngModel], list-picker[formControlName], TabView[ngModel], TabView[formControlName], tabView[ngModel], tabView[formControlName], tab-view[ngModel], tab-view[formControlName]", - providers: [SELECTED_INDEX_VALUE_ACCESSOR] + selector: + "SegmentedBar[ngModel],SegmentedBar[formControlName]," + + "segmentedBar[ngModel],segmentedBar[formControlName]," + + "segmentedbar[ngModel],segmentedbar[formControlName]," + + "segmented-bar[ngModel],segmented-bar[formControlName]," + + + "ListPicker[ngModel],ListPicker[formControlName]," + + "listPicker[ngModel],listPicker[formControlName]," + + "listpicker[ngModel],listpicker[formControlName]," + + "list-picker[ngModel],list-picker[formControlName]," + + + "TabView[ngModel],TabView[formControlName]," + + "tabView[ngModel],tabView[formControlName]," + + "tabview[ngModel],tabview[formControlName]," + + "tab-view[ngModel],tab-view[formControlName]", + providers: [SELECTED_INDEX_VALUE_ACCESSOR], + host: { + "(touch)": "onTouched()", + "(selectedIndexChange)": "onChange($event.value)", + }, }) export class SelectedIndexValueAccessor extends BaseValueAccessor implements AfterViewInit { // tslint:disable-line:max-line-length directive-class-suffix - @HostListener("selectedIndexChange", ["$event"]) - selectedIndexChangeListener(event: any) { - this.onChange(event.value); - } - - onTouched = () => { }; + onChange = (_: any) => {}; + onTouched = () => {}; constructor(elementRef: ElementRef) { super(elementRef.nativeElement); @@ -49,5 +65,6 @@ export class SelectedIndexValueAccessor extends BaseValueAccessor {}): void { this.onChange = fn; } registerOnTouched(fn: () => void): void { this.onTouched = fn; } } diff --git a/nativescript-angular/value-accessors/text-value-accessor.ts b/nativescript-angular/value-accessors/text-value-accessor.ts index 17fb0e845..117ed1b58 100644 --- a/nativescript-angular/value-accessors/text-value-accessor.ts +++ b/nativescript-angular/value-accessors/text-value-accessor.ts @@ -1,10 +1,13 @@ -import { Directive, ElementRef, forwardRef, HostListener } from "@angular/core"; +import { Directive, ElementRef, forwardRef } from "@angular/core"; import { NG_VALUE_ACCESSOR } from "@angular/forms"; import { BaseValueAccessor } from "./base-value-accessor"; import { View } from "tns-core-modules/ui/core/view"; -const TEXT_VALUE_ACCESSOR = {provide: NG_VALUE_ACCESSOR, - useExisting: forwardRef(() => TextValueAccessor), multi: true}; +const TEXT_VALUE_ACCESSOR = { + provide: NG_VALUE_ACCESSOR, + useExisting: forwardRef(() => TextValueAccessor), + multi: true, +}; export type TextView = {text: string} & View; @@ -18,17 +21,30 @@ export type TextView = {text: string} & View; * ``` */ @Directive({ - // tslint:disable-next-line:max-line-length directive-selector - selector: "TextField[ngModel], TextField[formControlName], textField[ngModel], textField[formControlName], text-field[ngModel], text-field[formControlName], TextView[ngModel], TextView[formControlName], textView[ngModel], textView[formControlName], text-view[ngModel], text-view[formControlName], SearchBar[ngModel], SearchBar[formControlName], searchBar[ngModel], searchBar[formControlName], search-bar[ngModel], search-bar[formControlName]", - providers: [TEXT_VALUE_ACCESSOR] + selector: + "TextField[ngModel],TextField[formControlName]," + + "textField[ngModel],textField[formControlName]," + + "textfield[ngModel],textfield[formControlName]," + + "text-field[ngModel],text-field[formControlName]," + + + "TextView[ngModel],TextView[formControlName]," + + "textView[ngModel],textView[formControlName]," + + "textview[ngModel],textview[formControlName]," + + "text-view[ngModel],text-view[formControlName]," + + + "SearchBar[ngModel],SearchBar[formControlName]," + + "searchBar[ngModel],searchBar[formControlName]," + + "searchbar[ngModel],searchbar[formControlName]," + + "search-bar[ngModel], search-bar[formControlName]", + providers: [TEXT_VALUE_ACCESSOR], + host: { + "(touch)": "onTouch()", + "(textChange)": "onChange(event.value)", + }, }) export class TextValueAccessor extends BaseValueAccessor { // tslint:disable-line:directive-class-suffix - @HostListener("textChange", ["$event"]) - textChangeListener(event: any) { - this.onChange(event.value); - } - - onTouched = () => { }; + onChange = (_: any) => {}; + onTouched = () => {}; constructor(elementRef: ElementRef) { super(elementRef.nativeElement); @@ -38,5 +54,6 @@ export class TextValueAccessor extends BaseValueAccessor { // tslint:d this.view.text = value; } + registerOnChange(fn: (_: any) => {}): void { this.onChange = fn; } registerOnTouched(fn: () => void): void { this.onTouched = fn; } } diff --git a/nativescript-angular/value-accessors/time-value-accessor.ts b/nativescript-angular/value-accessors/time-value-accessor.ts index 1e6cde347..7bbe0724c 100644 --- a/nativescript-angular/value-accessors/time-value-accessor.ts +++ b/nativescript-angular/value-accessors/time-value-accessor.ts @@ -1,10 +1,13 @@ -import { Directive, ElementRef, forwardRef, HostListener } from "@angular/core"; +import { Directive, ElementRef, forwardRef } from "@angular/core"; import { NG_VALUE_ACCESSOR } from "@angular/forms"; import { BaseValueAccessor } from "./base-value-accessor"; import { TimePicker } from "tns-core-modules/ui/time-picker"; -const TIME_VALUE_ACCESSOR = {provide: NG_VALUE_ACCESSOR, - useExisting: forwardRef(() => TimeValueAccessor), multi: true}; +const TIME_VALUE_ACCESSOR = { + provide: NG_VALUE_ACCESSOR, + useExisting: forwardRef(() => TimeValueAccessor), + multi: true, +}; /** * The accessor for setting a time and listening to changes that is used by the @@ -16,16 +19,19 @@ const TIME_VALUE_ACCESSOR = {provide: NG_VALUE_ACCESSOR, * ``` */ @Directive({ - // tslint:disable-next-line:max-line-length directive-selector - selector: "TimePicker[ngModel], TimePicker[formControlName], timePicker[ngModel], timePicker[formControlName], time-picker[ngModel], time-picker[formControlName]", - providers: [TIME_VALUE_ACCESSOR] + selector: + "TimePicker[ngModel],TimePicker[formControlName]," + + "timepicker[ngModel],timepicker[formControlName]," + + "timePicker[ngModel],timePicker[formControlName]," + + "time-picker[ngModel], time-picker[formControlName]", + providers: [TIME_VALUE_ACCESSOR], + host: { + "(touch)": "onTouch()", + "(timeChange)": "onChange($event.value)", + }, }) export class TimeValueAccessor extends BaseValueAccessor { // tslint:disable-line:directive-class-suffix - @HostListener("timeChange", ["$event"]) - timeChangeListener(event: any) { - this.onChange(event.value); - } - + onChange = (_: any) => {}; onTouched = () => { }; constructor(elementRef: ElementRef) { @@ -36,5 +42,6 @@ export class TimeValueAccessor extends BaseValueAccessor { // tslint this.view.time = value; } + registerOnChange(fn: (_: any) => {}): void { this.onChange = fn; } registerOnTouched(fn: () => void): void { this.onTouched = fn; } } From 5d2e4e0ae2d03e6a80cf9fe6807dae34124f70ac Mon Sep 17 00:00:00 2001 From: sis0k0 Date: Fri, 9 Jun 2017 13:59:59 +0300 Subject: [PATCH 2/3] fix(forms): extract on-touch logic to BaseValueAccessor --- .../value-accessors/base-value-accessor.ts | 15 ++++++--------- .../value-accessors/checked-value-accessor.ts | 6 ------ .../value-accessors/date-value-accessor.ts | 6 ------ .../value-accessors/number-value-accessor.ts | 6 ------ .../selectedIndex-value-accessor.ts | 7 +------ .../value-accessors/text-value-accessor.ts | 10 ++-------- .../value-accessors/time-value-accessor.ts | 6 ------ 7 files changed, 9 insertions(+), 47 deletions(-) diff --git a/nativescript-angular/value-accessors/base-value-accessor.ts b/nativescript-angular/value-accessors/base-value-accessor.ts index 06df0584c..679bd2f77 100644 --- a/nativescript-angular/value-accessors/base-value-accessor.ts +++ b/nativescript-angular/value-accessors/base-value-accessor.ts @@ -1,10 +1,11 @@ import { ControlValueAccessor } from "@angular/forms"; export class BaseValueAccessor implements ControlValueAccessor { - constructor(public view: TView) { } - - onChange = (_) => { }; private pendingChangeNotification: number = 0; + onChange = (_) => { }; + onTouched = () => {}; + + constructor(public view: TView) { } registerOnChange(fn: (_: any) => void): void { this.onChange = (arg) => { @@ -18,11 +19,7 @@ export class BaseValueAccessor implements ControlValueAccessor { }; } - writeValue(_: any) { - // - } + registerOnTouched(fn: () => void): void { this.onTouched = fn; } - registerOnTouched(_: () => void): void { - // - } + writeValue(_: any) { } } diff --git a/nativescript-angular/value-accessors/checked-value-accessor.ts b/nativescript-angular/value-accessors/checked-value-accessor.ts index 627abacdf..85d8a1a2c 100644 --- a/nativescript-angular/value-accessors/checked-value-accessor.ts +++ b/nativescript-angular/value-accessors/checked-value-accessor.ts @@ -29,9 +29,6 @@ const CHECKED_VALUE_ACCESSOR = { }, }) export class CheckedValueAccessor extends BaseValueAccessor { // tslint:disable-line:directive-class-suffix - onChange = (_: any) => {}; - onTouched = () => {}; - constructor(elementRef: ElementRef) { super(elementRef.nativeElement); } @@ -39,7 +36,4 @@ export class CheckedValueAccessor extends BaseValueAccessor { // tslint: writeValue(value: any): void { this.view.checked = value; } - - registerOnChange(fn: (_: any) => {}): void { this.onChange = fn; } - registerOnTouched(fn: () => void): void { this.onTouched = fn; } } diff --git a/nativescript-angular/value-accessors/date-value-accessor.ts b/nativescript-angular/value-accessors/date-value-accessor.ts index 508f562a3..4541f9bb9 100644 --- a/nativescript-angular/value-accessors/date-value-accessor.ts +++ b/nativescript-angular/value-accessors/date-value-accessor.ts @@ -30,9 +30,6 @@ const DATE_VALUE_ACCESSOR = { }, }) export class DateValueAccessor extends BaseValueAccessor { // tslint:disable-line:directive-class-suffix - onChange = (_: any) => {}; - onTouched = () => {}; - constructor(elementRef: ElementRef) { super(elementRef.nativeElement); } @@ -40,7 +37,4 @@ export class DateValueAccessor extends BaseValueAccessor { // tslint writeValue(value: any): void { this.view.date = value; } - - registerOnChange(fn: (_: any) => {}): void { this.onChange = fn; } - registerOnTouched(fn: () => void): void { this.onTouched = fn; } } diff --git a/nativescript-angular/value-accessors/number-value-accessor.ts b/nativescript-angular/value-accessors/number-value-accessor.ts index a1b001ffe..224a9790a 100644 --- a/nativescript-angular/value-accessors/number-value-accessor.ts +++ b/nativescript-angular/value-accessors/number-value-accessor.ts @@ -29,9 +29,6 @@ const NUMBER_VALUE_ACCESSOR = { }, }) export class NumberValueAccessor extends BaseValueAccessor { // tslint:disable-line:directive-class-suffix - onChange = (_: any) => {}; - onTouched = () => {}; - constructor(elementRef: ElementRef) { super(elementRef.nativeElement); } @@ -39,7 +36,4 @@ export class NumberValueAccessor extends BaseValueAccessor { // tslint:d writeValue(value: any): void { this.view.value = value; } - - registerOnChange(fn: (_: any) => {}): void { this.onChange = fn; } - registerOnTouched(fn: () => void): void { this.onTouched = fn; } } diff --git a/nativescript-angular/value-accessors/selectedIndex-value-accessor.ts b/nativescript-angular/value-accessors/selectedIndex-value-accessor.ts index 88a102a96..462d294dc 100644 --- a/nativescript-angular/value-accessors/selectedIndex-value-accessor.ts +++ b/nativescript-angular/value-accessors/selectedIndex-value-accessor.ts @@ -43,9 +43,6 @@ export type SelectableView = {selectedIndex: number} & View; }, }) export class SelectedIndexValueAccessor extends BaseValueAccessor implements AfterViewInit { // tslint:disable-line:max-line-length directive-class-suffix - onChange = (_: any) => {}; - onTouched = () => {}; - constructor(elementRef: ElementRef) { super(elementRef.nativeElement); } @@ -55,6 +52,7 @@ export class SelectedIndexValueAccessor extends BaseValueAccessor {}): void { this.onChange = fn; } - registerOnTouched(fn: () => void): void { this.onTouched = fn; } } diff --git a/nativescript-angular/value-accessors/text-value-accessor.ts b/nativescript-angular/value-accessors/text-value-accessor.ts index 117ed1b58..03688b27e 100644 --- a/nativescript-angular/value-accessors/text-value-accessor.ts +++ b/nativescript-angular/value-accessors/text-value-accessor.ts @@ -38,14 +38,11 @@ export type TextView = {text: string} & View; "search-bar[ngModel], search-bar[formControlName]", providers: [TEXT_VALUE_ACCESSOR], host: { - "(touch)": "onTouch()", - "(textChange)": "onChange(event.value)", + "(touch)": "onTouched()", + "(textChange)": "onChange($event.value)", }, }) export class TextValueAccessor extends BaseValueAccessor { // tslint:disable-line:directive-class-suffix - onChange = (_: any) => {}; - onTouched = () => {}; - constructor(elementRef: ElementRef) { super(elementRef.nativeElement); } @@ -53,7 +50,4 @@ export class TextValueAccessor extends BaseValueAccessor { // tslint:d writeValue(value: any): void { this.view.text = value; } - - registerOnChange(fn: (_: any) => {}): void { this.onChange = fn; } - registerOnTouched(fn: () => void): void { this.onTouched = fn; } } diff --git a/nativescript-angular/value-accessors/time-value-accessor.ts b/nativescript-angular/value-accessors/time-value-accessor.ts index 7bbe0724c..61539fdec 100644 --- a/nativescript-angular/value-accessors/time-value-accessor.ts +++ b/nativescript-angular/value-accessors/time-value-accessor.ts @@ -31,9 +31,6 @@ const TIME_VALUE_ACCESSOR = { }, }) export class TimeValueAccessor extends BaseValueAccessor { // tslint:disable-line:directive-class-suffix - onChange = (_: any) => {}; - onTouched = () => { }; - constructor(elementRef: ElementRef) { super(elementRef.nativeElement); } @@ -41,7 +38,4 @@ export class TimeValueAccessor extends BaseValueAccessor { // tslint writeValue(value: any): void { this.view.time = value; } - - registerOnChange(fn: (_: any) => {}): void { this.onChange = fn; } - registerOnTouched(fn: () => void): void { this.onTouched = fn; } } From 97416ed7317e664ff677f4237a792d82b5fa1a9f Mon Sep 17 00:00:00 2001 From: sis0k0 Date: Fri, 9 Jun 2017 16:48:14 +0300 Subject: [PATCH 3/3] fix(forms): add setDisabledState handler for base value accessor enables [disabled] for form controls --- .../value-accessors/base-value-accessor.ts | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/nativescript-angular/value-accessors/base-value-accessor.ts b/nativescript-angular/value-accessors/base-value-accessor.ts index 679bd2f77..d7b180c56 100644 --- a/nativescript-angular/value-accessors/base-value-accessor.ts +++ b/nativescript-angular/value-accessors/base-value-accessor.ts @@ -1,6 +1,7 @@ import { ControlValueAccessor } from "@angular/forms"; +import { View } from "tns-core-modules/ui/core/view"; -export class BaseValueAccessor implements ControlValueAccessor { +export class BaseValueAccessor implements ControlValueAccessor { private pendingChangeNotification: number = 0; onChange = (_) => { }; onTouched = () => {}; @@ -19,7 +20,13 @@ export class BaseValueAccessor implements ControlValueAccessor { }; } - registerOnTouched(fn: () => void): void { this.onTouched = fn; } + registerOnTouched(fn: () => void): void { + this.onTouched = fn; + } + + setDisabledState(isDisabled: boolean): void { + this.view.isEnabled = !isDisabled; + } writeValue(_: any) { } }