summaryrefslogtreecommitdiffstats
path: root/sdc-workflow-designer-ui/src/app/paletx/plx-text-input/min-validator.directive.ts
blob: 260a93edbc72cdb1c2bac3c75569d33c03804c0a (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
import {AfterViewInit, Directive, ElementRef, forwardRef, Input} from '@angular/core';
import {AbstractControl, NG_VALIDATORS, ValidatorFn, Validators} from '@angular/forms';

import {NumberWrapperParseFloat} from '../core/number-wrapper-parse';

@Directive({
  selector: '[min][ngModel],[min][formControl],[min][formControlName]',
  providers: [{
	provide: NG_VALIDATORS,
	useExisting: forwardRef(() => MinValidatorDirective),
	multi: true
  }],
})

export class MinValidatorDirective implements AfterViewInit {
  private _validator: ValidatorFn;
  private inputElement: any;
  constructor(elementRef: ElementRef) {
	this.inputElement = elementRef;
  }
  ngAfterViewInit() {
	this.inputElement = this.inputElement.nativeElement.querySelector('input');
	if (this.inputElement && this.inputElement.querySelector('input')) {
		this._validator = min(NumberWrapperParseFloat(
			this.inputElement.querySelector('input').getAttribute('min')));
	}
  }
  @Input()
  set min(minValue: string) {
	this._validator = min(NumberWrapperParseFloat(minValue));
  }

  validate(c: AbstractControl): {[key: string]: any} {
	return this._validator(c);
  }
}

function min(minvalue: number): ValidatorFn {
  return (control: AbstractControl): {[key: string]: any} => {
	if (Validators.required(control) !== undefined &&
		Validators.required(control) !== null) {
		return null;
	}
	let v: Number = Number(control.value);
	return v < minvalue ?
		{'min': {'requiredValue': minvalue, 'actualValue': v}} :
		null;
  };
}