11import { ValidationEngine } from './validationEngine' ;
22import {
33 ValidationConstraints ,
4+ FieldValidationFunction ,
45 FormValidationFunction ,
56 FieldValidationResult ,
67 FormValidationResult ,
8+ FieldValidationConstraint ,
9+ ValidationEventsFilter ,
710} from './entities' ;
811import { consts } from './consts' ;
912
1013interface FormValidation {
11- validateField ( vm : any , key : string , value : any , filter ?: any ) : Promise < FieldValidationResult > ;
14+ validateField ( vm : any , key : string , value : any , eventsFilter ?: any ) : Promise < FieldValidationResult > ;
1215 validateForm ( vm : any ) : Promise < FormValidationResult > ;
1316 isValidationInProgress ( ) : boolean ;
1417 isFormDirty ( ) : boolean ;
1518 isFormPristine ( ) : boolean ;
16- addFieldValidation ( key : string , validation : ( value : string , vm : any ) => FieldValidationResult , filter ?: any ) : FormValidation ;
17- addFieldValidationAsync ( key : string , validation : ( value : string , vm : any ) => Promise < FieldValidationResult > , filter ?: any ) : FormValidation ;
1819}
1920
2021export class BaseFormValidation implements FormValidation {
2122 private validationEngine : ValidationEngine ;
23+
2224 constructor ( validationConstraints : ValidationConstraints ) {
2325 this . validationEngine = new ValidationEngine ( ) ;
2426 this . parseValidationConstraints ( validationConstraints ) ;
2527 }
2628
2729 private parseValidationConstraints ( validationConstraints : ValidationConstraints ) {
2830 if ( validationConstraints && typeof validationConstraints === 'object' ) {
29- if ( validationConstraints . global && validationConstraints . global instanceof Array ) {
30- this . addFormValidationFunctions ( validationConstraints . global ) ;
31+ const { global, fields } = validationConstraints ;
32+ if ( global && global instanceof Array ) {
33+ this . parseFormValidations ( global ) ;
34+ }
35+ if ( fields && typeof fields === 'object' ) {
36+ this . parseAllFieldsValidations ( fields ) ;
3137 }
3238 }
3339 }
3440
35- private addFormValidationFunctions ( validationFunctions : FormValidationFunction [ ] ) {
41+ private parseFormValidations ( validationFunctions : FormValidationFunction [ ] ) {
3642 validationFunctions . forEach ( ( validationFunction : FormValidationFunction ) => {
3743 if ( typeof validationFunction === 'function' ) {
3844 this . validationEngine . addFormValidation ( validationFunction ) ;
3945 }
4046 } ) ;
4147 }
4248
43- validateField ( vm : any , key : string , value : any , filter ?: any ) : Promise < FieldValidationResult > {
44- return this . validationEngine . validateSingleField ( vm , key , value , filter ) ;
49+ private parseAllFieldsValidations ( fields : { [ key : string ] : FieldValidationConstraint [ ] } ) {
50+ for ( let field in fields ) {
51+ this . parseFieldValidations ( field , fields [ field ] ) ;
52+ }
53+ }
54+
55+ private parseFieldValidations ( constraint : string , fieldValidationConstraints : FieldValidationConstraint [ ] ) {
56+ if ( fieldValidationConstraints instanceof Array ) {
57+ fieldValidationConstraints . forEach ( ( fieldValidationConstraint ) => {
58+ if ( fieldValidationConstraint && typeof fieldValidationConstraint === 'object' ) {
59+ this . addFieldValidation ( constraint , fieldValidationConstraint ) ;
60+ }
61+ } ) ;
62+ }
63+ }
64+
65+ private addFieldValidation ( field : string , validationConstraint : FieldValidationConstraint ) : FormValidation {
66+ this . validationEngine . addFieldValidation (
67+ field ,
68+ validationConstraint . validator ,
69+ validationConstraint . eventsFilter ,
70+ validationConstraint . customParams
71+ ) ;
72+ return this ;
73+ }
74+
75+ validateField ( vm : any , key : string , value : any , eventsFilter ?: ValidationEventsFilter ) : Promise < FieldValidationResult > {
76+ return this . validationEngine . triggerFieldValidation ( vm , key , value , eventsFilter ) ;
4577 }
4678
4779 validateForm ( vm : any ) : Promise < FormValidationResult > {
@@ -59,18 +91,8 @@ export class BaseFormValidation implements FormValidation {
5991 isFormPristine ( ) : boolean {
6092 return this . validationEngine . isFormPristine ( ) ;
6193 }
62-
63- addFieldValidation ( key : string , validationFunction : ( value : string , vm : any ) => FieldValidationResult ) : FormValidation {
64- this . validationEngine . addFieldValidation ( key , validationFunction ) ;
65- return this ;
66- }
67-
68- addFieldValidationAsync ( key : string , validationFunction : ( value : string , vm : any ) => Promise < FieldValidationResult > ) : FormValidation {
69- this . validationEngine . addFieldValidationAsync ( key , validationFunction ) ;
70- return this ;
71- }
7294}
7395
7496export function createFormValidation ( validationConstraints : ValidationConstraints ) : FormValidation {
7597 return new BaseFormValidation ( validationConstraints ) ;
76- }
98+ }
0 commit comments