85 lines
5.0 KiB
TypeScript
85 lines
5.0 KiB
TypeScript
import { Component, Inject } from '@angular/core';
|
|
import { AbstractControl, FormArray, FormControl, FormGroup } from '@angular/forms';
|
|
import { MatDialogRef, MAT_DIALOG_DATA } from '@angular/material/dialog';
|
|
import { TranslateService } from '@ngx-translate/core';
|
|
|
|
@Component({
|
|
selector: 'app-form-validation-errors-dialog',
|
|
templateUrl: './form-validation-errors-dialog.component.html',
|
|
styleUrls: ['./form-validation-errors-dialog.component.scss']
|
|
})
|
|
export class FormValidationErrorsDialogComponent {
|
|
|
|
formGroup: FormGroup;
|
|
errorMessages: string[] = [];
|
|
|
|
constructor(public dialogRef: MatDialogRef<FormValidationErrorsDialogComponent>,
|
|
@Inject(MAT_DIALOG_DATA) public data: any,
|
|
private language: TranslateService
|
|
) {
|
|
if (data.formGroup !== undefined && data.formGroup !== null) {
|
|
this.formGroup = data.formGroup;
|
|
this.errorMessages = this.getErrors(this.formGroup);
|
|
} else if (data.errorMessages !== undefined && data.errorMessages !== null) {
|
|
this.errorMessages = data.errorMessages;
|
|
}
|
|
}
|
|
|
|
onClose(): void {
|
|
this.dialogRef.close();
|
|
}
|
|
|
|
public getErrors(formControl: AbstractControl): string[] {
|
|
const errors: string[] = [];
|
|
if (formControl instanceof FormControl) {
|
|
if (formControl.invalid && formControl['nativeElement']) { errors.push(...this.getErrorMessage(formControl)); }
|
|
} else if (formControl instanceof FormGroup) {
|
|
if (formControl.errors) { (errors.push(...Object.values(formControl.errors).map(x => x.message) as string[])); }
|
|
Object.keys(formControl.controls).forEach(item => {
|
|
const control = formControl.get(item);
|
|
errors.push(...this.getErrors(control));
|
|
});
|
|
} else if (formControl instanceof FormArray) {
|
|
if (formControl.errors) { (errors.push(...Object.values(formControl.errors).map(x => x.message) as string[])); }
|
|
formControl.controls.forEach(item => {
|
|
errors.push(...this.getErrors(item));
|
|
});
|
|
}
|
|
return errors;
|
|
}
|
|
|
|
getErrorMessage(formControl: FormControl): string[] {
|
|
const errors: string[] = [];
|
|
Object.keys(formControl.errors).forEach(key => {
|
|
if (key === 'required') { errors.push(this.language.instant(this.getPlaceHolder(formControl) + ": " + this.language.instant('GENERAL.FORM-VALIDATION-DISPLAY-DIALOG.REQUIRED'))); }
|
|
// if (key === 'required') { errors.push(this.language.instant('GENERAL.FORM-VALIDATION-DISPLAY-DIALOG.THIS-FIELD') + ' "' + this.getPlaceHolder(formControl) + '" ' + this.language.instant('GENERAL.FORM-VALIDATION-DISPLAY-DIALOG.HAS-ERROR') + ', ' + this.language.instant('GENERAL.FORM-VALIDATION-DISPLAY-DIALOG.REQUIRED')); }
|
|
else if (key === 'email') { errors.push(this.language.instant('GENERAL.FORM-VALIDATION-DISPLAY-DIALOG.THIS-FIELD') + ' "' + this.getPlaceHolder(formControl) + '" ' + this.language.instant('GENERAL.FORM-VALIDATION-DISPLAY-DIALOG.HAS-ERROR') + ', ' + this.language.instant('GENERAL.FORM-VALIDATION-DISPLAY-DIALOG.EMAIL')); }
|
|
else if (key === 'min') { errors.push(this.language.instant('GENERAL.FORM-VALIDATION-DISPLAY-DIALOG.THIS-FIELD') + ' "' + this.getPlaceHolder(formControl) + '" ' + this.language.instant('GENERAL.FORM-VALIDATION-DISPLAY-DIALOG.HAS-ERROR') + ', ' + this.language.instant('GENERAL.FORM-VALIDATION-DISPLAY-DIALOG.MIN-VALUE', { 'min': formControl.getError('min').min })); }
|
|
else if (key === 'max') { errors.push(this.language.instant('GENERAL.FORM-VALIDATION-DISPLAY-DIALOG.THIS-FIELD') + ' "' + this.getPlaceHolder(formControl) + '" ' + this.language.instant('GENERAL.FORM-VALIDATION-DISPLAY-DIALOG.HAS-ERROR') + ', ' + this.language.instant('GENERAL.FORM-VALIDATION-DISPLAY-DIALOG.MAX-VALUE', { 'max': formControl.getError('max').max })); }
|
|
else { errors.push(this.language.instant('GENERAL.FORM-VALIDATION-DISPLAY-DIALOG.THIS-FIELD') + ' "' + this.getPlaceHolder(formControl) + '" ' + this.language.instant('GENERAL.FORM-VALIDATION-DISPLAY-DIALOG.HAS-ERROR') + ', ' + formControl.errors[key].message); }
|
|
});
|
|
return errors;
|
|
}
|
|
|
|
getPlaceHolder(formControl: any): string {
|
|
if (formControl.nativeElement.localName === 'input') {
|
|
return formControl.nativeElement.getAttribute('placeholder');
|
|
} else if (formControl.nativeElement.localName === 'mat-select') {
|
|
return formControl.nativeElement.getAttribute('aria-label');
|
|
} else if (formControl.nativeElement.localName === 'app-single-auto-complete') {
|
|
return (Array.from(formControl.nativeElement.firstChild.children).filter((x: any) => x.localName === 'input')[0] as any).getAttribute('placeholder');
|
|
} else if (formControl.nativeElement.localName === 'app-multiple-auto-complete') {
|
|
return (Array.from(formControl.nativeElement.firstChild.children).filter((x: any) => x.localName === 'input')[0] as any).getAttribute('placeholder');
|
|
}
|
|
|
|
// Needs to have <mat-label> in <mat-form-field> in html in order to fill results
|
|
// let result = '';
|
|
// try {
|
|
// result = (Array.from(formControl.nativeElement.parentElement.children).filter((x: any) => Array.from(x.classList).includes('mat-form-field-label-wrapper'))[0] as any).innerText;
|
|
// result = result.replace(' *', '');
|
|
// } catch (error) { }
|
|
|
|
// return result;
|
|
}
|
|
}
|