fix(forms): fix Validators.min/maxLength with FormArray (#13095)
Fixes #13089
This commit is contained in:
parent
2e500cc85b
commit
e9f307f948
|
@ -36,10 +36,6 @@ export const PENDING = 'PENDING';
|
||||||
*/
|
*/
|
||||||
export const DISABLED = 'DISABLED';
|
export const DISABLED = 'DISABLED';
|
||||||
|
|
||||||
export function isControl(control: Object): boolean {
|
|
||||||
return control instanceof AbstractControl;
|
|
||||||
}
|
|
||||||
|
|
||||||
function _find(control: AbstractControl, path: Array<string|number>| string, delimiter: string) {
|
function _find(control: AbstractControl, path: Array<string|number>| string, delimiter: string) {
|
||||||
if (path == null) return null;
|
if (path == null) return null;
|
||||||
|
|
||||||
|
|
|
@ -72,7 +72,7 @@ export class Validators {
|
||||||
if (isEmptyInputValue(control.value)) {
|
if (isEmptyInputValue(control.value)) {
|
||||||
return null; // don't validate empty values to allow optional controls
|
return null; // don't validate empty values to allow optional controls
|
||||||
}
|
}
|
||||||
const length = typeof control.value === 'string' ? control.value.length : 0;
|
const length: number = control.value ? control.value.length : 0;
|
||||||
return length < minLength ?
|
return length < minLength ?
|
||||||
{'minlength': {'requiredLength': minLength, 'actualLength': length}} :
|
{'minlength': {'requiredLength': minLength, 'actualLength': length}} :
|
||||||
null;
|
null;
|
||||||
|
@ -84,7 +84,7 @@ export class Validators {
|
||||||
*/
|
*/
|
||||||
static maxLength(maxLength: number): ValidatorFn {
|
static maxLength(maxLength: number): ValidatorFn {
|
||||||
return (control: AbstractControl): {[key: string]: any} => {
|
return (control: AbstractControl): {[key: string]: any} => {
|
||||||
const length = typeof control.value === 'string' ? control.value.length : 0;
|
const length: number = control.value ? control.value.length : 0;
|
||||||
return length > maxLength ?
|
return length > maxLength ?
|
||||||
{'maxlength': {'requiredLength': maxLength, 'actualLength': length}} :
|
{'maxlength': {'requiredLength': maxLength, 'actualLength': length}} :
|
||||||
null;
|
null;
|
||||||
|
|
|
@ -8,7 +8,7 @@
|
||||||
|
|
||||||
import {fakeAsync, tick} from '@angular/core/testing';
|
import {fakeAsync, tick} from '@angular/core/testing';
|
||||||
import {describe, expect, it} from '@angular/core/testing/testing_internal';
|
import {describe, expect, it} from '@angular/core/testing/testing_internal';
|
||||||
import {AbstractControl, FormControl, Validators} from '@angular/forms';
|
import {AbstractControl, FormArray, FormControl, Validators} from '@angular/forms';
|
||||||
import {Observable} from 'rxjs/Observable';
|
import {Observable} from 'rxjs/Observable';
|
||||||
|
|
||||||
import {normalizeAsyncValidator} from '../src/directives/normalize_validator';
|
import {normalizeAsyncValidator} from '../src/directives/normalize_validator';
|
||||||
|
@ -68,6 +68,18 @@ export function main() {
|
||||||
'minlength': {'requiredLength': 2, 'actualLength': 1}
|
'minlength': {'requiredLength': 2, 'actualLength': 1}
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
|
it('should not error when FormArray has valid length', () => {
|
||||||
|
const fa = new FormArray([new FormControl(''), new FormControl('')]);
|
||||||
|
expect(Validators.minLength(2)(fa)).toBeNull();
|
||||||
|
});
|
||||||
|
|
||||||
|
it('should error when FormArray has invalid length', () => {
|
||||||
|
const fa = new FormArray([new FormControl('')]);
|
||||||
|
expect(Validators.minLength(2)(fa)).toEqual({
|
||||||
|
'minlength': {'requiredLength': 2, 'actualLength': 1}
|
||||||
|
});
|
||||||
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
describe('maxLength', () => {
|
describe('maxLength', () => {
|
||||||
|
@ -85,6 +97,18 @@ export function main() {
|
||||||
'maxlength': {'requiredLength': 2, 'actualLength': 3}
|
'maxlength': {'requiredLength': 2, 'actualLength': 3}
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
|
it('should not error when FormArray has valid length', () => {
|
||||||
|
const fa = new FormArray([new FormControl(''), new FormControl('')]);
|
||||||
|
expect(Validators.maxLength(2)(fa)).toBeNull();
|
||||||
|
});
|
||||||
|
|
||||||
|
it('should error when FormArray has invalid length', () => {
|
||||||
|
const fa = new FormArray([new FormControl(''), new FormControl('')]);
|
||||||
|
expect(Validators.maxLength(1)(fa)).toEqual({
|
||||||
|
'maxlength': {'requiredLength': 1, 'actualLength': 2}
|
||||||
|
});
|
||||||
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
describe('pattern', () => {
|
describe('pattern', () => {
|
||||||
|
|
Loading…
Reference in New Issue