fix(forms): fix disabled support for empty form containers (#11427)
Closes #11386
This commit is contained in:
parent
6a2bbffe10
commit
7b24028437
|
@ -732,7 +732,7 @@ export class FormGroup extends AbstractControl {
|
|||
return false;
|
||||
}
|
||||
}
|
||||
return !StringMapWrapper.isEmpty(this.controls);
|
||||
return Object.keys(this.controls).length > 0 || this.disabled;
|
||||
}
|
||||
|
||||
/** @internal */
|
||||
|
@ -911,7 +911,7 @@ export class FormArray extends AbstractControl {
|
|||
for (let control of this.controls) {
|
||||
if (control.enabled) return false;
|
||||
}
|
||||
return !!this.controls.length;
|
||||
return this.controls.length > 0 || this.disabled;
|
||||
}
|
||||
|
||||
private _registerControl(control: AbstractControl) {
|
||||
|
|
|
@ -773,6 +773,32 @@ export function main() {
|
|||
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', () => {
|
||||
let logger: string[];
|
||||
let c: FormControl;
|
||||
|
|
|
@ -775,6 +775,32 @@ export function main() {
|
|||
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', () => {
|
||||
let logger: string[];
|
||||
let c: FormControl;
|
||||
|
|
Loading…
Reference in New Issue