24116549eb980a4cd53186181d8c4e5a79a5c5e4
[vid.git] / vid-webpack-master / src / app / shared / models / formControlModels / formControl.model.ts
1 import {FormGroup, ValidatorFn, Validators} from "@angular/forms";
2 import {Subject} from "rxjs/Subject";
3 import {FormControlType} from "./formControlTypes.enum";
4 import {CustomValidators} from "../../validators/uniqueName/uniqueName.validator";
5 import * as _ from 'lodash';
6
7 export class  FormControlModel {
8   formGroup : FormGroup;
9   controlName : string;
10   type : FormControlType;
11   displayName : string;
12   dataTestId : string;
13   placeHolder? : string;
14   tooltip? :string;
15   isDisabled? : boolean;
16   validations? : ValidatorModel[];
17   isVisible? : boolean;
18   value? : any;
19   originalValue?: any;
20   minLength?: number;
21   maxLength?: number;
22   onChange? : Function;
23   onBlur? : Function;
24   preventionsAttribute : AttributeMap[] = [];
25   waitFor? : Subject<string>[] = [];
26   hasErrors : () =>  string[];
27
28
29   constructor(data: any){
30     this.type = data.type;
31     this.displayName = data.displayName;
32     this.dataTestId = data.dataTestId;
33     this.placeHolder = data.placeHolder;
34     this.tooltip = data.tooltip;
35     this.isDisabled = data.isDisabled || false;
36     this.validations = data.validations || [];
37     this.isVisible = !_.isNil(data.isVisible)  ? data.isVisible : true;
38     this.value = data.value;
39     this.originalValue = data.value;
40     this.controlName = data.controlName;
41     this.minLength = data.minLength;
42     this.maxLength = data.maxLength;
43     this.preventionsAttribute = data.preventionsAttribute || [];
44     this.onBlur = function(){};
45     this.onChange = data.onChange ? data.onChange: function () {}
46   }
47
48   isRequired() : boolean {
49     for(let validtorsModel of this.validations){
50       let required = 'required';
51       if(validtorsModel.validatorName.toString() === required){
52         return true;
53       }
54     }
55     return false;
56   }
57
58   getPreventionAttribute() : AttributeMap[] {
59     let result : AttributeMap[] = [new AttributeMap('data-tests-id', this.dataTestId)];
60     return this.preventionsAttribute.concat(result);
61   }
62 }
63
64
65
66 export class ValidatorModel {
67   validator : ValidatorFn;
68   validatorArg? : any;
69   validatorName : ValidatorOptions | CustomValidatorOptions;
70   errorMsg : string;
71
72   constructor(validatorName : ValidatorOptions | CustomValidatorOptions, errorMsg : string, validatorArg: any = null){
73     this.validatorName = validatorName;
74     this.validator = this.setValidator(validatorName, validatorArg);
75     this.errorMsg = errorMsg;
76     this.validatorArg = validatorArg;
77   }
78
79
80   setValidator(validatorName : ValidatorOptions | CustomValidatorOptions, validatorArg: any = null) : ValidatorFn {
81     if(validatorName in ValidatorOptions){
82       return validatorArg ? Validators[validatorName](validatorArg) : Validators[validatorName];
83     }else {
84       return validatorArg ? CustomValidators[CustomValidatorOptions[validatorName]].apply(this, validatorArg) : CustomValidators[CustomValidatorOptions[validatorName]];
85     }
86   }
87 }
88
89
90
91 export enum ValidatorOptions {
92   required = 'required',
93   minLength = 'minLength',
94   maxLength = 'maxLength',
95   pattern = 'pattern',
96   nullValidator = 'nullValidator'
97 }
98
99
100
101 export enum CustomValidatorOptions {
102   uniqueInstanceNameValidator = 'uniqueInstanceNameValidator',
103   emptyDropdownOptions = 'emptyDropdownOptions',
104   isValidJson = 'isValidJson',
105   isFileTooBig = 'isFileTooBig',
106   isStringContainTags = 'isStringContainTags'
107 }
108
109 export class AttributeMap {
110   key : string;
111   value : string;
112
113   constructor(key : string, value? : string){
114     this.key = key;
115     this.value = value ? value : '';
116   }
117 }
118
119
120
121