fix(forms): fix disabled support for empty form containers (#11427)

Closes #11386
This commit is contained in:
Kara 2016-09-08 12:21:48 -07:00 committed by Evan Martin
parent 6a2bbffe10
commit 7b24028437
3 changed files with 54 additions and 2 deletions

View File

@ -732,7 +732,7 @@ export class FormGroup extends AbstractControl {
return false; return false;
} }
} }
return !StringMapWrapper.isEmpty(this.controls); return Object.keys(this.controls).length > 0 || this.disabled;
} }
/** @internal */ /** @internal */
@ -911,7 +911,7 @@ export class FormArray extends AbstractControl {
for (let control of this.controls) { for (let control of this.controls) {
if (control.enabled) return false; if (control.enabled) return false;
} }
return !!this.controls.length; return this.controls.length > 0 || this.disabled;
} }
private _registerControl(control: AbstractControl) { private _registerControl(control: AbstractControl) {

View File

@ -773,6 +773,32 @@ export function main() {
expect(g.touched).toEqual(true); expect(g.touched).toEqual(true);
}); });
it('should keep empty, disabled arrays disabled when updating validity', () => {
const arr = new FormArray([]);
expect(arr.status).toEqual('VALID');
arr.disable();
expect(arr.status).toEqual('DISABLED');
arr.updateValueAndValidity();
expect(arr.status).toEqual('DISABLED');
arr.push(new FormControl({value: '', disabled: true}));
expect(arr.status).toEqual('DISABLED');
arr.push(new FormControl());
expect(arr.status).toEqual('VALID');
});
it('should re-enable empty, disabled arrays', () => {
const arr = new FormArray([]);
arr.disable();
expect(arr.status).toEqual('DISABLED');
arr.enable();
expect(arr.status).toEqual('VALID');
});
describe('disabled events', () => { describe('disabled events', () => {
let logger: string[]; let logger: string[];
let c: FormControl; let c: FormControl;

View File

@ -775,6 +775,32 @@ export function main() {
expect(g.touched).toEqual(true); expect(g.touched).toEqual(true);
}); });
it('should keep empty, disabled groups disabled when updating validity', () => {
const group = new FormGroup({});
expect(group.status).toEqual('VALID');
group.disable();
expect(group.status).toEqual('DISABLED');
group.updateValueAndValidity();
expect(group.status).toEqual('DISABLED');
group.addControl('one', new FormControl({value: '', disabled: true}));
expect(group.status).toEqual('DISABLED');
group.addControl('two', new FormControl());
expect(group.status).toEqual('VALID');
});
it('should re-enable empty, disabled groups', () => {
const group = new FormGroup({});
group.disable();
expect(group.status).toEqual('DISABLED');
group.enable();
expect(group.status).toEqual('VALID');
});
describe('disabled events', () => { describe('disabled events', () => {
let logger: string[]; let logger: string[];
let c: FormControl; let c: FormControl;