blob: 4d3e3837b31bc7032160e5ea6994ee7cefb2f717 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
|
import {AbstractControl, ValidatorFn} from "@angular/forms";
import {Injectable} from "@angular/core";
import {NgRedux} from "@angular-redux/store";
import {AppState} from "../../store/reducers";
import {FileUnit} from "../../components/formControls/component/file/fileUnit.enum";
import * as _ from 'lodash';
@Injectable()
export class CustomValidators {
static uniqueInstanceNameValidator(...args): ValidatorFn {
const store : NgRedux<AppState> = args[0];
const serviceId : string = args[1];
const originalName : string = args[2];
return (control: AbstractControl): {[key: string]: any} | null => {
const name = control.value;
if(name && name !== originalName) {
const result: boolean = CustomValidators.isUnique(store.getState().service.serviceInstance, serviceId, name, name === originalName);
if(!result){
return {
uniqueInstanceNameValidator : true
};
}else {
return null;
}
}
return null;
};
}
static isUnique(serviceInstance : any, serviceId : string, name: string, isEqualToOriginalInstanceName : boolean) : boolean {
const service = serviceInstance[serviceId];
if(service){
const existingNames = service.existingNames;
if(_.includes(existingNames, name)) return false;
}
return true;
}
static isStringContainHtmlTag(str: string): boolean{
var regex = RegExp("<[^>]*>");
return regex.test(str);
}
static isValidJson() : ValidatorFn {
return (control: AbstractControl): {[key: string]: any} | null => {
const content = control.value;
let invalid: boolean = false;
if (content) {
try {
JSON.parse(content);
} catch (e) {
invalid = true;
}
}
return (invalid) ? {isValidJson : true} : null;
}
}
static isStringContainTags() : ValidatorFn {
return (control: AbstractControl): {[key: string]: any} | null => {
const content = control.value;
let invalid: boolean = false;
if (content) {
invalid = CustomValidators.isStringContainHtmlTag(content);
}
return (invalid) ? {isStringContainTags : true} : null;
}
}
static isFileTooBig(...args) : ValidatorFn {
const unit : FileUnit = args[0];
const size : number = args[1];
return (control: AbstractControl): {[key: string]: any} | null => {
const file = control.value;
let sizeToByte: number;
if (file) {
switch (unit) {
case FileUnit.b:
sizeToByte = 1/8;
break;
case FileUnit.B:
sizeToByte = 1;
break;
case FileUnit.KB:
sizeToByte = 1000;
break;
case FileUnit.MB:
sizeToByte = 1000000;
break;
default:
sizeToByte = 0;
break;
}
return (file.size > (sizeToByte * size)) ? {isFileTooBig: true} : null;
}
return null;
}
}
}
|