Permalink
Browse files

fix(forms): make setDisabledState optional for reactive form directiv…

…es (#11731)


Closes #11719
  • Loading branch information...
kara authored and alexeagle committed Sep 19, 2016
1 parent bf81b06 commit 51d73d3e4e490cb12715edf0eae1e46b4d42d8a0
@@ -90,7 +90,9 @@ export class FormControlDirective extends NgControl implements OnChanges {
ngOnChanges(changes: SimpleChanges): void {
if (this._isControlChanged(changes)) {
setUpControl(this.form, this);
- if (this.control.disabled) this.valueAccessor.setDisabledState(true);
+ if (this.control.disabled && this.valueAccessor.setDisabledState) {
+ this.valueAccessor.setDisabledState(true);
+ }
this.form.updateValueAndValidity({emitEvent: false});
}
if (isPropertyUpdated(changes, this.viewModel)) {
@@ -152,7 +152,9 @@ export class FormControlName extends NgControl implements OnChanges, OnDestroy {
private _setUpControl() {
this._checkParentType();
this._control = this.formDirective.addControl(this);
- if (this.control.disabled) this.valueAccessor.setDisabledState(true);
+ if (this.control.disabled && this.valueAccessor.setDisabledState) {
+ this.valueAccessor.setDisabledState(true);
+ }
this._added = true;
}
}
@@ -1025,7 +1025,7 @@ export function main() {
});
describe('custom value accessors', () => {
- it('should support custom value accessors', () => {
+ it('should support basic functionality', () => {
const fixture = TestBed.createComponent(WrappedValueForm);
const form = new FormGroup({'login': new FormControl('aa')});
fixture.componentInstance.form = form;
@@ -1047,7 +1047,7 @@ export function main() {
expect(form.get('login').errors).toEqual(null);
});
- it('should support custom value accessors on non builtin input elements that fire a change event without a \'target\' property',
+ it('should support non builtin input elements that fire a change event without a \'target\' property',
() => {
const fixture = TestBed.createComponent(MyInputForm);
fixture.componentInstance.form = new FormGroup({'login': new FormControl('aa')});
@@ -1063,6 +1063,27 @@ export function main() {
input.componentInstance.dispatchChangeEvent();
});
+ it('should support custom accessors without setDisabledState - formControlName', () => {
+ const fixture = TestBed.createComponent(WrappedValueForm);
+ fixture.componentInstance.form = new FormGroup({
+ 'login': new FormControl({value: 'aa', disabled: true}),
+ });
+ fixture.detectChanges();
+ expect(fixture.componentInstance.form.status).toEqual('DISABLED');
+ expect(fixture.componentInstance.form.get('login').status).toEqual('DISABLED');
+ });
+
+ it('should support custom accessors without setDisabledState - formControlDirective',
+ () => {
+ TestBed.overrideComponent(
+ FormControlComp,
+ {set: {template: `<input type="text" [formControl]="control" wrapped-value>`}});
+ const fixture = TestBed.createComponent(FormControlComp);
+ fixture.componentInstance.control = new FormControl({value: 'aa', disabled: true});
+ fixture.detectChanges();
+ expect(fixture.componentInstance.control.status).toEqual('DISABLED');
+ });
+
});
});

0 comments on commit 51d73d3

Please sign in to comment.