From 9d11adbcbd3a565265b0e503214c2538ce1db5ac Mon Sep 17 00:00:00 2001 From: "CITE\\dtziotzios" Date: Mon, 21 Jan 2019 13:14:20 +0200 Subject: [PATCH] error models and profile pages bug fixes --- .../handlers/PrincipalArgumentResolver.java | 1 - dmp-frontend/src/app/app-routing.module.ts | 7 ++ .../unauthorized-response.interceptor.ts | 32 +++--- .../src/app/core/core-service.module.ts | 4 +- .../src/app/core/formatting.module.ts | 10 +- .../src/app/core/model/auth/principal.ts | 2 +- .../app/core/model/dataset/dataset-profile.ts | 2 +- .../src/app/core/model/dataset/dataset.ts | 18 +-- .../daatset-external-autocomplete-criteria.ts | 6 + .../dataset-external-autocomplete.service.ts | 28 +++++ .../services/utilities/enum-utils.service.ts | 14 +-- .../criteria/dataset-profile.component.html | 1 - .../dataset-profile-listing.component.html | 3 - .../dataset-profile-listing.component.ts | 9 +- .../editor/dmp-profile-editor.component.html | 8 +- .../editor/dmp-profile-editor.component.ts | 13 +-- .../editor/dmp-profile-editor.model.ts | 2 +- .../dmp-profile-criteria.component.html | 1 - .../criteria/user-criteria.component.html | 6 +- .../criteria/user-criteria.component.ts | 51 ++------- .../role-editor/user-role-editor.component.ts | 16 --- .../auth/admin-login/admin-login.component.ts | 2 +- .../src/app/ui/auth/login/login.component.ts | 3 + .../app/ui/dashboard/dashboard.component.ts | 4 +- .../dataset-editor.component.html | 6 +- .../dataset-wizard-editor.model.ts | 31 +++--- .../dataset-wizard.component.html | 2 +- .../dataset-wizard.component.ts | 9 +- .../criteria/dataset-criteria.component.html | 2 - .../ui/dmp/editor/dmp-editor.component.html | 12 +- .../app/ui/dmp/editor/dmp-editor.component.ts | 22 ++-- .../src/app/ui/dmp/editor/dmp-editor.model.ts | 26 ++--- .../invitation/dmp-invitation.component.ts | 3 +- .../criteria/dmp-criteria.component.html | 2 +- .../criteria/dmp-criteria.component.ts | 4 +- .../ui/dmp/wizard/dmp-wizard-editor.model.ts | 26 ++--- .../app/ui/dmp/wizard/dmp-wizard.component.ts | 7 +- .../editor/dmp-wizard-editor.component.html | 14 +-- .../editor/dmp-wizard-editor.component.ts | 23 ++-- .../misc/criteria/base-criteria.component.ts | 14 +-- .../form-composite-field.component.ts | 7 +- .../form-field/form-field.component.html | 37 ++++--- .../form-field/form-field.component.ts | 35 +++++- .../form-section/form-section.component.ts | 6 +- .../dataset-description-form.module.ts | 4 +- .../autocomplete-remote.component.css | 3 - .../autocomplete-remote.component.html | 3 - .../autocomplete-remote.component.ts | 53 --------- .../misc/navigation/navigation.component.ts | 7 +- .../user-dialog/user-dialog.component.html | 35 +++--- .../user-dialog/user-dialog.component.ts | 2 +- .../editor/project-editor.component.html | 12 +- .../editor/project-editor.component.ts | 7 +- .../ui/project/editor/project-editor.model.ts | 18 +-- .../criteria/project-criteria.component.html | 3 - .../user-profile/user-profile.component.html | 104 +++++++++--------- .../user-profile/user-profile.component.scss | 27 +++-- .../ui/user-profile/user-profile.component.ts | 13 ++- .../ui/user-profile/user-profile.module.ts | 2 +- 59 files changed, 386 insertions(+), 438 deletions(-) create mode 100644 dmp-frontend/src/app/core/query/dataset/daatset-external-autocomplete-criteria.ts create mode 100644 dmp-frontend/src/app/core/services/dataset/dataset-external-autocomplete.service.ts delete mode 100644 dmp-frontend/src/app/ui/misc/dataset-description-form/dynamic-fields/dynamic-field-autocomplete/autocomplete-remote.component.css delete mode 100644 dmp-frontend/src/app/ui/misc/dataset-description-form/dynamic-fields/dynamic-field-autocomplete/autocomplete-remote.component.html delete mode 100644 dmp-frontend/src/app/ui/misc/dataset-description-form/dynamic-fields/dynamic-field-autocomplete/autocomplete-remote.component.ts diff --git a/dmp-backend/web/src/main/java/eu/eudat/logic/handlers/PrincipalArgumentResolver.java b/dmp-backend/web/src/main/java/eu/eudat/logic/handlers/PrincipalArgumentResolver.java index 44784769f..3e203525d 100644 --- a/dmp-backend/web/src/main/java/eu/eudat/logic/handlers/PrincipalArgumentResolver.java +++ b/dmp-backend/web/src/main/java/eu/eudat/logic/handlers/PrincipalArgumentResolver.java @@ -60,5 +60,4 @@ public final class PrincipalArgumentResolver implements HandlerMethodArgumentRes dt = c.getTime(); return dt; } - } \ No newline at end of file diff --git a/dmp-frontend/src/app/app-routing.module.ts b/dmp-frontend/src/app/app-routing.module.ts index 7c8ff7c18..0d7c0dbcc 100644 --- a/dmp-frontend/src/app/app-routing.module.ts +++ b/dmp-frontend/src/app/app-routing.module.ts @@ -80,6 +80,13 @@ const appRoutes: Routes = [ breadcrumb: true }, }, + { + path: 'profile', + loadChildren: './ui/user-profile/user-profile.module#UserProfileModule', + data: { + breadcrumb: true + }, + }, { path: 'login', loadChildren: './ui/auth/login/login.module#LoginModule', diff --git a/dmp-frontend/src/app/common/http/interceptors/unauthorized-response.interceptor.ts b/dmp-frontend/src/app/common/http/interceptors/unauthorized-response.interceptor.ts index 612743c1f..2417f00dd 100644 --- a/dmp-frontend/src/app/common/http/interceptors/unauthorized-response.interceptor.ts +++ b/dmp-frontend/src/app/common/http/interceptors/unauthorized-response.interceptor.ts @@ -25,7 +25,9 @@ export class UnauthorizedResponseInterceptor extends BaseInterceptor { if (error instanceof HttpErrorResponse) { switch ((error).status) { case 401: - return this.handle401Error(req, next); + this.logoutUser(); + return throwError(error); + //return this.handle401Error(req, next); default: return throwError(error); } @@ -35,20 +37,20 @@ export class UnauthorizedResponseInterceptor extends BaseInterceptor { })); } - private handle401Error(req: HttpRequest, next: HttpHandler) { - if (!this.accountRefresh$) { - // this.accountRefresh$ = this.idpService.refreshToken().pipe( - // tap(account => { - // this.accountRefresh$ = null; - // if (!account) { throw throwError('missing_authentication_token'); } - // }), - // catchError(error => { - // this.logoutUser(); - // return throwError(error); - // })); - } - return this.accountRefresh$.pipe(mergeMap(account => this.repeatRequest(account, req, next))); - } + // private handle401Error(req: HttpRequest, next: HttpHandler) { + // if (!this.accountRefresh$) { + // this.accountRefresh$ = this.authService.refreshToken().pipe( + // tap(account => { + // this.accountRefresh$ = null; + // if (!account) { throw throwError('missing_authentication_token'); } + // }), + // catchError(error => { + // this.logoutUser(); + // return throwError(error); + // })); + // } + // return this.accountRefresh$.pipe(mergeMap(account => this.repeatRequest(account, req, next))); + // } private repeatRequest(account: Account, originalRequest: HttpRequest, next: HttpHandler) { const newAuthenticationToken: String = this.authService.current().token; diff --git a/dmp-frontend/src/app/core/core-service.module.ts b/dmp-frontend/src/app/core/core-service.module.ts index a6f52f455..341b8da19 100644 --- a/dmp-frontend/src/app/core/core-service.module.ts +++ b/dmp-frontend/src/app/core/core-service.module.ts @@ -8,6 +8,7 @@ import { CultureService } from './services/culture/culture-service'; import { DashboardService } from './services/dashboard/dashboard.service'; import { DatasetProfileService } from './services/dataset-profile/dataset-profile.service'; import { DatasetWizardService } from './services/dataset-wizard/dataset-wizard.service'; +import { DatasetExternalAutocompleteService } from './services/dataset/dataset-external-autocomplete.service'; import { DatasetService } from './services/dataset/dataset.service'; import { DmpInvitationService } from './services/dmp/dmp-invitation.service'; import { DmpProfileService } from './services/dmp/dmp-profile.service'; @@ -79,7 +80,8 @@ export class CoreServiceModule { ExternalServiceService, DatasetProfileService, UserService, - DmpInvitationService + DmpInvitationService, + DatasetExternalAutocompleteService ], }; } diff --git a/dmp-frontend/src/app/core/formatting.module.ts b/dmp-frontend/src/app/core/formatting.module.ts index 321184a44..ce65f2cff 100644 --- a/dmp-frontend/src/app/core/formatting.module.ts +++ b/dmp-frontend/src/app/core/formatting.module.ts @@ -1,6 +1,7 @@ import { DatePipe } from '@angular/common'; import { NgModule } from '@angular/core'; import { NgForLimitPipe } from './pipes/ng-for-limit.pipe'; +import { TimezoneInfoDisplayPipe } from './pipes/timezone-info-display.pipe'; import { EnumUtils } from './services/utilities/enum-utils.service'; // @@ -11,15 +12,18 @@ import { EnumUtils } from './services/utilities/enum-utils.service'; @NgModule({ declarations: [ - NgForLimitPipe + NgForLimitPipe, + TimezoneInfoDisplayPipe ], exports: [ - NgForLimitPipe + NgForLimitPipe, + TimezoneInfoDisplayPipe ], providers: [ EnumUtils, DatePipe, - NgForLimitPipe + NgForLimitPipe, + TimezoneInfoDisplayPipe ] }) export class FormattingModule { } diff --git a/dmp-frontend/src/app/core/model/auth/principal.ts b/dmp-frontend/src/app/core/model/auth/principal.ts index 06228d6dd..15937a98c 100644 --- a/dmp-frontend/src/app/core/model/auth/principal.ts +++ b/dmp-frontend/src/app/core/model/auth/principal.ts @@ -1,7 +1,7 @@ import { AppRole } from "../../common/enum/app-role"; export interface Principal { - id: number; + id: string; token: string; name: string; expiresAt: Date; diff --git a/dmp-frontend/src/app/core/model/dataset/dataset-profile.ts b/dmp-frontend/src/app/core/model/dataset/dataset-profile.ts index a8a2fd2ea..e926bd9d9 100644 --- a/dmp-frontend/src/app/core/model/dataset/dataset-profile.ts +++ b/dmp-frontend/src/app/core/model/dataset/dataset-profile.ts @@ -27,7 +27,7 @@ export interface DatasetProfileModel { // createValidationContext(): ValidationContext { // const baseContext: ValidationContext = new ValidationContext(); -// //baseContext.validation.push({ key: 'id', validators: [Validators.required, BackendErrorValidator(this.errorModel, 'id')] }); +// //baseContext.validation.push({ key: 'id', validators: [Validators.required, BackendErrorValidator(this.validationErrorModel, 'id')] }); // return baseContext; // } // } diff --git a/dmp-frontend/src/app/core/model/dataset/dataset.ts b/dmp-frontend/src/app/core/model/dataset/dataset.ts index 9341cab81..91214d136 100644 --- a/dmp-frontend/src/app/core/model/dataset/dataset.ts +++ b/dmp-frontend/src/app/core/model/dataset/dataset.ts @@ -24,7 +24,7 @@ export interface DatasetModel { // public registries: RegistryModel[] = []; // public dataRepositories: DataRepositoryModel[] = []; -// public errorModel: ValidationErrorModel = new ValidationErrorModel(); +// public validationErrorModel: ValidationErrorModel = new ValidationErrorModel(); // fromJSONObject(item: any): DatasetModel { // this.id = item.id; @@ -59,14 +59,14 @@ export interface DatasetModel { // createValidationContext(): ValidationContext { // const baseContext: ValidationContext = new ValidationContext(); -// baseContext.validation.push({ key: 'label', validators: [Validators.required, BackendErrorValidator(this.errorModel, 'label')] }); -// baseContext.validation.push({ key: 'profile', validators: [Validators.required, BackendErrorValidator(this.errorModel, 'profile')] }); -// baseContext.validation.push({ key: 'uri', validators: [BackendErrorValidator(this.errorModel, 'uri')] }); -// baseContext.validation.push({ key: 'status', validators: [Validators.required, BackendErrorValidator(this.errorModel, 'status')] }); -// baseContext.validation.push({ key: 'description', validators: [BackendErrorValidator(this.errorModel, 'description')] }); -// baseContext.validation.push({ key: 'services', validators: [Validators.required, BackendErrorValidator(this.errorModel, 'services')] }); -// baseContext.validation.push({ key: 'registries', validators: [Validators.required, BackendErrorValidator(this.errorModel, 'registries')] }); -// baseContext.validation.push({ key: 'dataRepositories', validators: [Validators.required, BackendErrorValidator(this.errorModel, 'dataRepositories')] }); +// baseContext.validation.push({ key: 'label', validators: [Validators.required, BackendErrorValidator(this.validationErrorModel, 'label')] }); +// baseContext.validation.push({ key: 'profile', validators: [Validators.required, BackendErrorValidator(this.validationErrorModel, 'profile')] }); +// baseContext.validation.push({ key: 'uri', validators: [BackendErrorValidator(this.validationErrorModel, 'uri')] }); +// baseContext.validation.push({ key: 'status', validators: [Validators.required, BackendErrorValidator(this.validationErrorModel, 'status')] }); +// baseContext.validation.push({ key: 'description', validators: [BackendErrorValidator(this.validationErrorModel, 'description')] }); +// baseContext.validation.push({ key: 'services', validators: [Validators.required, BackendErrorValidator(this.validationErrorModel, 'services')] }); +// baseContext.validation.push({ key: 'registries', validators: [Validators.required, BackendErrorValidator(this.validationErrorModel, 'registries')] }); +// baseContext.validation.push({ key: 'dataRepositories', validators: [Validators.required, BackendErrorValidator(this.validationErrorModel, 'dataRepositories')] }); // return baseContext; // } diff --git a/dmp-frontend/src/app/core/query/dataset/daatset-external-autocomplete-criteria.ts b/dmp-frontend/src/app/core/query/dataset/daatset-external-autocomplete-criteria.ts new file mode 100644 index 000000000..9351b8ed1 --- /dev/null +++ b/dmp-frontend/src/app/core/query/dataset/daatset-external-autocomplete-criteria.ts @@ -0,0 +1,6 @@ +import { BaseCriteria } from "../base-criteria"; + +export class DatasetExternalAutocompleteCriteria extends BaseCriteria { + public profileID: String; + public fieldID: String; +} \ No newline at end of file diff --git a/dmp-frontend/src/app/core/services/dataset/dataset-external-autocomplete.service.ts b/dmp-frontend/src/app/core/services/dataset/dataset-external-autocomplete.service.ts new file mode 100644 index 000000000..571e73f94 --- /dev/null +++ b/dmp-frontend/src/app/core/services/dataset/dataset-external-autocomplete.service.ts @@ -0,0 +1,28 @@ +import { HttpClient } from '@angular/common/http'; +import { Injectable } from '@angular/core'; +import { Observable } from 'rxjs'; +import { environment } from '../../../../environments/environment'; +import { DatasetExternalAutocompleteCriteria } from '../../query/dataset/daatset-external-autocomplete-criteria'; +import { RequestItem } from '../../query/request-item'; +import { DatasetProfileService } from '../dataset-profile/dataset-profile.service'; + +@Injectable() +export class DatasetExternalAutocompleteService { + + private actionUrl: string; + + constructor( + private httpClient: HttpClient, + private datasetProfileService: DatasetProfileService) { + this.actionUrl = environment.Server + 'datasetwizard/'; + } + + getDatasetProfileById(datasetProfileID) { + return this.datasetProfileService.getDatasetProfileById(datasetProfileID); + } + + queryAutocomplete(lookUpItem: RequestItem): Observable { + return this.httpClient.post(environment.Server + 'search/autocomplete', lookUpItem); + } + +} diff --git a/dmp-frontend/src/app/core/services/utilities/enum-utils.service.ts b/dmp-frontend/src/app/core/services/utilities/enum-utils.service.ts index 5a2b25d3a..8aea375d8 100644 --- a/dmp-frontend/src/app/core/services/utilities/enum-utils.service.ts +++ b/dmp-frontend/src/app/core/services/utilities/enum-utils.service.ts @@ -22,23 +22,23 @@ export class EnumUtils { convertFromPrincipalAppRole(status: AppRole): string { switch (status) { - case AppRole.Admin: return 'TYPES.APP-ROLE.ADMIN'; - case AppRole.User: return 'TYPES.APP-ROLE.USER'; - case AppRole.Manager: return 'TYPES.APP-ROLE.MANAGER'; + case AppRole.Admin: return this.language.instant('TYPES.APP-ROLE.ADMIN'); + case AppRole.User: return this.language.instant('TYPES.APP-ROLE.USER'); + case AppRole.Manager: return this.language.instant('TYPES.APP-ROLE.MANAGER'); } } toDmpProfileFieldDataTypeString(type: DmpProfileFieldDataType): string { switch (type) { - case DmpProfileFieldDataType.Date: return 'TYPES.DMP-PROFILE-FIELD.DATA-TYPE.DATE'; - case DmpProfileFieldDataType.Number: return 'TYPES.DMP-PROFILE-FIELD.DATA-TYPE.NUMBER'; - case DmpProfileFieldDataType.Text: return 'TYPES.DMP-PROFILE-FIELD.DATA-TYPE.TEXT'; + case DmpProfileFieldDataType.Date: return this.language.instant('TYPES.DMP-PROFILE-FIELD.DATA-TYPE.DATE'); + case DmpProfileFieldDataType.Number: return this.language.instant('TYPES.DMP-PROFILE-FIELD.DATA-TYPE.NUMBER'); + case DmpProfileFieldDataType.Text: return this.language.instant('TYPES.DMP-PROFILE-FIELD.DATA-TYPE.TEXT'); } } toDmpProfileTypeString(type: DmpProfileType): string { switch (type) { - case DmpProfileType.Input: return 'TYPES.DMP-PROFILE-FIELD.TYPE.INPUT'; + case DmpProfileType.Input: return this.language.instant('TYPES.DMP-PROFILE-FIELD.TYPE.INPUT'); } } diff --git a/dmp-frontend/src/app/ui/admin/dataset-profile/listing/criteria/dataset-profile.component.html b/dmp-frontend/src/app/ui/admin/dataset-profile/listing/criteria/dataset-profile.component.html index 0bea9acbf..04a27d99b 100644 --- a/dmp-frontend/src/app/ui/admin/dataset-profile/listing/criteria/dataset-profile.component.html +++ b/dmp-frontend/src/app/ui/admin/dataset-profile/listing/criteria/dataset-profile.component.html @@ -5,7 +5,6 @@ - {{baseErrorModel['Criteria.like']}} diff --git a/dmp-frontend/src/app/ui/admin/dataset-profile/listing/dataset-profile-listing.component.html b/dmp-frontend/src/app/ui/admin/dataset-profile/listing/dataset-profile-listing.component.html index af99ee0cd..a851e96de 100644 --- a/dmp-frontend/src/app/ui/admin/dataset-profile/listing/dataset-profile-listing.component.html +++ b/dmp-frontend/src/app/ui/admin/dataset-profile/listing/dataset-profile-listing.component.html @@ -4,9 +4,6 @@ - - - diff --git a/dmp-frontend/src/app/ui/admin/dataset-profile/listing/dataset-profile-listing.component.ts b/dmp-frontend/src/app/ui/admin/dataset-profile/listing/dataset-profile-listing.component.ts index 29eeb804c..035888617 100644 --- a/dmp-frontend/src/app/ui/admin/dataset-profile/listing/dataset-profile-listing.component.ts +++ b/dmp-frontend/src/app/ui/admin/dataset-profile/listing/dataset-profile-listing.component.ts @@ -5,12 +5,12 @@ import { ActivatedRoute, Params, Router } from '@angular/router'; import { Observable } from 'rxjs'; import { takeUntil } from 'rxjs/operators'; import { BaseComponent } from '../../../../core/common/base/base.component'; +import { DataTableRequest } from '../../../../core/model/data-table/data-table-request'; import { DatasetListingModel } from '../../../../core/model/dataset/dataset-listing'; import { DmpModel } from '../../../../core/model/dmp/dmp'; import { DatasetProfileCriteria } from '../../../../core/query/dataset-profile/dataset-profile-criteria'; import { DatasetProfileService } from '../../../../core/services/dataset-profile/dataset-profile.service'; import { DmpService } from '../../../../core/services/dmp/dmp.service'; -import { DataTableRequest } from '../../../../core/model/data-table/data-table-request'; import { DatasetProfileCriteriaComponent } from './criteria/dataset-profile.component'; @Component({ @@ -89,7 +89,6 @@ export class DatasetProfileListingComponent extends BaseComponent implements OnI export class DatasetDataSource extends DataSource { totalCount = 0; - isLoadingResults = false; constructor( private _service: DatasetProfileService, @@ -110,9 +109,6 @@ export class DatasetDataSource extends DataSource { return Observable.merge(...displayDataChanges) .startWith(null) .switchMap(() => { - setTimeout(() => { - this.isLoadingResults = true; - }); const startIndex = this._paginator.pageIndex * this._paginator.pageSize; let fields: Array = new Array(); if (this._sort.active) { fields = this._sort.direction === 'asc' ? ['+' + this._sort.active] : ['-' + this._sort.active]; } @@ -130,9 +126,6 @@ export class DatasetDataSource extends DataSource { return Observable.of(null); })*/ .map(result => { - setTimeout(() => { - this.isLoadingResults = false; - }); return result; }) .map(result => { diff --git a/dmp-frontend/src/app/ui/admin/dmp-profile/editor/dmp-profile-editor.component.html b/dmp-frontend/src/app/ui/admin/dmp-profile/editor/dmp-profile-editor.component.html index 084a07a0f..34a4dc449 100644 --- a/dmp-frontend/src/app/ui/admin/dmp-profile/editor/dmp-profile-editor.component.html +++ b/dmp-frontend/src/app/ui/admin/dmp-profile/editor/dmp-profile-editor.component.html @@ -13,7 +13,7 @@
- {{baseErrorModel.label}} + {{formGroup.get('label').getError('backendError').message}} {{'GENERAL.VALIDATION.REQUIRED' | translate}} @@ -23,7 +23,7 @@ {{'GENERAL.VALIDATION.REQUIRED' | translate}} - {{baseErrorModel.label}} + {{fieldFormGroup.get('label').getError('backendError').message}} @@ -31,7 +31,7 @@ getDMPProfileFieldTypeWithLanguage(fieldType) | translate}} {{'GENERAL.VALIDATION.REQUIRED' | translate}} - {{baseErrorModel.type}} + {{fieldFormGroup.get('type').getError('backendError').message}} @@ -39,7 +39,7 @@ getDMPProfileFieldDataTypeWithLanguage(fieldDataType) | translate}} {{'GENERAL.VALIDATION.REQUIRED' | translate}} - {{baseErrorModel.dataType}} + {{fieldFormGroup.get('dataType').getError('backendError').message}}
{{'DMP-PROFILE-EDITOR.FIELDS.REQUIRED' | translate}} diff --git a/dmp-frontend/src/app/ui/admin/dmp-profile/editor/dmp-profile-editor.component.ts b/dmp-frontend/src/app/ui/admin/dmp-profile/editor/dmp-profile-editor.component.ts index 210c94be6..9d0edef15 100644 --- a/dmp-frontend/src/app/ui/admin/dmp-profile/editor/dmp-profile-editor.component.ts +++ b/dmp-frontend/src/app/ui/admin/dmp-profile/editor/dmp-profile-editor.component.ts @@ -5,6 +5,7 @@ import { ActivatedRoute, Params, Router } from '@angular/router'; import { TranslateService } from '@ngx-translate/core'; import { takeUntil } from 'rxjs/operators'; import { environment } from '../../../../../environments/environment'; +import { ValidationErrorModel } from '../../../../common/forms/validation/error-model/validation-error-model'; import { BaseComponent } from '../../../../core/common/base/base.component'; import { DmpProfileFieldDataType } from '../../../../core/common/enum/dmp-profile-field-type'; import { DmpProfileType } from '../../../../core/common/enum/dmp-profile-type'; @@ -25,7 +26,6 @@ export class DmpProfileEditorComponent extends BaseComponent implements AfterVie dmpProfileModel: DmpProfileEditorModel; formGroup: FormGroup = null; host = environment.Server; - baseErrorModel: BaseErrorModel; constructor( private dmpProfileService: DmpProfileService, @@ -50,13 +50,10 @@ export class DmpProfileEditorComponent extends BaseComponent implements AfterVie .pipe(takeUntil(this._destroyed)) .subscribe(data => { this.dmpProfileModel = new DmpProfileEditorModel().fromModel(data); - //this.baseErrorModel = this.dmpProfileModel.errorModel; this.formGroup = this.dmpProfileModel.buildForm(); }); } else { this.dmpProfileModel = new DmpProfileEditorModel(); - //this.baseErrorModel = this.dmpProfileModel.errorModel; - setTimeout(() => { this.formGroup = this.dmpProfileModel.buildForm(); }); @@ -96,10 +93,10 @@ export class DmpProfileEditorComponent extends BaseComponent implements AfterVie this.validateAllFormFields(this.formGroup); } - public setErrorModel(errorModel: BaseErrorModel) { - // Object.keys(errorModel).forEach(item => { - // (this.dmpProfileModel.errorModel)[item] = (errorModel)[item]; - // }); + public setErrorModel(validationErrorModel: ValidationErrorModel) { + Object.keys(validationErrorModel).forEach(item => { + (this.dmpProfileModel.validationErrorModel)[item] = (validationErrorModel)[item]; + }); } public cancel(): void { diff --git a/dmp-frontend/src/app/ui/admin/dmp-profile/editor/dmp-profile-editor.model.ts b/dmp-frontend/src/app/ui/admin/dmp-profile/editor/dmp-profile-editor.model.ts index cd933a9e4..612167901 100644 --- a/dmp-frontend/src/app/ui/admin/dmp-profile/editor/dmp-profile-editor.model.ts +++ b/dmp-frontend/src/app/ui/admin/dmp-profile/editor/dmp-profile-editor.model.ts @@ -13,7 +13,7 @@ export class DmpProfileEditorModel { public status: number; public created: Date; public modified: Date; - public errorModel: ValidationErrorModel = new ValidationErrorModel(); + public validationErrorModel: ValidationErrorModel = new ValidationErrorModel(); fromModel(item: DmpProfile): DmpProfileEditorModel { this.id = item.id; diff --git a/dmp-frontend/src/app/ui/admin/dmp-profile/listing/criteria/dmp-profile-criteria.component.html b/dmp-frontend/src/app/ui/admin/dmp-profile/listing/criteria/dmp-profile-criteria.component.html index d3102c1dc..59c344f18 100644 --- a/dmp-frontend/src/app/ui/admin/dmp-profile/listing/criteria/dmp-profile-criteria.component.html +++ b/dmp-frontend/src/app/ui/admin/dmp-profile/listing/criteria/dmp-profile-criteria.component.html @@ -3,7 +3,6 @@
- {{baseErrorModel['Criteria.like']}}
diff --git a/dmp-frontend/src/app/ui/admin/user/listing/criteria/user-criteria.component.html b/dmp-frontend/src/app/ui/admin/user/listing/criteria/user-criteria.component.html index 546010f02..672a39da2 100644 --- a/dmp-frontend/src/app/ui/admin/user/listing/criteria/user-criteria.component.html +++ b/dmp-frontend/src/app/ui/admin/user/listing/criteria/user-criteria.component.html @@ -2,11 +2,11 @@
- + - - {{getPrincipalAppRoleWithLanguage(role)}} + + {{enumUtils.convertFromPrincipalAppRole(role)}}
diff --git a/dmp-frontend/src/app/ui/admin/user/listing/criteria/user-criteria.component.ts b/dmp-frontend/src/app/ui/admin/user/listing/criteria/user-criteria.component.ts index b170d8c52..ffa011faf 100644 --- a/dmp-frontend/src/app/ui/admin/user/listing/criteria/user-criteria.component.ts +++ b/dmp-frontend/src/app/ui/admin/user/listing/criteria/user-criteria.component.ts @@ -1,9 +1,7 @@ import { Component, OnInit } from '@angular/core'; import { FormBuilder, FormGroup } from '@angular/forms'; -import { TranslateService } from '@ngx-translate/core'; -import { takeUntil } from 'rxjs/operators'; +import { debounceTime, takeUntil } from 'rxjs/operators'; import { ValidationErrorModel } from '../../../../../common/forms/validation/error-model/validation-error-model'; -import { Validation, ValidationContext } from '../../../../../common/forms/validation/validation-context'; import { AppRole } from '../../../../../core/common/enum/app-role'; import { UserCriteria } from '../../../../../core/query/user/user-criteria'; import { EnumUtils } from '../../../../../core/services/utilities/enum-utils.service'; @@ -16,13 +14,12 @@ import { BaseCriteriaComponent } from '../../../../misc/criteria/base-criteria.c }) export class UserCriteriaComponent extends BaseCriteriaComponent implements OnInit { - public role: AppRole; + public rolesEnum = this.enumUtils.getEnumValues(AppRole); public criteria: UserCriteria = new UserCriteria(); constructor( - private language: TranslateService, private formBuilder: FormBuilder, - private enumUtils: EnumUtils + public enumUtils: EnumUtils ) { super(new ValidationErrorModel()); } @@ -31,13 +28,20 @@ export class UserCriteriaComponent extends BaseCriteriaComponent implements OnIn super.ngOnInit(); if (this.criteria == null) { this.criteria = new UserCriteria(); } if (this.formGroup == null) { this.formGroup = this.buildForm(); } + this.registerListeners(); } setCriteria(criteria: UserCriteria): void { this.criteria = criteria; this.formGroup = this.buildForm(); + this.registerListeners(); } + registerListeners() { + this.formGroup.valueChanges + .pipe(takeUntil(this._destroyed), debounceTime(300)) + .subscribe(x => this.controlModified()); + } public fromJSONObject(item: any): UserCriteria { this.criteria = new UserCriteria(); this.criteria.label = item.Label; @@ -46,40 +50,9 @@ export class UserCriteriaComponent extends BaseCriteriaComponent implements OnIn } buildForm(): FormGroup { - const context: ValidationContext = this.createValidationContext(); - return this.formBuilder.group({ - like: [this.criteria.label, context.getValidation('label').validators], - appRoles: [this.criteria.appRoles, context.getValidation('appRoles').validators], + like: [this.criteria.label, []], + appRoles: [this.criteria.appRoles, []], }); } - - createValidationContext(): ValidationContext { - const validationContext: ValidationContext = new ValidationContext(); - const validationArray: Validation[] = new Array(); - - validationArray.push({ key: 'label' }); - validationArray.push({ key: 'appRoles' }); - - validationContext.validation = validationArray; - return validationContext; - } - - getPrincipalAppRoleValues(): Number[] { - let keys: string[] = Object.keys(AppRole); - keys = keys.slice(0, keys.length / 2); - const values: Number[] = keys.map(Number); - return values; - } - - getPrincipalAppRoleWithLanguage(role: AppRole): string { - let result = ''; - this.language.get(this.enumUtils.convertFromPrincipalAppRole(role)) - .pipe(takeUntil(this._destroyed)) - .subscribe((value: string) => { - result = value; - }); - return result; - } - } diff --git a/dmp-frontend/src/app/ui/admin/user/listing/role-editor/user-role-editor.component.ts b/dmp-frontend/src/app/ui/admin/user/listing/role-editor/user-role-editor.component.ts index d4a43c2ba..a6ff3d3fe 100644 --- a/dmp-frontend/src/app/ui/admin/user/listing/role-editor/user-role-editor.component.ts +++ b/dmp-frontend/src/app/ui/admin/user/listing/role-editor/user-role-editor.component.ts @@ -21,7 +21,6 @@ export class UserRoleEditorComponent extends BaseComponent implements OnInit { @Input() public item: UserListingModel; public formGroup: FormGroup = null; public nowEditing = false; - //public errorModel: UserErrorModel; constructor( private language: TranslateService, @@ -32,7 +31,6 @@ export class UserRoleEditorComponent extends BaseComponent implements OnInit { ) { super(); } ngOnInit() { - // if (this.errorModel == null) { this.errorModel = new UserErrorModel(); } if (this.formGroup == null) { this.formGroup = this.buildForm(); } } @@ -55,7 +53,6 @@ export class UserRoleEditorComponent extends BaseComponent implements OnInit { } formSubmit(): void { - this.clearErrorModel(); const modifiedItem = this.item; modifiedItem.appRoles = this.getFormControl('appRoles').value; @@ -118,18 +115,6 @@ export class UserRoleEditorComponent extends BaseComponent implements OnInit { } } - setErrorModel(errorModel: any) { - // Object.keys(errorModel).forEach(item => { - // (this.errorModel)[item] = (errorModel)[item]; - // }); - } - - clearErrorModel() { - // Object.keys(this.errorModel).forEach(item => { - // (this.errorModel)[item] = ''; - // }); - } - onCallbackSuccess() { this.nowEditing = false; this.formGroup.disable(); @@ -139,7 +124,6 @@ export class UserRoleEditorComponent extends BaseComponent implements OnInit { }); } onCallbackError(error: any) { - this.setErrorModel(error.error); this.validateAllFormFields(this.formGroup); this.snackBar.openFromComponent(SnackBarNotificationComponent, { data: { message: 'GENERAL.SNACK-BAR.UNSUCCESSFUL-UPDATE', language: this.language }, diff --git a/dmp-frontend/src/app/ui/auth/admin-login/admin-login.component.ts b/dmp-frontend/src/app/ui/auth/admin-login/admin-login.component.ts index a57af703a..7b59fb43e 100644 --- a/dmp-frontend/src/app/ui/auth/admin-login/admin-login.component.ts +++ b/dmp-frontend/src/app/ui/auth/admin-login/admin-login.component.ts @@ -16,7 +16,7 @@ import { AuthService } from '../../../core/services/auth/auth.service'; export class AdminLoginComponent extends BaseComponent implements OnInit { public auth2: any; - public credential: Credential = new Credential(); + public credential: Credential; constructor( private authService: AuthService, diff --git a/dmp-frontend/src/app/ui/auth/login/login.component.ts b/dmp-frontend/src/app/ui/auth/login/login.component.ts index 3d0928966..d7dc5e174 100644 --- a/dmp-frontend/src/app/ui/auth/login/login.component.ts +++ b/dmp-frontend/src/app/ui/auth/login/login.component.ts @@ -9,6 +9,9 @@ import { LoginService } from './utilities/login.service'; /// /// +declare const gapi: any; +declare const FB: any; + @Component({ selector: 'app-login', templateUrl: './login.component.html', diff --git a/dmp-frontend/src/app/ui/dashboard/dashboard.component.ts b/dmp-frontend/src/app/ui/dashboard/dashboard.component.ts index 39a99348c..1553b0ddf 100644 --- a/dmp-frontend/src/app/ui/dashboard/dashboard.component.ts +++ b/dmp-frontend/src/app/ui/dashboard/dashboard.component.ts @@ -68,9 +68,7 @@ export class DashboardComponent extends BaseComponent implements OnInit { // filterFn: this.searchProject.bind(this), // items: this.searchProject(''), // displayFn: (item) => item['label'], - // titleFn: (item) => item['label'], - // //mapFn: (item) => new JsonSerializer().fromJSONArray(item, ProjectReference).map(item => item.toDropdownList()), - // loadDataOnStart: true + // titleFn: (item) => item['label'] // }; if (!this.isAuthenticated()) { diff --git a/dmp-frontend/src/app/ui/dataset/dataset-wizard/dataset-editor/dataset-editor.component.html b/dmp-frontend/src/app/ui/dataset/dataset-wizard/dataset-editor/dataset-editor.component.html index 685779a10..b53e87f72 100644 --- a/dmp-frontend/src/app/ui/dataset/dataset-wizard/dataset-editor/dataset-editor.component.html +++ b/dmp-frontend/src/app/ui/dataset/dataset-wizard/dataset-editor/dataset-editor.component.html @@ -1,17 +1,17 @@
- {{baseErrorModel.label}} + {{formGroup.get('label').getError('backendError').message}} {{'GENERAL.VALIDATION.REQUIRED' | translate}} - {{baseErrorModel.uri}} + {{formGroup.get('uri').getError('backendError').message}} {{'GENERAL.VALIDATION.REQUIRED' | translate}} - {{errorModel.description}} + {{formGroup.get('description').getError('backendError').message}} {{'GENERAL.VALIDATION.REQUIRED' | translate}}
diff --git a/dmp-frontend/src/app/ui/dataset/dataset-wizard/dataset-wizard-editor.model.ts b/dmp-frontend/src/app/ui/dataset/dataset-wizard/dataset-wizard-editor.model.ts index c61db713c..ecfe77146 100644 --- a/dmp-frontend/src/app/ui/dataset/dataset-wizard/dataset-wizard-editor.model.ts +++ b/dmp-frontend/src/app/ui/dataset/dataset-wizard/dataset-wizard-editor.model.ts @@ -27,7 +27,7 @@ export class DatasetWizardEditorModel { public externalDatasets: ExternalDatasetEditorModel[] = []; public dmp: DmpModel; public datasetProfileDefinition: DatasetDescriptionFormEditorModel; - public errorModel: ValidationErrorModel = new ValidationErrorModel(); + public validationErrorModel: ValidationErrorModel = new ValidationErrorModel(); fromModel(item: DatasetWizardModel): DatasetWizardEditorModel { this.id = item.id; @@ -122,20 +122,19 @@ export class DatasetWizardEditorModel { createValidationContext(): ValidationContext { const baseContext: ValidationContext = new ValidationContext(); - baseContext.validation.push({ key: 'id', validators: [BackendErrorValidator(this.errorModel, 'id')] }); - baseContext.validation.push({ key: 'label', validators: [Validators.required, BackendErrorValidator(this.errorModel, 'label')] }); - baseContext.validation.push({ key: 'profile', validators: [Validators.required, BackendErrorValidator(this.errorModel, 'profile')] }); - baseContext.validation.push({ key: 'uri', validators: [BackendErrorValidator(this.errorModel, 'uri')] }); - baseContext.validation.push({ key: 'status', validators: [BackendErrorValidator(this.errorModel, 'status')] }); - baseContext.validation.push({ key: 'description', validators: [BackendErrorValidator(this.errorModel, 'description')] }); - baseContext.validation.push({ key: 'services', validators: [BackendErrorValidator(this.errorModel, 'services')] }); - baseContext.validation.push({ key: 'registries', validators: [BackendErrorValidator(this.errorModel, 'registries')] }); - baseContext.validation.push({ key: 'dataRepositories', validators: [BackendErrorValidator(this.errorModel, 'dataRepositories')] }); - baseContext.validation.push({ key: 'externalDatasets', validators: [BackendErrorValidator(this.errorModel, 'externalDatasets')] }); - baseContext.validation.push({ key: 'dmp', validators: [BackendErrorValidator(this.errorModel, 'dmp')] }); //TODO - baseContext.validation.push({ key: 'datasetProfileDefinition', validators: [BackendErrorValidator(this.errorModel, 'datasetProfileDefinition')] }); //TODO - baseContext.validation.push({ key: 'tags', validators: [BackendErrorValidator(this.errorModel, 'datasetProfileDefinition')] }); //TODO - + baseContext.validation.push({ key: 'id', validators: [BackendErrorValidator(this.validationErrorModel, 'id')] }); + baseContext.validation.push({ key: 'label', validators: [Validators.required, BackendErrorValidator(this.validationErrorModel, 'label')] }); + baseContext.validation.push({ key: 'profile', validators: [Validators.required, BackendErrorValidator(this.validationErrorModel, 'profile')] }); + baseContext.validation.push({ key: 'uri', validators: [BackendErrorValidator(this.validationErrorModel, 'uri')] }); + baseContext.validation.push({ key: 'status', validators: [BackendErrorValidator(this.validationErrorModel, 'status')] }); + baseContext.validation.push({ key: 'description', validators: [BackendErrorValidator(this.validationErrorModel, 'description')] }); + baseContext.validation.push({ key: 'services', validators: [BackendErrorValidator(this.validationErrorModel, 'services')] }); + baseContext.validation.push({ key: 'registries', validators: [BackendErrorValidator(this.validationErrorModel, 'registries')] }); + baseContext.validation.push({ key: 'dataRepositories', validators: [BackendErrorValidator(this.validationErrorModel, 'dataRepositories')] }); + baseContext.validation.push({ key: 'externalDatasets', validators: [BackendErrorValidator(this.validationErrorModel, 'externalDatasets')] }); + baseContext.validation.push({ key: 'dmp', validators: [BackendErrorValidator(this.validationErrorModel, 'dmp')] }); + baseContext.validation.push({ key: 'datasetProfileDefinition', validators: [BackendErrorValidator(this.validationErrorModel, 'datasetProfileDefinition')] }); + baseContext.validation.push({ key: 'tags', validators: [BackendErrorValidator(this.validationErrorModel, 'datasetProfileDefinition')] }); return baseContext; } } @@ -227,7 +226,7 @@ export class ExternalDatasetEditorModel { public reference: String; public type: ExternalDatasetType; public info: String; - public errorModel: ValidationErrorModel = new ValidationErrorModel(); + public validationErrorModel: ValidationErrorModel = new ValidationErrorModel(); constructor(id?: string, abbreviation?: string, label?: string, reference?: string, info?: string, type?: ExternalDatasetType) { this.id = id; diff --git a/dmp-frontend/src/app/ui/dataset/dataset-wizard/dataset-wizard.component.html b/dmp-frontend/src/app/ui/dataset/dataset-wizard/dataset-wizard.component.html index 836b4bbb9..0fd3866d0 100644 --- a/dmp-frontend/src/app/ui/dataset/dataset-wizard/dataset-wizard.component.html +++ b/dmp-frontend/src/app/ui/dataset/dataset-wizard/dataset-wizard.component.html @@ -40,7 +40,7 @@ {{profile.label}} - {{baseErrorModel['Criteria.status']}} + {{formGroup.get('profile').getError('backendError').message}}
diff --git a/dmp-frontend/src/app/ui/dataset/dataset-wizard/dataset-wizard.component.ts b/dmp-frontend/src/app/ui/dataset/dataset-wizard/dataset-wizard.component.ts index fe8dc621e..258145868 100644 --- a/dmp-frontend/src/app/ui/dataset/dataset-wizard/dataset-wizard.component.ts +++ b/dmp-frontend/src/app/ui/dataset/dataset-wizard/dataset-wizard.component.ts @@ -107,8 +107,7 @@ export class DatasetWizardComponent extends BaseComponent implements OnInit, Aft filterFn: this.searchDmp.bind(this), initialItems: (extraData) => this.searchDmp(''), displayFn: (item) => item['label'], - titleFn: (item) => item['label'], - loadDataOnStart: true + titleFn: (item) => item['label'] }; const params = this.route.snapshot.params; @@ -304,9 +303,9 @@ export class DatasetWizardComponent extends BaseComponent implements OnInit, Aft this.setErrorModel(error.error); } - public setErrorModel(errorModel: ValidationErrorModel) { - Object.keys(errorModel).forEach(item => { - (this.datasetWizardModel.errorModel)[item] = (errorModel)[item]; + public setErrorModel(validationErrorModel: ValidationErrorModel) { + Object.keys(validationErrorModel).forEach(item => { + (this.datasetWizardModel.validationErrorModel)[item] = (validationErrorModel)[item]; }); } diff --git a/dmp-frontend/src/app/ui/dataset/listing/criteria/dataset-criteria.component.html b/dmp-frontend/src/app/ui/dataset/listing/criteria/dataset-criteria.component.html index e38e321b3..6333952cb 100644 --- a/dmp-frontend/src/app/ui/dataset/listing/criteria/dataset-criteria.component.html +++ b/dmp-frontend/src/app/ui/dataset/listing/criteria/dataset-criteria.component.html @@ -8,7 +8,6 @@
- {{baseErrorModel['Criteria.like']}} @@ -16,7 +15,6 @@ {{enumUtils.toDatasetStatusString(statuses.Draft)}} {{enumUtils.toDatasetStatusString(statuses.Finalized)}} - {{baseErrorModel['Criteria.status']}} diff --git a/dmp-frontend/src/app/ui/dmp/editor/dmp-editor.component.html b/dmp-frontend/src/app/ui/dmp/editor/dmp-editor.component.html index 9e3f0ffd5..f049b3da5 100644 --- a/dmp-frontend/src/app/ui/dmp/editor/dmp-editor.component.html +++ b/dmp-frontend/src/app/ui/dmp/editor/dmp-editor.component.html @@ -59,25 +59,25 @@
- {{baseErrorModel.label}} + {{formGroup.get('label').getError('backendError').message}} {{'GENERAL.VALIDATION.REQUIRED' | translate}} - {{errorModel.description}} + {{formGroup.get('description').getError('backendError').message}} {{'GENERAL.VALIDATION.REQUIRED' | translate}} - {{errorModel.description}} + {{formGroup.get('project').getError('backendError').message}} {{'GENERAL.VALIDATION.REQUIRED' | translate}} - {{errorModel.description}} + {{formGroup.get('profiles').getError('backendError').message}} {{'GENERAL.VALIDATION.REQUIRED' | translate}} diff --git a/dmp-frontend/src/app/ui/dmp/wizard/editor/dmp-wizard-editor.component.ts b/dmp-frontend/src/app/ui/dmp/wizard/editor/dmp-wizard-editor.component.ts index 33c692c52..8f0c9d7b3 100644 --- a/dmp-frontend/src/app/ui/dmp/wizard/editor/dmp-wizard-editor.component.ts +++ b/dmp-frontend/src/app/ui/dmp/wizard/editor/dmp-wizard-editor.component.ts @@ -20,6 +20,7 @@ import { MultipleAutoCompleteConfiguration } from '../../../../library/auto-comp import { SingleAutoCompleteConfiguration } from '../../../../library/auto-complete/single/single-auto-complete-configuration'; import { SnackBarNotificationComponent } from '../../../../library/notification/snack-bar/snack-bar-notification.component'; import { LanguageResolverService } from '../../../../services/language-resolver/language-resolver.service'; +import { ValidationErrorModel } from '../../../../common/forms/validation/error-model/validation-error-model'; @Component({ selector: 'app-dmp-wizard-editor-component', @@ -68,33 +69,28 @@ export class DmpWizardEditorComponent extends BaseComponent implements OnInit { filterFn: this.searchProject.bind(this.projectService), initialItems: () => this.searchProject(''), displayFn: (item) => item['label'], - titleFn: (item) => item['label'], - loadDataOnStart: true + titleFn: (item) => item['label'] }; this.profilesAutoCompleteConfiguration = { filterFn: this.filterProfiles.bind(this), initialItems: (excludedItems: any[]) => this.filterProfiles('').map(result => result.filter(resultItem => excludedItems.map(x => x.id).indexOf(resultItem.id) === -1)), displayFn: (item) => item['label'], - titleFn: (item) => item['label'], - //mapFn: (item) => new JsonSerializer().fromJSONArray(item, ProjectReference).map(item => item.toDropdownList()), - loadDataOnStart: true + titleFn: (item) => item['label'] }; this.organisationsAutoCompleteConfiguration = { filterFn: this.filterOrganisations.bind(this), initialItems: (excludedItems: any[]) => this.filterOrganisations('').map(result => result.filter(resultItem => excludedItems.map(x => x.id).indexOf(resultItem.id) === -1)), displayFn: (item) => item['name'], - titleFn: (item) => item['name'], - loadDataOnStart: true + titleFn: (item) => item['name'] }; this.researchersAutoCompleteConfiguration = { filterFn: this.filterResearchers.bind(this), initialItems: (excludedItems: any[]) => this.filterResearchers('').map(result => result.filter(resultItem => excludedItems.map(x => x.id).indexOf(resultItem.id) === -1)), displayFn: (item) => item['name'], - titleFn: (item) => item['name'], - loadDataOnStart: true + titleFn: (item) => item['name'] }; const organisationRequestItem: RequestItem = new RequestItem(); @@ -145,15 +141,10 @@ export class DmpWizardEditorComponent extends BaseComponent implements OnInit { } onCallbackError(error: any) { - this.setErrorModel(error.error); - //this.validateAllFormFields(this.formGroup); + } - public setErrorModel(errorModel: BaseErrorModel) { - Object.keys(errorModel).forEach(item => { - // (this.dataManagementPlan.errorModel)[item] = (errorModel)[item]; - }); - } + public cancel(): void { this.router.navigate(['/plans']); diff --git a/dmp-frontend/src/app/ui/misc/criteria/base-criteria.component.ts b/dmp-frontend/src/app/ui/misc/criteria/base-criteria.component.ts index 476a3b270..065d4b04c 100644 --- a/dmp-frontend/src/app/ui/misc/criteria/base-criteria.component.ts +++ b/dmp-frontend/src/app/ui/misc/criteria/base-criteria.component.ts @@ -13,13 +13,13 @@ export class BaseCriteriaComponent extends BaseComponent implements OnInit { public formGroup: FormGroup = null; constructor( - public baseErrorModel?: ValidationErrorModel, + public validationErrorModel: ValidationErrorModel, ) { super(); } ngOnInit() { - if (this.baseErrorModel == null) { this.baseErrorModel = new ValidationErrorModel(); } + if (this.validationErrorModel == null) { this.validationErrorModel = new ValidationErrorModel(); } } controlModified(): void { @@ -85,15 +85,15 @@ export class BaseCriteriaComponent extends BaseComponent implements OnInit { this.validateAllFormFields(this.formGroup); } - public setErrorModel(errorModel: any) { - Object.keys(errorModel).forEach(item => { - (this.baseErrorModel)[item] = (errorModel)[item]; + public setErrorModel(validationErrorModel: ValidationErrorModel) { + Object.keys(validationErrorModel).forEach(item => { + (this.validationErrorModel)[item] = (validationErrorModel)[item]; }); } public clearErrorModel() { - Object.keys(this.baseErrorModel).forEach(item => { - (this.baseErrorModel)[item] = ''; + Object.keys(this.validationErrorModel).forEach(item => { + (this.validationErrorModel)[item] = ''; }); } } diff --git a/dmp-frontend/src/app/ui/misc/dataset-description-form/components/form-composite-field/form-composite-field.component.ts b/dmp-frontend/src/app/ui/misc/dataset-description-form/components/form-composite-field/form-composite-field.component.ts index 92490b056..bd04a60f5 100644 --- a/dmp-frontend/src/app/ui/misc/dataset-description-form/components/form-composite-field/form-composite-field.component.ts +++ b/dmp-frontend/src/app/ui/misc/dataset-description-form/components/form-composite-field/form-composite-field.component.ts @@ -1,7 +1,6 @@ import { Component, Input, OnInit } from '@angular/core'; import { FormArray, FormGroup } from '@angular/forms'; -import { CompositeField } from '../../../../../core/model/dataset-profile-definition/composite-field'; -import { Field } from '../../../../../core/model/dataset-profile-definition/field'; +import { DatasetDescriptionCompositeFieldEditorModel, DatasetDescriptionFieldEditorModel } from '../../dataset-description-form.model'; import { VisibilityRulesService } from '../../visibility-rules/visibility-rules.service'; @Component({ @@ -11,7 +10,7 @@ import { VisibilityRulesService } from '../../visibility-rules/visibility-rules. }) export class FormCompositeFieldComponent implements OnInit { - @Input() compositeField: CompositeField; + @Input() compositeField: DatasetDescriptionCompositeFieldEditorModel; form: FormGroup; trackByFn = (index, item) => item ? item['id'] : null; @@ -28,7 +27,7 @@ export class FormCompositeFieldComponent implements OnInit { } addMultipleField(fieldIndex: number) { - const field: Field = this.compositeField.fields[fieldIndex].cloneForMultiplicity(fieldIndex, ''); + const field: DatasetDescriptionFieldEditorModel = this.compositeField.fields[fieldIndex].cloneForMultiplicity(fieldIndex, ''); this.compositeField.fields[fieldIndex].multiplicityItems.push(field); ((this.form.get('fields').get('' + fieldIndex).get('multiplicityItems'))).push(field.buildForm()); } diff --git a/dmp-frontend/src/app/ui/misc/dataset-description-form/components/form-field/form-field.component.html b/dmp-frontend/src/app/ui/misc/dataset-description-form/components/form-field/form-field.component.html index d123b2981..e54082250 100644 --- a/dmp-frontend/src/app/ui/misc/dataset-description-form/components/form-field/form-field.component.html +++ b/dmp-frontend/src/app/ui/misc/dataset-description-form/components/form-field/form-field.component.html @@ -6,30 +6,33 @@
{{field.description}}
{{field.extendedDescription}}
- + {{'GENERAL.VALIDATION.REQUIRED' | translate}} -
- - - - - - {{opt.label}} - - {{'GENERAL.VALIDATION.REQUIRED' | translate}} - +
+
+ + + + {{'GENERAL.VALIDATION.REQUIRED' | translate}} + + + + {{opt.label}} + + {{'GENERAL.VALIDATION.REQUIRED' | translate}} + +
-
+
{{field.data.label}}
- + - - -
-
-
- {{'USER-DIALOG.EXIT' | translate}} - +
+
+ +
+ {{this.getPrincipalName()}}
+ + diff --git a/dmp-frontend/src/app/ui/misc/navigation/user-dialog/user-dialog.component.ts b/dmp-frontend/src/app/ui/misc/navigation/user-dialog/user-dialog.component.ts index 5449e9ad2..41240e64b 100644 --- a/dmp-frontend/src/app/ui/misc/navigation/user-dialog/user-dialog.component.ts +++ b/dmp-frontend/src/app/ui/misc/navigation/user-dialog/user-dialog.component.ts @@ -44,6 +44,6 @@ export class UserDialogComponent implements OnInit { public navigateToProfile() { this.dialogRef.close(); - this.router.navigate(['/users/' + this.authentication.current().id]); + this.router.navigate(['/profile']); } } diff --git a/dmp-frontend/src/app/ui/project/editor/project-editor.component.html b/dmp-frontend/src/app/ui/project/editor/project-editor.component.html index b23fc3d73..9cd581b61 100644 --- a/dmp-frontend/src/app/ui/project/editor/project-editor.component.html +++ b/dmp-frontend/src/app/ui/project/editor/project-editor.component.html @@ -43,18 +43,18 @@
- {{baseErrorModel.label}} + {{formGroup.get('label').getError('backendError').message}} {{'GENERAL.VALIDATION.REQUIRED' | translate}} - {{baseErrorModel.abbreviation}} + {{formGroup.get('abbreviation').getError('backendError').message}} - {{baseErrorModel.uri}} + {{formGroup.get('uri').getError('backendError').message}} {{'GENERAL.VALIDATION.REQUIRED' | translate}} @@ -62,7 +62,7 @@ - {{this.project.errorModel.startDate}} + {{formGroup.get('startDate').getError('backendError').message}} {{'GENERAL.VALIDATION.REQUIRED' | translate}} @@ -70,13 +70,13 @@ - {{baseErrorModel.endDate}} + {{formGroup.get('endDate').getError('backendError').message}} {{'GENERAL.VALIDATION.REQUIRED' | translate}} - {{errorModel.description}} + {{formGroup.get('description').getError('backendError').message}} {{'GENERAL.VALIDATION.REQUIRED' | translate}} diff --git a/dmp-frontend/src/app/ui/project/editor/project-editor.component.ts b/dmp-frontend/src/app/ui/project/editor/project-editor.component.ts index d5127ce9c..e515fb3d5 100644 --- a/dmp-frontend/src/app/ui/project/editor/project-editor.component.ts +++ b/dmp-frontend/src/app/ui/project/editor/project-editor.component.ts @@ -6,6 +6,7 @@ import { TranslateService } from '@ngx-translate/core'; import { Observable } from 'rxjs'; import { takeUntil } from 'rxjs/operators'; import { environment } from '../../../../environments/environment'; +import { ValidationErrorModel } from '../../../common/forms/validation/error-model/validation-error-model'; import { BaseComponent } from '../../../core/common/base/base.component'; import { ProjectType } from '../../../core/common/enum/project-type'; import { ProjectModel } from '../../../core/model/project/project'; @@ -103,9 +104,9 @@ export class ProjectEditorComponent extends BaseComponent implements OnInit, IBr this.validateAllFormFields(this.formGroup); } - public setErrorModel(errorModel: BaseErrorModel) { - Object.keys(errorModel).forEach(item => { - (this.project.errorModel)[item] = (errorModel)[item]; + public setErrorModel(validationErrorModel: ValidationErrorModel) { + Object.keys(validationErrorModel).forEach(item => { + (this.project.validationErrorModel)[item] = (validationErrorModel)[item]; }); } diff --git a/dmp-frontend/src/app/ui/project/editor/project-editor.model.ts b/dmp-frontend/src/app/ui/project/editor/project-editor.model.ts index 071a373e0..f388fca46 100644 --- a/dmp-frontend/src/app/ui/project/editor/project-editor.model.ts +++ b/dmp-frontend/src/app/ui/project/editor/project-editor.model.ts @@ -19,7 +19,7 @@ export class ProjectEditorModel { public description: String; public contentUrl: string; public files: ContentFile[]; - public errorModel: ValidationErrorModel = new ValidationErrorModel(); + public validationErrorModel: ValidationErrorModel = new ValidationErrorModel(); fromModel(item: ProjectModel): ProjectEditorModel { this.id = item.id; @@ -59,15 +59,15 @@ export class ProjectEditorModel { createValidationContext(): ValidationContext { const baseContext: ValidationContext = new ValidationContext(); baseContext.validation.push({ key: 'id', validators: [] }); - baseContext.validation.push({ key: 'label', validators: [Validators.required, BackendErrorValidator(this.errorModel, 'label')] }); - baseContext.validation.push({ key: 'abbreviation', validators: [BackendErrorValidator(this.errorModel, 'abbreviation')] }); - baseContext.validation.push({ key: 'uri', validators: [BackendErrorValidator(this.errorModel, 'uri')] }); - baseContext.validation.push({ key: 'type', validators: [BackendErrorValidator(this.errorModel, 'type')] }); + baseContext.validation.push({ key: 'label', validators: [Validators.required, BackendErrorValidator(this.validationErrorModel, 'label')] }); + baseContext.validation.push({ key: 'abbreviation', validators: [BackendErrorValidator(this.validationErrorModel, 'abbreviation')] }); + baseContext.validation.push({ key: 'uri', validators: [BackendErrorValidator(this.validationErrorModel, 'uri')] }); + baseContext.validation.push({ key: 'type', validators: [BackendErrorValidator(this.validationErrorModel, 'type')] }); baseContext.validation.push({ key: 'status', validators: [] }); - baseContext.validation.push({ key: 'description', validators: [Validators.required, BackendErrorValidator(this.errorModel, 'description')] }); - baseContext.validation.push({ key: 'startDate', validators: [BackendErrorValidator(this.errorModel, 'startDate')] }); - baseContext.validation.push({ key: 'endDate', validators: [BackendErrorValidator(this.errorModel, 'endDate')] }); - baseContext.validation.push({ key: 'files', validators: [BackendErrorValidator(this.errorModel, 'files')] }); + baseContext.validation.push({ key: 'description', validators: [Validators.required, BackendErrorValidator(this.validationErrorModel, 'description')] }); + baseContext.validation.push({ key: 'startDate', validators: [BackendErrorValidator(this.validationErrorModel, 'startDate')] }); + baseContext.validation.push({ key: 'endDate', validators: [BackendErrorValidator(this.validationErrorModel, 'endDate')] }); + baseContext.validation.push({ key: 'files', validators: [BackendErrorValidator(this.validationErrorModel, 'files')] }); return baseContext; } diff --git a/dmp-frontend/src/app/ui/project/listing/criteria/project-criteria.component.html b/dmp-frontend/src/app/ui/project/listing/criteria/project-criteria.component.html index 6176fad9a..08a45e06b 100644 --- a/dmp-frontend/src/app/ui/project/listing/criteria/project-criteria.component.html +++ b/dmp-frontend/src/app/ui/project/listing/criteria/project-criteria.component.html @@ -3,18 +3,15 @@ - {{baseErrorModel['criteria.like']}} - {{baseErrorModel['criteria.periodStart']}} - {{baseErrorModel['criteria.periodEnd']}} diff --git a/dmp-frontend/src/app/ui/user-profile/user-profile.component.html b/dmp-frontend/src/app/ui/user-profile/user-profile.component.html index 552851e2c..707f44855 100644 --- a/dmp-frontend/src/app/ui/user-profile/user-profile.component.html +++ b/dmp-frontend/src/app/ui/user-profile/user-profile.component.html @@ -1,30 +1,36 @@ -
- +