summaryrefslogtreecommitdiffstats
path: root/sdc-workflow-designer-ui/src/app/paletx/plx-text-input/max-validator.directive.ts
diff options
context:
space:
mode:
Diffstat (limited to 'sdc-workflow-designer-ui/src/app/paletx/plx-text-input/max-validator.directive.ts')
-rw-r--r--sdc-workflow-designer-ui/src/app/paletx/plx-text-input/max-validator.directive.ts49
1 files changed, 49 insertions, 0 deletions
diff --git a/sdc-workflow-designer-ui/src/app/paletx/plx-text-input/max-validator.directive.ts b/sdc-workflow-designer-ui/src/app/paletx/plx-text-input/max-validator.directive.ts
new file mode 100644
index 00000000..143dccc6
--- /dev/null
+++ b/sdc-workflow-designer-ui/src/app/paletx/plx-text-input/max-validator.directive.ts
@@ -0,0 +1,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: '[max][ngModel],[max][formControl],[max][formControlName]',
+ providers: [{
+ provide: NG_VALIDATORS,
+ useExisting: forwardRef(() => MaxValidatorDirective),
+ multi: true
+ }],
+})
+
+export class MaxValidatorDirective 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 = max(NumberWrapperParseFloat(
+ this.inputElement.querySelector('input').getAttribute('max')));
+ }
+ }
+ @Input()
+ set max(maxValue: string) {
+ this._validator = max(NumberWrapperParseFloat(maxValue));
+ }
+
+ validate(c: AbstractControl): {[key: string]: any} {
+ return this._validator(c);
+ }
+}
+
+function max(maxvalue: 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 > maxvalue ?
+ {'max': {'requiredValue': maxvalue, 'actualValue': v}} :
+ null;
+ };
+}