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 function isControl(control: Object): boolean {
|
||||
return control instanceof AbstractControl;
|
||||
}
|
||||
|
||||
function _find(control: AbstractControl, path: Array<string|number>| string, delimiter: string) {
|
||||
if (path == null) return null;
|
||||
|
||||
|
|
|
@ -72,7 +72,7 @@ export class Validators {
|
|||
if (isEmptyInputValue(control.value)) {
|
||||
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 ?
|
||||
{'minlength': {'requiredLength': minLength, 'actualLength': length}} :
|
||||
null;
|
||||
|
@ -84,7 +84,7 @@ export class Validators {
|
|||
*/
|
||||
static maxLength(maxLength: number): ValidatorFn {
|
||||
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 ?
|
||||
{'maxlength': {'requiredLength': maxLength, 'actualLength': length}} :
|
||||
null;
|
||||
|
|
|
@ -8,7 +8,7 @@
|
|||
|
||||
import {fakeAsync, tick} from '@angular/core/testing';
|
||||
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 {normalizeAsyncValidator} from '../src/directives/normalize_validator';
|
||||
|
@ -68,6 +68,18 @@ export function main() {
|
|||
'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', () => {
|
||||
|
@ -85,6 +97,18 @@ export function main() {
|
|||
'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', () => {
|
||||
|
|
Loading…
Reference in New Issue