feat(forms): add markAllAsTouched() to AbstractControl (#26812)

Add functionality to mark a control and its descendant controls as touched

Closes #19400

PR Close #26812
This commit is contained in:
alsami
2018-10-29 09:36:17 +01:00
committed by Alex Rickabaugh
parent ab2bf83398
commit 45bf911df8
5 changed files with 133 additions and 0 deletions

View File

@ -96,6 +96,58 @@ import {of } from 'rxjs';
});
});
describe('markAllAsTouched', () => {
it('should mark all descendants as touched', () => {
const formArray: FormArray = new FormArray([
new FormControl('v1'), new FormControl('v2'),
new FormGroup({'c1': new FormControl('v1')}),
new FormArray([new FormGroup({'c2': new FormControl('v2')})])
]);
expect(formArray.touched).toBe(false);
const control1 = formArray.at(0) as FormControl;
expect(control1.touched).toBe(false);
const group1 = formArray.at(2) as FormGroup;
expect(group1.touched).toBe(false);
const group1Control1 = group1.get('c1') as FormControl;
expect(group1Control1.touched).toBe(false);
const innerFormArray = formArray.at(3) as FormArray;
expect(innerFormArray.touched).toBe(false);
const innerFormArrayGroup = innerFormArray.at(0) as FormGroup;
expect(innerFormArrayGroup.touched).toBe(false);
const innerFormArrayGroupControl1 = innerFormArrayGroup.get('c2') as FormControl;
expect(innerFormArrayGroupControl1.touched).toBe(false);
formArray.markAllAsTouched();
expect(formArray.touched).toBe(true);
expect(control1.touched).toBe(true);
expect(group1.touched).toBe(true);
expect(group1Control1.touched).toBe(true);
expect(innerFormArray.touched).toBe(true);
expect(innerFormArrayGroup.touched).toBe(true);
expect(innerFormArrayGroupControl1.touched).toBe(true);
});
});
describe('setValue', () => {
let c: FormControl, c2: FormControl, a: FormArray;