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';
7 export class FormControlModel {
10 type : FormControlType;
13 placeHolder? : string;
15 isDisabled? : boolean;
16 validations? : ValidatorModel[];
24 preventionsAttribute : AttributeMap[] = [];
25 waitFor? : Subject<string>[] = [];
26 hasErrors : () => string[];
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 () {}
48 isRequired() : boolean {
49 for(let validtorsModel of this.validations){
50 let required = 'required';
51 if(validtorsModel.validatorName.toString() === required){
58 getPreventionAttribute() : AttributeMap[] {
59 let result : AttributeMap[] = [new AttributeMap('data-tests-id', this.dataTestId)];
60 return this.preventionsAttribute.concat(result);
66 export class ValidatorModel {
67 validator : ValidatorFn;
69 validatorName : ValidatorOptions | CustomValidatorOptions;
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;
80 setValidator(validatorName : ValidatorOptions | CustomValidatorOptions, validatorArg: any = null) : ValidatorFn {
81 if(validatorName in ValidatorOptions){
82 return validatorArg ? Validators[validatorName](validatorArg) : Validators[validatorName];
84 return validatorArg ? CustomValidators[CustomValidatorOptions[validatorName]].apply(this, validatorArg) : CustomValidators[CustomValidatorOptions[validatorName]];
91 export enum ValidatorOptions {
92 required = 'required',
93 minLength = 'minLength',
94 maxLength = 'maxLength',
96 nullValidator = 'nullValidator'
101 export enum CustomValidatorOptions {
102 uniqueInstanceNameValidator = 'uniqueInstanceNameValidator',
103 emptyDropdownOptions = 'emptyDropdownOptions',
104 isValidJson = 'isValidJson',
105 isFileTooBig = 'isFileTooBig',
106 isStringContainTags = 'isStringContainTags'
109 export class AttributeMap {
113 constructor(key : string, value? : string){
115 this.value = value ? value : '';