diff options
Diffstat (limited to 'src/pybind/mgr/dashboard/frontend/src/app/shared/directives/ng-bootstrap-form-validation/cd-form-validation.directive.ts')
-rw-r--r-- | src/pybind/mgr/dashboard/frontend/src/app/shared/directives/ng-bootstrap-form-validation/cd-form-validation.directive.ts | 62 |
1 files changed, 62 insertions, 0 deletions
diff --git a/src/pybind/mgr/dashboard/frontend/src/app/shared/directives/ng-bootstrap-form-validation/cd-form-validation.directive.ts b/src/pybind/mgr/dashboard/frontend/src/app/shared/directives/ng-bootstrap-form-validation/cd-form-validation.directive.ts new file mode 100644 index 000000000..a88011d35 --- /dev/null +++ b/src/pybind/mgr/dashboard/frontend/src/app/shared/directives/ng-bootstrap-form-validation/cd-form-validation.directive.ts @@ -0,0 +1,62 @@ +/** + * MIT License + * + * Copyright (c) 2017 Kevin Kipp + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + * + * + * Based on https://github.com/third774/ng-bootstrap-form-validation + */ + +import { Directive, EventEmitter, HostListener, Input, Output } from '@angular/core'; +import { AbstractControl, FormArray, FormControl, FormGroup } from '@angular/forms'; + +@Directive({ + // tslint:disable-next-line:directive-selector + selector: '[formGroup]' +}) +export class CdFormValidationDirective { + @Input() + formGroup: FormGroup; + @Output() + validSubmit = new EventEmitter<any>(); + + @HostListener('submit') + onSubmit() { + this.markAsTouchedAndDirty(this.formGroup); + if (this.formGroup.valid) { + this.validSubmit.emit(this.formGroup.value); + } + } + + markAsTouchedAndDirty(control: AbstractControl) { + if (control instanceof FormGroup) { + Object.keys(control.controls).forEach((key) => + this.markAsTouchedAndDirty(control.controls[key]) + ); + } else if (control instanceof FormArray) { + control.controls.forEach((c) => this.markAsTouchedAndDirty(c)); + } else if (control instanceof FormControl && control.enabled) { + control.markAsDirty(); + control.markAsTouched(); + control.updateValueAndValidity(); + } + } +} |