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 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) {
|
||||||
|
|
|
@ -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;
|
||||||
|
|
|
@ -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;
|
||||||
|
|
Loading…
Reference in New Issue