argos/dmp-frontend/src/app/ui/misc/criteria/base-criteria.component.ts

97 lines
2.7 KiB
TypeScript
Raw Normal View History

2021-09-24 20:52:14 +02:00
import { OnInit, Directive } from '@angular/core';
2018-11-27 18:33:17 +01:00
import { AbstractControl, FormArray, FormControl, FormGroup } from '@angular/forms';
import { BaseComponent } from '@common/base/base.component';
import { ValidationErrorModel } from '@common/forms/validation/error-model/validation-error-model';
2017-12-14 14:10:56 +01:00
2021-09-24 20:52:14 +02:00
@Directive()
2018-11-27 18:33:17 +01:00
export class BaseCriteriaComponent extends BaseComponent implements OnInit {
2017-12-14 14:10:56 +01:00
2018-10-05 17:00:54 +02:00
public refreshCallback: Function = null;
public formGroup: FormGroup = null;
constructor(
public validationErrorModel: ValidationErrorModel,
2018-10-05 17:00:54 +02:00
) {
2018-11-27 18:33:17 +01:00
super();
2018-10-05 17:00:54 +02:00
}
ngOnInit() {
if (this.validationErrorModel == null) { this.validationErrorModel = new ValidationErrorModel(); }
2018-10-05 17:00:54 +02:00
}
controlModified(): void {
this.clearErrorModel();
if (!this.isFormValid()) { return; }
if (this.refreshCallback != null) { this.refreshCallback(); }
}
public isFormValid(): boolean {
this.touchAllFormFields(this.formGroup);
this.validateAllFormFields(this.formGroup);
return this.formGroup.valid;
}
public getFormData(): any {
return this.formGroup.value;
}
public getFormControl(controlName: string): AbstractControl {
return this.formGroup.get(controlName);
}
public disableFormFields(formControl: AbstractControl) {
formControl.disable();
}
public validateAllFormFields(formControl: AbstractControl) {
if (formControl instanceof FormControl) {
formControl.updateValueAndValidity({ emitEvent: false });
} else if (formControl instanceof FormGroup) {
Object.keys(formControl.controls).forEach(item => {
const control = formControl.get(item);
this.validateAllFormFields(control);
});
} else if (formControl instanceof FormArray) {
formControl.controls.forEach(item => {
this.validateAllFormFields(item);
});
}
}
public touchAllFormFields(formControl: AbstractControl) {
if (formControl instanceof FormControl) {
formControl.markAsTouched();
} else if (formControl instanceof FormGroup) {
Object.keys(formControl.controls).forEach(item => {
const control = formControl.get(item);
this.touchAllFormFields(control);
});
} else if (formControl instanceof FormArray) {
formControl.controls.forEach(item => {
this.touchAllFormFields(item);
});
}
}
setRefreshCallback(callback: Function): void {
this.refreshCallback = callback;
}
onCallbackError(error: any) {
this.setErrorModel(error.error);
this.validateAllFormFields(this.formGroup);
}
public setErrorModel(validationErrorModel: ValidationErrorModel) {
Object.keys(validationErrorModel).forEach(item => {
(<any>this.validationErrorModel)[item] = (<any>validationErrorModel)[item];
2018-10-05 17:00:54 +02:00
});
}
public clearErrorModel() {
Object.keys(this.validationErrorModel).forEach(item => {
(<any>this.validationErrorModel)[item] = '';
2018-10-05 17:00:54 +02:00
});
}
2017-12-14 14:10:56 +01:00
}