summaryrefslogtreecommitdiffstats
path: root/vid-webpack-master/src/app/shared/validators/uniqueName/uniqueName.validator.ts
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;
    }
  }
}