Add shared/input.
[sdc/sdc-workflow-designer.git] / sdc-workflow-designer-ui / src / app / shared / input / validators.ts
1 import {AbstractControl, ValidationErrors} from '@angular/forms';\r
2 \r
3 export function inRangeValidator(in_range: number[]): ValidationErrors|null {\r
4     return (control: AbstractControl): ValidationErrors => {\r
5         const value = parseFloat(control.value);\r
6         if (isNaN(value) || value > in_range[1] || value < in_range[0]) {\r
7             control.setErrors({\r
8                 in_range: true\r
9             });\r
10             return {\r
11                 in_range: true\r
12             }\r
13         } else {\r
14             return null;\r
15         }\r
16     }\r
17 }\r
18 \r
19 export function greaterOrEqualValidator(max: string): ValidationErrors|null {\r
20     return (control: AbstractControl): ValidationErrors => {\r
21         const value = parseFloat(control.value);\r
22         const maxValue: any = parseFloat(max);\r
23         if (!isNaN(maxValue) && (isNaN(value) || value < maxValue)) {\r
24             control.setErrors({\r
25                 greater_or_equal: true\r
26             });\r
27             return {\r
28                 greater_or_equal: true\r
29             }\r
30         } else {\r
31             return null;\r
32         }\r
33     }\r
34 }\r
35 \r
36 export function lessOrEqualValidator(min: string): ValidationErrors|null {\r
37     return (control: AbstractControl): ValidationErrors => {\r
38         const value = parseFloat(control.value);\r
39         const minValue: any = parseFloat(min);\r
40         if (!isNaN(minValue) && (isNaN(value) || value > minValue)) {\r
41             control.setErrors({\r
42                 less_or_equal: true\r
43             });\r
44             return {\r
45                 less_or_equal: true\r
46             }\r
47         } else {\r
48             return null;\r
49         }\r
50     }\r
51 }\r
52 \r
53 export function greaterThanValidator(max: string): ValidationErrors|null {\r
54     return (control: AbstractControl): ValidationErrors => {\r
55         const value = parseFloat(control.value);\r
56         const maxValue: any = parseFloat(max);\r
57         if (!isNaN(maxValue) && (isNaN(value) || value <= maxValue)) {\r
58             control.setErrors({\r
59                 greater_than: true\r
60             });\r
61             return {\r
62                 greater_than: true\r
63             }\r
64         } else {\r
65             return null;\r
66         }\r
67     }\r
68 }\r
69 \r
70 export function lessThanValidator(min: string): ValidationErrors|null {\r
71     return (control: AbstractControl): ValidationErrors => {\r
72         const value = parseFloat(control.value);\r
73         const minValue: any = parseFloat(min);\r
74         if (!isNaN(minValue) && (isNaN(value) || value >= minValue)) {\r
75             control.setErrors({\r
76                 less_than: true\r
77             });\r
78             return {\r
79                 less_than: true\r
80             }\r
81         } else {\r
82             return null;\r
83         }\r
84     }\r
85 }\r
86 \r
87 export function equalValidator(value: any): ValidationErrors|null {\r
88     return (control: AbstractControl): ValidationErrors => {\r
89         if (control.value != value) {\r
90             control.setErrors({\r
91                 equal: true\r
92             });\r
93             return {\r
94                 equal: true\r
95             }\r
96         } else {\r
97             return null;\r
98         }\r
99     }\r
100 }\r
101 \r
102 export function lengthValidator(length: number): ValidationErrors|null {\r
103     return (control: AbstractControl): ValidationErrors => {\r
104         if (control.value && control.value.length !== length) {\r
105             control.setErrors({\r
106                 length: true\r
107             });\r
108             return {\r
109                 length: true\r
110             }\r
111         } else {\r
112             return null;\r
113         }\r
114     }\r
115 }\r
116 \r
117 export function floatValidator(): ValidationErrors|null {\r
118     return (control: AbstractControl): ValidationErrors => {\r
119         let floatPattern = /^(-?\d+)(\.\d+)?$/;\r
120         if (control.value && !floatPattern.test(control.value)) {\r
121             control.setErrors({\r
122                 float: true\r
123             });\r
124             return {\r
125                 float: true\r
126             }\r
127         } else {\r
128             return null;\r
129         }\r
130     }\r
131 }\r
132 \r
133 export function integerValidator(): ValidationErrors|null {\r
134     return (control: AbstractControl): ValidationErrors => {\r
135         let integerPattern = /^-?\d+$/;\r
136         if (control.value && !integerPattern.test(control.value)) {\r
137             control.setErrors({\r
138                 integer: true\r
139             });\r
140             return {\r
141                 integer: true\r
142             }\r
143         } else {\r
144             return null;\r
145         }\r
146     }\r
147 }