Dataset Wizard bug fix. On save show errors only for the semiform.
This commit is contained in:
parent
868de6bf78
commit
6f52f77459
|
@ -1,5 +1,5 @@
|
||||||
import { Component, OnInit } from '@angular/core';
|
import { Component, OnInit } from '@angular/core';
|
||||||
import { FormArray, FormControl, FormGroup } from '@angular/forms';
|
import { AbstractControl, FormArray, FormControl, FormGroup } from '@angular/forms';
|
||||||
import { MatDialog } from '@angular/material/dialog';
|
import { MatDialog } from '@angular/material/dialog';
|
||||||
import { MatSnackBar } from '@angular/material/snack-bar';
|
import { MatSnackBar } from '@angular/material/snack-bar';
|
||||||
import { ActivatedRoute, Router } from '@angular/router';
|
import { ActivatedRoute, Router } from '@angular/router';
|
||||||
|
@ -568,16 +568,108 @@ export class DatasetWizardComponent extends BaseComponent implements OnInit, IBr
|
||||||
error => this.onCallbackError(error));
|
error => this.onCallbackError(error));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
private _getErrorMessage(formControl: AbstractControl, name: string): string[] {
|
||||||
|
const errors: string[] = [];
|
||||||
|
Object.keys(formControl.errors).forEach(key => {
|
||||||
|
if (key === 'required') { errors.push(this.language.instant(name + ": " + 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') + ' "' + name + '" ' + 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') + ' "' + name + '" ' + 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') + ' "' + name + '" ' + 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') + ' "' + name + '" ' + this.language.instant('GENERAL.FORM-VALIDATION-DISPLAY-DIALOG.HAS-ERROR') + ', ' + formControl.errors[key].message); }
|
||||||
|
});
|
||||||
|
return errors;
|
||||||
|
}
|
||||||
|
|
||||||
|
private _getPlaceHolder(formControl: any): string {
|
||||||
|
if (formControl.nativeElement.localName === 'input' || formControl.nativeElement.localName === 'textarea') {
|
||||||
|
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');
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
private _buildSemiFormErrorMessages(): string[]{//not including datasetProfileDefinition
|
||||||
|
const errmess: string[] = [];
|
||||||
|
Object.keys(this.formGroup.controls).forEach(controlName=>{
|
||||||
|
if(controlName != 'datasetProfileDefinition' && this.formGroup.get(controlName).invalid){
|
||||||
|
errmess.push(...this._buildErrorMessagesForAbstractControl(this.formGroup.get(controlName), controlName));
|
||||||
|
}
|
||||||
|
})
|
||||||
|
|
||||||
|
return errmess;
|
||||||
|
}
|
||||||
|
|
||||||
|
// takes as an input an abstract control and gets its error messages[]
|
||||||
|
private _buildErrorMessagesForAbstractControl(aControl: AbstractControl, controlName: string):string[]{
|
||||||
|
const errmess:string[] = [];
|
||||||
|
|
||||||
|
if(aControl.invalid){
|
||||||
|
|
||||||
|
if(aControl.errors){//although here should always be true
|
||||||
|
//check if has placeholder
|
||||||
|
if( (<any>aControl).nativeElement !== undefined && (<any>aControl).nativeElement !== null){
|
||||||
|
controlName = this._getPlaceHolder(aControl);
|
||||||
|
}
|
||||||
|
const errorMessage = this._getErrorMessage(aControl, controlName);
|
||||||
|
|
||||||
|
errmess.push(...errorMessage);
|
||||||
|
}
|
||||||
|
|
||||||
|
if(aControl instanceof FormGroup){
|
||||||
|
|
||||||
|
const fg = aControl as FormGroup;
|
||||||
|
//check children
|
||||||
|
Object.keys(fg.controls).forEach(controlName=>{
|
||||||
|
errmess.push(...this._buildErrorMessagesForAbstractControl(fg.get(controlName), controlName));
|
||||||
|
});
|
||||||
|
}else if(aControl instanceof FormArray){
|
||||||
|
|
||||||
|
const fa = aControl as FormArray;
|
||||||
|
|
||||||
|
fa.controls.forEach((control,index)=>{
|
||||||
|
errmess.push(... this._buildErrorMessagesForAbstractControl(control, `${controlName} --> ${index+1}`));
|
||||||
|
});
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return errmess;
|
||||||
|
}
|
||||||
|
|
||||||
save(saveType?: SaveType) {
|
save(saveType?: SaveType) {
|
||||||
this.formService.touchAllFormFields(this.formGroup);
|
this.formService.touchAllFormFields(this.formGroup);
|
||||||
if (!this.isSemiFormValid(this.formGroup)) {
|
if (!this.isSemiFormValid(this.formGroup)) {
|
||||||
this.showValidationErrorsDialog();
|
//build messages
|
||||||
|
const errorMessages = this._buildSemiFormErrorMessages();
|
||||||
|
this.showValidationErrorsDialog(undefined, errorMessages);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
this.submit(saveType);
|
this.submit(saveType);
|
||||||
}
|
}
|
||||||
|
|
||||||
private showValidationErrorsDialog(projectOnly?: boolean) {
|
private showValidationErrorsDialog(projectOnly?: boolean, errmess?: string[]) {
|
||||||
|
if(errmess){
|
||||||
|
const dialogRef = this.dialog.open(FormValidationErrorsDialogComponent, {
|
||||||
|
disableClose: true,
|
||||||
|
autoFocus: false,
|
||||||
|
restoreFocus: false,
|
||||||
|
data: {
|
||||||
|
errorMessages:errmess,
|
||||||
|
projectOnly: projectOnly
|
||||||
|
},
|
||||||
|
});
|
||||||
|
}else{
|
||||||
|
|
||||||
const dialogRef = this.dialog.open(FormValidationErrorsDialogComponent, {
|
const dialogRef = this.dialog.open(FormValidationErrorsDialogComponent, {
|
||||||
disableClose: true,
|
disableClose: true,
|
||||||
autoFocus: false,
|
autoFocus: false,
|
||||||
|
@ -589,6 +681,8 @@ export class DatasetWizardComponent extends BaseComponent implements OnInit, IBr
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
hasReversableStatus(): boolean {
|
hasReversableStatus(): boolean {
|
||||||
if (this.formGroup.get('dmp').value) {
|
if (this.formGroup.get('dmp').value) {
|
||||||
return (this.formGroup.get('dmp').value.status == DmpStatus.Draft && this.formGroup.get('status').value == DatasetStatus.Finalized);
|
return (this.formGroup.get('dmp').value.status == DmpStatus.Draft && this.formGroup.get('status').value == DatasetStatus.Finalized);
|
||||||
|
|
Loading…
Reference in New Issue