diff --git a/dmp-frontend/src/app/app.module.ts b/dmp-frontend/src/app/app.module.ts index d40363ad6..47ea72a8b 100644 --- a/dmp-frontend/src/app/app.module.ts +++ b/dmp-frontend/src/app/app.module.ts @@ -1,31 +1,31 @@ import { OverlayModule } from '@angular/cdk/overlay'; import { HttpClient, HttpClientModule } from '@angular/common/http'; import { LOCALE_ID, NgModule } from '@angular/core'; -import { DateAdapter, MAT_DATE_FORMATS, MAT_DATE_LOCALE } from '@angular/material/core'; +import { FormsModule, ReactiveFormsModule } from '@angular/forms'; import { MatMomentDateModule, MAT_MOMENT_DATE_FORMATS } from '@angular/material-moment-adapter'; +import { DateAdapter, MAT_DATE_FORMATS, MAT_DATE_LOCALE } from '@angular/material/core'; import { BrowserModule, Title } from '@angular/platform-browser'; import { BrowserAnimationsModule } from '@angular/platform-browser/animations'; +import { AppRoutingModule } from '@app/app-routing.module'; +import { AppComponent } from '@app/app.component'; +import { CoreServiceModule } from '@app/core/core-service.module'; +import { CultureService } from '@app/core/services/culture/culture-service'; +import { NotificationModule } from '@app/library/notification/notification.module'; +import { LoginModule } from '@app/ui/auth/login/login.module'; +import { DatasetCreateWizardModule } from '@app/ui/dataset-create-wizard/dataset-create-wizard.module'; +import { BreadcrumbModule } from '@app/ui/misc/breadcrumb/breadcrumb.module'; +import { HelpContentModule } from '@app/ui/misc/help-content/help-content.module'; +import { NavigationModule } from '@app/ui/misc/navigation/navigation.module'; +import { NavbarModule } from '@app/ui/navbar/navbar.module'; +import { SidebarModule } from '@app/ui/sidebar/sidebar.module'; +import { MomentUtcDateAdapter } from '@common/date/moment-utc-date-adapter'; +import { CommonHttpModule } from '@common/http/common-http.module'; +import { CommonUiModule } from '@common/ui/common-ui.module'; import { TranslateLoader, TranslateModule } from '@ngx-translate/core'; import { TranslateHttpLoader } from '@ngx-translate/http-loader'; -import { AppRoutingModule } from './app-routing.module'; -import { AppComponent } from './app.component'; -import { MomentUtcDateAdapter } from './common/date/moment-utc-date-adapter'; -import { CommonHttpModule } from './common/http/common-http.module'; -import { CommonUiModule } from './common/ui/common-ui.module'; -import { CoreServiceModule } from './core/core-service.module'; -import { CultureService } from './core/services/culture/culture-service'; -import { NotificationModule } from './library/notification/notification.module'; -import { BreadcrumbModule } from './ui/misc/breadcrumb/breadcrumb.module'; -import { HelpContentModule } from './ui/misc/help-content/help-content.module'; -import { NavigationModule } from './ui/misc/navigation/navigation.module'; -import { LoginModule } from './ui/auth/login/login.module'; -import { ReactiveFormsModule, FormsModule } from '@angular/forms'; -import { DatasetCreateWizardModule } from './ui/dataset-create-wizard/dataset-create-wizard.module'; -import { NavbarModule } from './ui/navbar/navbar.module'; -import { SidebarModule } from './ui/sidebar/sidebar.module'; -import { NgcCookieConsentModule, NgcCookieConsentConfig } from 'ngx-cookieconsent'; -import { CookieService } from "ngx-cookie-service"; -import { environment } from '../environments/environment'; +import { environment } from 'environments/environment'; +import { CookieService } from 'ngx-cookie-service'; +import { NgcCookieConsentConfig, NgcCookieConsentModule } from 'ngx-cookieconsent'; // AoT requires an exported function for factories export function HttpLoaderFactory(http: HttpClient) { diff --git a/dmp-frontend/src/app/common/forms/validation/custom-validator.ts b/dmp-frontend/src/app/common/forms/validation/custom-validator.ts deleted file mode 100644 index ee70c8eaf..000000000 --- a/dmp-frontend/src/app/common/forms/validation/custom-validator.ts +++ /dev/null @@ -1,32 +0,0 @@ -import { AbstractControl, FormGroup, ValidatorFn, Validators } from '@angular/forms'; -import { ValidationErrorModel } from './error-model/validation-error-model'; - -export function BackendErrorValidator(errorModel: ValidationErrorModel, propertyName: string): ValidatorFn { - return (control: AbstractControl): { [key: string]: any } => { - const error: String = errorModel.getError(propertyName); - return error ? { 'backendError': { message: error } } : null; - }; -} - -export function E164PhoneValidator(): ValidatorFn { - return Validators.pattern('^\\+?[1-9]\\d{1,14}$'); -} - -// Getter is required because the index of each element is not fixed (array does not always follow LIFO) -export function BackendArrayErrorValidator(errorModel: ValidationErrorModel, propertyNameGetter: () => string): ValidatorFn { - return (control: AbstractControl): { [key: string]: any } => { - const error: String = errorModel.getError(propertyNameGetter()); - return error ? { 'backendError': { message: error } } : null; - }; -} - -export function CustomErrorValidator(errorModel: ValidationErrorModel, propertyNames: string[]): ValidatorFn { - return (control: AbstractControl): { [key: string]: any } => { - const error: String = errorModel.getErrors(propertyNames); - return error ? { 'customError': { message: error } } : null; - }; -} - -export function PasswordMatchValidator(formGroup: FormGroup) { - return formGroup.get('password').value === formGroup.get('passwordConfirm').value ? null : { 'passwordMismatch': true }; -} diff --git a/dmp-frontend/src/app/core/model/contact/contact-email-form-model.ts b/dmp-frontend/src/app/core/model/contact/contact-email-form-model.ts index 51cd07722..9a2df910e 100644 --- a/dmp-frontend/src/app/core/model/contact/contact-email-form-model.ts +++ b/dmp-frontend/src/app/core/model/contact/contact-email-form-model.ts @@ -1,5 +1,5 @@ -import { ValidationErrorModel } from "../../../common/forms/validation/error-model/validation-error-model"; -import { FormGroup, FormBuilder, Validators } from "@angular/forms"; +import { FormBuilder, FormGroup, Validators } from "@angular/forms"; +import { ValidationErrorModel } from '@common/forms/validation/error-model/validation-error-model'; export interface ContactEmail { subject: string; @@ -19,8 +19,8 @@ export class ContactEmailFormModel { buildForm(): FormGroup { const formGroup = new FormBuilder().group({ - subject: [ this.subject, [Validators.required] ], - description: [ this.description, [Validators.required] ] + subject: [this.subject, [Validators.required]], + description: [this.description, [Validators.required]] }); return formGroup; } diff --git a/dmp-frontend/src/app/core/model/dashboard/dashboard-statistics-model.ts b/dmp-frontend/src/app/core/model/dashboard/dashboard-statistics-model.ts index 4a83f56cc..1b11ace71 100644 --- a/dmp-frontend/src/app/core/model/dashboard/dashboard-statistics-model.ts +++ b/dmp-frontend/src/app/core/model/dashboard/dashboard-statistics-model.ts @@ -1,5 +1,3 @@ -import { Serializable } from "../../../common/types/json/serializable"; - export interface DashboardStatisticsModel { totalDataManagementPlanCount: number; totalGrantCount: number; diff --git a/dmp-frontend/src/app/core/model/dmp/dmp-create-wizard/dmp-create-wizard-form.model.ts b/dmp-frontend/src/app/core/model/dmp/dmp-create-wizard/dmp-create-wizard-form.model.ts index a3303ccac..f12e350cb 100644 --- a/dmp-frontend/src/app/core/model/dmp/dmp-create-wizard/dmp-create-wizard-form.model.ts +++ b/dmp-frontend/src/app/core/model/dmp/dmp-create-wizard/dmp-create-wizard-form.model.ts @@ -1,9 +1,9 @@ import { FormBuilder, FormGroup, Validators } from "@angular/forms"; -import { BackendErrorValidator } from "../../../../common/forms/validation/custom-validator"; -import { ValidationErrorModel } from "../../../../common/forms/validation/error-model/validation-error-model"; -import { ValidationContext } from "../../../../common/forms/validation/validation-context"; -import { DatasetProfileModel } from "../../dataset/dataset-profile"; -import { DmpModel } from "../dmp"; +import { DatasetProfileModel } from '@app/core/model/dataset/dataset-profile'; +import { DmpModel } from '@app/core/model/dmp/dmp'; +import { BackendErrorValidator } from '@common/forms/validation/custom-validator'; +import { ValidationErrorModel } from '@common/forms/validation/error-model/validation-error-model'; +import { ValidationContext } from '@common/forms/validation/validation-context'; export class DmpCreateWizardFormModel { dmp: DmpModel; diff --git a/dmp-frontend/src/app/core/model/dmp/invitation/dmp-invitation-user.ts b/dmp-frontend/src/app/core/model/dmp/invitation/dmp-invitation-user.ts index 7634679cb..7c1163475 100644 --- a/dmp-frontend/src/app/core/model/dmp/invitation/dmp-invitation-user.ts +++ b/dmp-frontend/src/app/core/model/dmp/invitation/dmp-invitation-user.ts @@ -1,5 +1,5 @@ import { FormBuilder, FormGroup } from '@angular/forms'; -import { Serializable } from '../../../../common/types/json/serializable'; +import { Serializable } from '@common/types/json/serializable'; export class DmpInvitationUser implements Serializable { diff --git a/dmp-frontend/src/app/core/services/auth/auth.service.ts b/dmp-frontend/src/app/core/services/auth/auth.service.ts index 7eea789d2..bcb59345a 100644 --- a/dmp-frontend/src/app/core/services/auth/auth.service.ts +++ b/dmp-frontend/src/app/core/services/auth/auth.service.ts @@ -1,21 +1,18 @@ -import { of as observableOf, throwError as observableThrowError, Observable } from 'rxjs'; - -import { map, catchError, takeUntil } from 'rxjs/operators'; import { HttpClient, HttpHeaders } from '@angular/common/http'; import { Injectable } from '@angular/core'; import { MatSnackBar } from '@angular/material/snack-bar'; import { Router } from '@angular/router'; +import { Credential } from '@app/core/model/auth/credential'; +import { LoginInfo } from '@app/core/model/auth/login-info'; +import { Principal } from '@app/core/model/auth/Principal'; +import { ConfigurableProvider } from '@app/core/model/configurable-provider/configurableProvider'; +import { SnackBarNotificationLevel, UiNotificationService } from '@app/core/services/notification/ui-notification-service'; +import { BaseService } from '@common/base/base.service'; import { TranslateService } from '@ngx-translate/core'; -import { environment } from '../../../../environments/environment'; -import { SnackBarNotificationComponent } from '../../../library/notification/snack-bar/snack-bar-notification.component'; -import { BaseService } from '../../common/base/base.service'; -import { Credential } from '../../model/auth/credential'; -import { LoginInfo } from '../../model/auth/login-info'; -import { Principal } from '../../model/auth/Principal'; -import { UiNotificationService, SnackBarNotificationLevel } from '../notification/ui-notification-service'; -import { ConfigurableProvider } from "../../model/configurable-provider/configurableProvider"; - +import { environment } from 'environments/environment'; +import { Observable, of as observableOf, throwError as observableThrowError } from 'rxjs'; +import { catchError, map, takeUntil } from 'rxjs/operators'; @Injectable() export class AuthService extends BaseService { diff --git a/dmp-frontend/src/app/core/services/dataset-profile/dataset-profile.service.ts b/dmp-frontend/src/app/core/services/dataset-profile/dataset-profile.service.ts index 56d259e2e..2d19bdea8 100644 --- a/dmp-frontend/src/app/core/services/dataset-profile/dataset-profile.service.ts +++ b/dmp-frontend/src/app/core/services/dataset-profile/dataset-profile.service.ts @@ -1,19 +1,19 @@ import { HttpClient, HttpHeaders, HttpResponse } from '@angular/common/http'; import { Injectable } from '@angular/core'; +import { DatasetProfile } from '@app/core/model/admin/dataset-profile/dataset-profile'; +import { DataTableData } from '@app/core/model/data-table/data-table-data'; +import { DataTableRequest } from '@app/core/model/data-table/data-table-request'; +import { DatasetProfileDefinitionModel } from '@app/core/model/dataset-profile-definition/dataset-profile-definition'; +import { DatasetListingModel } from '@app/core/model/dataset/dataset-listing'; +import { DatasetProfileCriteria } from '@app/core/query/dataset-profile/dataset-profile-criteria'; +import { BaseHttpService } from '@app/core/services/http/base-http.service'; +import { DatasetProfileEditorModel } from '@app/ui/admin/dataset-profile/editor/dataset-profile-editor-model'; +import { BaseService } from '@common/base/base.service'; +import { BaseHttpParams } from '@common/http/base-http-params'; +import { InterceptorType } from '@common/http/interceptors/interceptor-type'; +import { environment } from 'environments/environment'; import { Observable } from 'rxjs'; import { takeUntil } from "rxjs/operators"; -import { environment } from '../../../../environments/environment'; -import { BaseHttpParams } from '../../../common/http/base-http-params'; -import { InterceptorType } from '../../../common/http/interceptors/interceptor-type'; -import { DatasetProfileEditorModel } from '../../../ui/admin/dataset-profile/editor/dataset-profile-editor-model'; -import { BaseService } from "../../common/base/base.service"; -import { DatasetProfile } from '../../model/admin/dataset-profile/dataset-profile'; -import { DataTableData } from '../../model/data-table/data-table-data'; -import { DataTableRequest } from '../../model/data-table/data-table-request'; -import { DatasetProfileDefinitionModel } from '../../model/dataset-profile-definition/dataset-profile-definition'; -import { DatasetListingModel } from '../../model/dataset/dataset-listing'; -import { DatasetProfileCriteria } from '../../query/dataset-profile/dataset-profile-criteria'; -import { BaseHttpService } from '../http/base-http.service'; @Injectable() export class DatasetProfileService extends BaseService { diff --git a/dmp-frontend/src/app/core/services/dataset-wizard/dataset-wizard.service.ts b/dmp-frontend/src/app/core/services/dataset-wizard/dataset-wizard.service.ts index e11802ccd..ef43731f6 100644 --- a/dmp-frontend/src/app/core/services/dataset-wizard/dataset-wizard.service.ts +++ b/dmp-frontend/src/app/core/services/dataset-wizard/dataset-wizard.service.ts @@ -2,8 +2,8 @@ import { HttpClient, HttpHeaders, HttpResponse } from '@angular/common/http'; import { Injectable } from '@angular/core'; import { Observable } from 'rxjs'; import { environment } from '../../../../environments/environment'; -import { BaseHttpParams } from '../../../common/http/base-http-params'; -import { InterceptorType } from '../../../common/http/interceptors/interceptor-type'; +import { BaseHttpParams } from '../../../../common/http/base-http-params'; +import { InterceptorType } from '../../../../common/http/interceptors/interceptor-type'; import { DatasetProfileDefinitionModel } from '../../model/dataset-profile-definition/dataset-profile-definition'; import { DatasetProfileModel } from '../../model/dataset/dataset-profile'; import { DatasetWizardModel } from '../../model/dataset/dataset-wizard'; diff --git a/dmp-frontend/src/app/core/services/dmp/dmp-profile.service.ts b/dmp-frontend/src/app/core/services/dmp/dmp-profile.service.ts index cbb28a893..a6679c832 100644 --- a/dmp-frontend/src/app/core/services/dmp/dmp-profile.service.ts +++ b/dmp-frontend/src/app/core/services/dmp/dmp-profile.service.ts @@ -10,8 +10,8 @@ import { RequestItem } from '../../query/request-item'; import { DataTableData } from '../../model/data-table/data-table-data'; import { DmpProfileCriteria } from '../../query/dmp/dmp-profile-criteria'; import { DatasetListingModel } from '../../model/dataset/dataset-listing'; -import { BaseHttpParams } from '../../../common/http/base-http-params'; -import { InterceptorType } from '../../../common/http/interceptors/interceptor-type'; +import { BaseHttpParams } from '../../../../common/http/base-http-params'; +import { InterceptorType } from '../../../../common/http/interceptors/interceptor-type'; import { DmpProfileExternalAutocompleteCriteria } from '../../query/dmp/dmp-profile-external-autocomplete-criteria'; @Injectable() diff --git a/dmp-frontend/src/app/core/services/dmp/dmp.service.ts b/dmp-frontend/src/app/core/services/dmp/dmp.service.ts index 2df142252..0edd621a9 100644 --- a/dmp-frontend/src/app/core/services/dmp/dmp.service.ts +++ b/dmp-frontend/src/app/core/services/dmp/dmp.service.ts @@ -2,8 +2,8 @@ import { HttpClient, HttpHeaders, HttpResponse } from '@angular/common/http'; import { Injectable } from '@angular/core'; import { Observable } from 'rxjs'; import { environment } from '../../../../environments/environment'; -import { BaseHttpParams } from '../../../common/http/base-http-params'; -import { InterceptorType } from '../../../common/http/interceptors/interceptor-type'; +import { BaseHttpParams } from '../../../../common/http/base-http-params'; +import { InterceptorType } from '../../../../common/http/interceptors/interceptor-type'; import { DynamicFieldGrantCriteria } from '../../../models/dynamic-field-grant/DynamicFieldGrantCriteria'; import { DataTableData } from '../../model/data-table/data-table-data'; import { DataTableRequest } from '../../model/data-table/data-table-request'; diff --git a/dmp-frontend/src/app/core/services/grant/grant-file-upload.service.ts b/dmp-frontend/src/app/core/services/grant/grant-file-upload.service.ts index 094f4bdef..a4cd0a646 100644 --- a/dmp-frontend/src/app/core/services/grant/grant-file-upload.service.ts +++ b/dmp-frontend/src/app/core/services/grant/grant-file-upload.service.ts @@ -4,8 +4,8 @@ import { Observable } from 'rxjs'; import { environment } from '../../../../environments/environment'; import { ContentFile } from '../../model/grant/grant-listing'; import { BaseHttpService } from '../http/base-http.service'; -import { BaseHttpParams } from '../../../common/http/base-http-params'; -import { InterceptorType } from '../../../common/http/interceptors/interceptor-type'; +import { BaseHttpParams } from '../../../../common/http/base-http-params'; +import { InterceptorType } from '../../../../common/http/interceptors/interceptor-type'; @Injectable() export class GrantFileUploadService { diff --git a/dmp-frontend/src/app/library/auto-complete/auto-complete.module.ts b/dmp-frontend/src/app/library/auto-complete/auto-complete.module.ts index b7cf221e6..cbb060569 100644 --- a/dmp-frontend/src/app/library/auto-complete/auto-complete.module.ts +++ b/dmp-frontend/src/app/library/auto-complete/auto-complete.module.ts @@ -1,9 +1,9 @@ import { NgModule } from '@angular/core'; -import { CommonFormsModule } from '../../common/forms/common-forms.module'; -import { CommonUiModule } from '../../common/ui/common-ui.module'; -import { MultipleAutoCompleteComponent } from './multiple/multiple-auto-complete.component'; -import { SingleAutoCompleteComponent } from './single/single-auto-complete.component'; -import { FormattingModule } from '../../core/formatting.module'; +import { FormattingModule } from '@app/core/formatting.module'; +import { MultipleAutoCompleteComponent } from '@app/library/auto-complete/multiple/multiple-auto-complete.component'; +import { SingleAutoCompleteComponent } from '@app/library/auto-complete/single/single-auto-complete.component'; +import { CommonFormsModule } from '@common/forms/common-forms.module'; +import { CommonUiModule } from '@common/ui/common-ui.module'; @NgModule({ diff --git a/dmp-frontend/src/app/library/auto-complete/multiple/multiple-auto-complete-configuration.ts b/dmp-frontend/src/app/library/auto-complete/multiple/multiple-auto-complete-configuration.ts index 98c86ee8d..ebb0be39f 100644 --- a/dmp-frontend/src/app/library/auto-complete/multiple/multiple-auto-complete-configuration.ts +++ b/dmp-frontend/src/app/library/auto-complete/multiple/multiple-auto-complete-configuration.ts @@ -1,17 +1,20 @@ +import { TemplateRef } from '@angular/core'; import { Observable } from 'rxjs'; import { AutoCompleteGroup } from '../auto-complete-group'; export interface MultipleAutoCompleteConfiguration { // Delay for performing the request. Default: 200ms. requestDelay?: number; - // Min characters for the filtering to be applied. Default: 1. + // Min characters for the filtering to be applied. Default: 3. minFilteringChars?: number; // Load and present items from start, without user query. Default: true. loadDataOnStart?: boolean; // Static or initial items. - initialItems?: (excludedItems: any[]) => Observable; + initialItems?: (excludedItems: any[], data?: any) => Observable; // Data retrieval function filterFn?: (searchQuery: string, excludedItems: any[]) => Observable; + // Get selected items. Used when valueAssign is used so the full object can be retrieved for presentation. + getSelectedItems?: (selectedItems: any[]) => Observable; // Property formating for input displayFn?: (item: any) => string; // Function to group results in the drop down @@ -20,6 +23,15 @@ export interface MultipleAutoCompleteConfiguration { titleFn?: (item: any) => string; // Display function for the drop down subtitle subtitleFn?: (item: any) => string; + //Extra data passed to query function + extraData?: any; // Callback to intercept value assignment based on item selection valueAssign?: (selectedItem: any) => any; + // Property formating template + optionTemplate?: TemplateRef; + // Selected value formating template + selectedValueTemplate?: TemplateRef; + + + autoSelectFirstOptionOnBlur?: boolean; } diff --git a/dmp-frontend/src/app/library/auto-complete/multiple/multiple-auto-complete.component.html b/dmp-frontend/src/app/library/auto-complete/multiple/multiple-auto-complete.component.html index adc236268..add09a812 100644 --- a/dmp-frontend/src/app/library/auto-complete/multiple/multiple-auto-complete.component.html +++ b/dmp-frontend/src/app/library/auto-complete/multiple/multiple-auto-complete.component.html @@ -1,28 +1,57 @@ -
- - - {{this._displayFn(selectedItem)}} - cancel - - +
+ + + + + +
{{_displayFn(selectedItem)}}
+ cancel +
+
+
- - + + keyboard_arrow_down + - - {{_titleFn(item)}} -
- {{_subtitleFn(item)}} + + + +
+ {{_titleFn(item)}} +
+ {{_subtitleFn(item)}} +
- - {{_titleFn(item)}} -
- {{_subtitleFn(item)}} -
+
+ + + + +
+ {{_titleFn(item)}} +
+ {{_subtitleFn(item)}} +
+
+
+ + No results found! + +
+ + loading... +
-
+
\ No newline at end of file diff --git a/dmp-frontend/src/app/library/auto-complete/multiple/multiple-auto-complete.component.scss b/dmp-frontend/src/app/library/auto-complete/multiple/multiple-auto-complete.component.scss index 07c37ced4..cdaa669c8 100644 --- a/dmp-frontend/src/app/library/auto-complete/multiple/multiple-auto-complete.component.scss +++ b/dmp-frontend/src/app/library/auto-complete/multiple/multiple-auto-complete.component.scss @@ -1,32 +1,21 @@ .multiple-auto-complete { - margin-left: inherit; - margin-right: inherit; + margin-left: inherit; + margin-right: inherit; - .multi-chip-list { - padding-left: 0; + .not-loading { + display: none; + } - .chip { - border-radius: 2em !important; - height: auto !important; - min-width: fit-content !important; - } - } + + .align-arrow-right { + position: absolute; + right: 0; + vertical-align: middle; + } - .multi-loading-bar { - padding-right: 0; - padding-left: 0; - } - - .not-loading { - display: none; - } } .two-line-mat-option { - // height: 3.5em; - line-height: 1.2em; -} - -::ng-deep .mat-autocomplete-panel.panel-width { - max-width: 78vw !important; + height: 3.5em; + line-height: 1.2em; } diff --git a/dmp-frontend/src/app/library/auto-complete/multiple/multiple-auto-complete.component.ts b/dmp-frontend/src/app/library/auto-complete/multiple/multiple-auto-complete.component.ts index a19d1c55d..a81bf3b2f 100644 --- a/dmp-frontend/src/app/library/auto-complete/multiple/multiple-auto-complete.component.ts +++ b/dmp-frontend/src/app/library/auto-complete/multiple/multiple-auto-complete.component.ts @@ -1,15 +1,25 @@ import { FocusMonitor } from '@angular/cdk/a11y'; import { COMMA, ENTER } from '@angular/cdk/keycodes'; -import { Component, ElementRef, EventEmitter, Input, OnDestroy, OnInit, Optional, Output, Self, ViewChild } from '@angular/core'; -import { ControlValueAccessor, NgControl } from '@angular/forms'; -import { MatAutocompleteSelectedEvent, MatAutocompleteTrigger } from '@angular/material/autocomplete'; -import { MatChipInputEvent } from '@angular/material/chips'; +import { Component, DoCheck, ElementRef, EventEmitter, Input, OnChanges, OnDestroy, OnInit, Optional, Output, Self, SimpleChanges, TemplateRef, ViewChild } from '@angular/core'; +import { ControlValueAccessor, FormGroupDirective, NgControl, NgForm } from '@angular/forms'; +import { ErrorStateMatcher, MatChipInputEvent, mixinErrorState } from '@angular/material'; +import { MatAutocomplete, MatAutocompleteSelectedEvent, MatAutocompleteTrigger } from '@angular/material/autocomplete'; import { MatFormFieldControl } from '@angular/material/form-field'; +import { AutoCompleteGroup } from '@app/library/auto-complete/auto-complete-group'; +import { MultipleAutoCompleteConfiguration } from '@app/library/auto-complete/multiple/multiple-auto-complete-configuration'; +import { BaseComponent } from '@common/base/base.component'; import { Observable, of as observableOf, Subject } from 'rxjs'; -import { debounceTime, distinctUntilChanged, map, mergeMap, startWith, tap } from 'rxjs/operators'; -import { AutoCompleteGroup } from '../auto-complete-group'; -import { MultipleAutoCompleteConfiguration } from './multiple-auto-complete-configuration'; -import { switchMap } from 'rxjs/internal/operators/switchMap'; +import { debounceTime, distinctUntilChanged, map, mergeMap, startWith, takeUntil } from 'rxjs/operators'; + +export class CustomComponentBase extends BaseComponent { + constructor( + public _defaultErrorStateMatcher: ErrorStateMatcher, + public _parentForm: NgForm, + public _parentFormGroup: FormGroupDirective, + public ngControl: NgControl + ) { super(); } +} +export const _CustomComponentMixinBase = mixinErrorState(CustomComponentBase); @Component({ selector: 'app-multiple-auto-complete', @@ -17,40 +27,39 @@ import { switchMap } from 'rxjs/internal/operators/switchMap'; styleUrls: ['./multiple-auto-complete.component.scss'], providers: [{ provide: MatFormFieldControl, useExisting: MultipleAutoCompleteComponent }] }) -export class MultipleAutoCompleteComponent implements OnInit, MatFormFieldControl, ControlValueAccessor, OnDestroy { +export class MultipleAutoCompleteComponent extends _CustomComponentMixinBase implements OnInit, MatFormFieldControl, ControlValueAccessor, OnDestroy, DoCheck, OnChanges { static nextId = 0; + @ViewChild('autocomplete', { static: true }) autocomplete: MatAutocomplete; + @ViewChild('autocompleteTrigger', { static: true }) autocompleteTrigger: MatAutocompleteTrigger; + @ViewChild('autocompleteInput', { static: true }) autocompleteInput: ElementRef; - separatorKeysCodes = [ENTER, COMMA]; + @Input() + get configuration(): MultipleAutoCompleteConfiguration { return this._configuration; } + set configuration(configuration: MultipleAutoCompleteConfiguration) { + this._configuration = configuration; + } + private _configuration: MultipleAutoCompleteConfiguration; - @Input() configuration: MultipleAutoCompleteConfiguration; // Selected Option Event @Output() optionSelected: EventEmitter = new EventEmitter(); - // Removed Option Event @Output() optionRemoved: EventEmitter = new EventEmitter(); id = `multiple-autocomplete-${MultipleAutoCompleteComponent.nextId++}`; stateChanges = new Subject(); focused = false; - errorState = false; controlType = 'multiple-autocomplete'; describedBy = ''; - _inputValue: string; + inputValue = ''; _inputSubject = new Subject(); - loading = false; _items: Observable; + _selectedItems: Map = new Map(); _groupedItems: Observable; - private requestDelay = 200; //ms - private minFilteringChars = 1; - private loadDataOnStart = true; - visible = true; - selectable = true; + selectable = false; removable = true; - addOnBlur = false; + separatorKeysCodes = [ENTER, COMMA]; - get empty() { - return !this._inputValue || this._inputValue.length === 0; - } + get empty() { return (!this.value || this.value.length === 0) && (!this.inputValue || this.inputValue.length === 0); } get shouldLabelFloat() { return this.focused || !this.empty; } @@ -83,21 +92,22 @@ export class MultipleAutoCompleteComponent implements OnInit, MatFormFieldContro return this._selectedValue; } set value(value: any | null) { - this._selectedValue = value; - this._inputValue = value; + this._selectedValue = (value != null && value.length === 0) ? null : value; this.stateChanges.next(); } private _selectedValue; - @ViewChild('textInput', { static: true }) textInput: ElementRef; - @ViewChild(MatAutocompleteTrigger, { static: true }) autocomplete: MatAutocompleteTrigger; - constructor( private fm: FocusMonitor, private elRef: ElementRef, - @Optional() @Self() public ngControl: NgControl) { + @Optional() @Self() public ngControl: NgControl, + @Optional() _parentForm: NgForm, + @Optional() _parentFormGroup: FormGroupDirective, + _defaultErrorStateMatcher: ErrorStateMatcher + ) { + super(_defaultErrorStateMatcher, _parentForm, _parentFormGroup, ngControl); - fm.monitor(elRef.nativeElement, true).subscribe((origin) => { + fm.monitor(elRef.nativeElement, true).pipe(takeUntil(this._destroyed)).subscribe((origin) => { this.focused = !!origin; this.stateChanges.next(); }); @@ -109,83 +119,84 @@ export class MultipleAutoCompleteComponent implements OnInit, MatFormFieldContro } } - ngOnInit() { + ngOnInit() { } + + ngDoCheck(): void { + if (this.ngControl) { + this.updateErrorState(); + } + } + + ngOnChanges(changes: SimpleChanges) { + if (changes['configuration'] && changes['configuration'].isFirstChange) { + this.getSelectedItems(this.value); + } + } + + getSelectedItems(value: any) { + if (value != null && Array.isArray(value) && this.configuration) { + const newSelections = value.filter(x => !this._selectedItems.has(JSON.stringify(x))); + if (newSelections.length > 0 && this.configuration.getSelectedItems != null) { + this.configuration.getSelectedItems(newSelections).pipe(takeUntil(this._destroyed)).subscribe(x => { + x.forEach(element => { + this._selectedItems.set(JSON.stringify(this.configuration.valueAssign != null ? this.configuration.valueAssign(element) : element), element); + }); + }); + } else { + newSelections.forEach(element => { + this._selectedItems.set(JSON.stringify(this.configuration.valueAssign != null ? this.configuration.valueAssign(element) : element), element); + }); + } + } } filter(query: string): Observable { // If loadDataOnStart is enabled and query is empty we return the initial items. if (this.isNullOrEmpty(query) && this.loadDataOnStart) { - return this.configuration.initialItems(this.value || []) || observableOf([]); + return this.configuration.initialItems(this.configuration.extraData) || observableOf([]); } else if (query && query.length >= this.minFilteringChars) { if (this.configuration.filterFn) { - return this.configuration.filterFn(query, this.value || []); + return this.configuration.filterFn(query, this.configuration.extraData); } else { - return this.configuration.initialItems(this.value || []) || observableOf([]); + return this.configuration.initialItems(this.configuration.extraData) || observableOf([]); } } else { return observableOf([]); } } + stringify(value: any): string { + return JSON.stringify(value); + } + isNullOrEmpty(query: string): boolean { return typeof query !== 'string' || query === null || query.length === 0; } - _displayFn(item: any): string { - if (this.configuration.displayFn && item) { return this.configuration.displayFn(item); } - return item; - } - - _titleFn(item: any): string { - if (this.configuration.titleFn && item) { return this.configuration.titleFn(item); } - return item; - } - - _subtitleFn(item: any): string { - if (this.configuration.subtitleFn && item) { return this.configuration.subtitleFn(item); } - return null; - } - - _requestDelay(): number { - return this.configuration.requestDelay || this.requestDelay; - } - - _minFilteringChars(): number { - return this.configuration.minFilteringChars || this.minFilteringChars; - } - - _loadDataOnStart(): boolean { - return this.configuration.loadDataOnStart || this.loadDataOnStart; - } - - _chipItems(): any[] { - return this.value || []; - } - - _arraysEqual(arr1, arr2) { - if (arr1.length !== arr2.length) - return false; - for (var i = arr1.length; i--;) { - if (arr1[i].id !== arr2[i].id) - return false; - } - - return true; - } - _optionSelected(event: MatAutocompleteSelectedEvent) { - if (this.configuration.valueAssign) { - const newValue = this.configuration.valueAssign(this.value) || []; - newValue.push(event.option.value); - this._setValue(this.configuration.valueAssign(newValue)); - } - else { - const newValue = this.value || []; - newValue.push(event.option.value); - this._setValue(newValue); - this.stateChanges.next(); - this.optionSelected.emit(newValue); - this.textInput.nativeElement.value = ''; + this.optionSelectedInternal(event.option.value); + this.autocompleteInput.nativeElement.value = ''; + } + + private optionSelectedInternal(item: any) { + const newValue = this._valueToAssign(item); + + //Update selected items + this._selectedItems.set(JSON.stringify(newValue), item); + + const newValueArray = (Array.isArray(this.value) ? this.value : []); + newValueArray.push(newValue); + this._setValue(newValueArray); + + this.stateChanges.next(); + this.optionSelected.emit(item); + } + + public onKeyUp(event) { + this.inputValue = event.target.value; + // prevent filtering results if arrow were pressed + if (event.keyCode !== ENTER && (event.keyCode < 37 || event.keyCode > 40)) { + this._inputSubject.next(this.inputValue); } } @@ -201,88 +212,39 @@ export class MultipleAutoCompleteComponent implements OnInit, MatFormFieldContro startWith(null), debounceTime(this.requestDelay), distinctUntilChanged(), - tap(() => { this.loading = true; }), - switchMap(query => { - // If its a valid object, a selection just made and the object is set as the value of the form control. That means we should fire an extra request to the server. - if (this._isValidObject(query)) { return observableOf([]); } - - // Since the object is changed we need to clear any existing selections, except for the first time. - // if (query !== null) { this.pushChanges(null); } - return this.filter(query); - }), - tap(() => { this.loading = false; })); + distinctUntilChanged(), + mergeMap(query => this.filter(query))); if (this.configuration.groupingFn) { this._groupedItems = this._items.pipe(map(items => this.configuration.groupingFn(items))); } } } - _inputValueChange(value: string) { - this._inputValue = value; - this._inputSubject.next(value); - this.stateChanges.next(); - } - - _isValidObject(value: any): boolean { - try { - if (!value) { return false; } - if (typeof value !== 'object') { JSON.parse(value); } - } catch (e) { - return false; - } - return true; - } - - _removeSelectedItem(item: any): void { - if (this.configuration.valueAssign) { - this.optionRemoved.emit(item); - this.textInput.nativeElement.focus(); - } - else { - const index = this.value.indexOf(item); - if (index >= 0) { - this.value.splice(index, 1); - this.optionRemoved.emit(item); - } - this.textInput.nativeElement.focus(); - this.pushChanges(this.value); + public onBlur($event: MouseEvent) { + if (this.inputValue && this.inputValue.length > 1 && this.autocomplete.options && this.autocomplete.options.length > 0 && this.autoSelectFirstOptionOnBlur) { + this.optionSelectedInternal(this.autocomplete.options.first.value); } } - _onInputClick(item: any) { - if (!this.autocomplete.panelOpen) { - this.autocomplete.openPanel(); - } - } - - _addItem(event: MatChipInputEvent): void { - // const input = event.input; - // const value = event.value; - // // Add our fruit - // if ((value || '').trim()) { - // this.selectedItems.push(value.trim()); - // } - // // Reset the input value - // if (input) { - // input.value = ''; - // } - // this.inputFormControl.setValue(null); - } onChange = (_: any) => { }; - onTouched = () => { }; - writeValue(value: any): void { this.value = value || ''; } + private _onTouched = () => { }; + writeValue(value: any): void { + this.value = Array.isArray(value) ? value : null; + // Update chips observable + this.getSelectedItems(value); + } pushChanges(value: any) { this.onChange(value); } registerOnChange(fn: (_: any) => {}): void { this.onChange = fn; } - registerOnTouched(fn: () => {}): void { this.onTouched = fn; } + registerOnTouched(fn: () => {}): void { this._onTouched = fn; } setDisabledState(isDisabled: boolean): void { this.disabled = isDisabled; } - - setDescribedByIds(ids: string[]) { - this.describedBy = ids.join(' '); - } + setDescribedByIds(ids: string[]) { this.describedBy = ids.join(' '); } onContainerClick(event: MouseEvent) { - if ((event.target as Element).tagName.toLowerCase() !== 'input') { - this.elRef.nativeElement.querySelector('input').focus(); + event.stopPropagation(); + this._onInputFocus(); + if (this.disabled) { return; } + if (!this.autocomplete.isOpen) { + this.autocompleteTrigger.openPanel(); } } @@ -290,4 +252,80 @@ export class MultipleAutoCompleteComponent implements OnInit, MatFormFieldContro this.stateChanges.complete(); this.fm.stopMonitoring(this.elRef.nativeElement); } -} + + //Configuration getters + _displayFn(item: any): string { + // console.log('_displayFn' + item); + if (this.configuration.displayFn && item) { return this.configuration.displayFn(item); } + return item; + } + + _titleFn(item: any): string { + if (this.configuration.titleFn && item) { return this.configuration.titleFn(item); } + return item; + } + + _optionTemplate(item: any): TemplateRef { + if (this.configuration.optionTemplate && item) { return this.configuration.optionTemplate; } + return null; + } + + _selectedValueTemplate(item: any): TemplateRef { + if (this.configuration.selectedValueTemplate && item) { return this.configuration.selectedValueTemplate; } + return null; + } + + _subtitleFn(item: any): string { + if (this.configuration.subtitleFn && item) { return this.configuration.subtitleFn(item); } + return null; + } + + _valueToAssign(item: any): any { + if (this.configuration.valueAssign && item) { return this.configuration.valueAssign(item); } + return item; + } + + get requestDelay(): number { + return this.configuration.requestDelay != null ? this.configuration.requestDelay : 200; + } + + get minFilteringChars(): number { + return this.configuration.minFilteringChars != null ? this.configuration.minFilteringChars : 1; + } + + get loadDataOnStart(): boolean { + return this.configuration.loadDataOnStart != null ? this.configuration.loadDataOnStart : true; + } + + get autoSelectFirstOptionOnBlur(): boolean { + return this.configuration.autoSelectFirstOptionOnBlur != null ? this.configuration.autoSelectFirstOptionOnBlur : false; + } + + //Chip Functions + _addItem(event: MatChipInputEvent): void { + const input = event.input; + const value = event.value; + // Add our fruit + // if ((value || '').trim()) { + // this.selectedItems.push(value.trim()); + // } + // Reset the input value + if (input) { + this.inputValue = ''; + } + //this.inputFormControl.setValue(null); + } + + _removeSelectedItem(item: any, event: MouseEvent): void { + if (event != null) { event.stopPropagation(); } + const valueToDelete = this._valueToAssign(item); + this.value = this.value.filter(x => JSON.stringify(x) !== JSON.stringify(valueToDelete)); //TODO, maybe we need to implement equality here differently. + this.optionRemoved.emit(item); + + //Update chips + this._selectedItems.delete(JSON.stringify(valueToDelete)); + + this.autocompleteInput.nativeElement.focus(); + this.pushChanges(this.value); + } +} \ No newline at end of file diff --git a/dmp-frontend/src/app/library/auto-complete/single/single-auto-complete-configuration.ts b/dmp-frontend/src/app/library/auto-complete/single/single-auto-complete-configuration.ts index 97aedab67..dad7fcf59 100644 --- a/dmp-frontend/src/app/library/auto-complete/single/single-auto-complete-configuration.ts +++ b/dmp-frontend/src/app/library/auto-complete/single/single-auto-complete-configuration.ts @@ -1,3 +1,4 @@ +import { TemplateRef } from '@angular/core'; import { Observable } from 'rxjs'; import { AutoCompleteGroup } from '../auto-complete-group'; @@ -8,28 +9,29 @@ export interface SingleAutoCompleteConfiguration { minFilteringChars?: number; // Load and present items from start, without user query. Default: true. loadDataOnStart?: boolean; - // Remove item after selection. - removeAfterSelection?: boolean; // Static or initial items. initialItems?: (data?: any) => Observable; // Data retrieval function filterFn?: (searchQuery: string, data?: any) => Observable; + // Get selected items. Used when valueAssign is used so the full object can be retrieved for presentation. + getSelectedItem?: (selectedItem: any) => Observable; // Property formating for input displayFn?: (item: any) => string; - // Property formating for dropdown + // Function to group results in the drop down groupingFn?: (items: any[]) => AutoCompleteGroup[]; - // Property formating for dropdown + // Display function for the drop down title titleFn?: (item: any) => string; - // Property formating for dropdown + // Display function for the drop down subtitle subtitleFn?: (item: any) => string; - // Property formating for icon on chip - iconFn?: (item: any) => string; - // Property for link on chip - linkFn?: (item: any) => string; - // Disable option. - disableOption?: (item: any) => boolean; //Extra data passed to query function extraData?: any; // Callback to intercept value assignment based on item selection valueAssign?: (selectedItem: any) => any; + // Property formating template + optionTemplate?: TemplateRef; + // Selected value formating template + selectedValueTemplate?: TemplateRef; + + + autoSelectFirstOptionOnBlur?: boolean; } diff --git a/dmp-frontend/src/app/library/auto-complete/single/single-auto-complete.component.html b/dmp-frontend/src/app/library/auto-complete/single/single-auto-complete.component.html index abe733c08..2fd06b044 100644 --- a/dmp-frontend/src/app/library/auto-complete/single/single-auto-complete.component.html +++ b/dmp-frontend/src/app/library/auto-complete/single/single-auto-complete.component.html @@ -1,32 +1,44 @@
- - - {{_iconFn(value)}} - {{_displayFn(value)}} - cancel - - - - - - + + keyboard_arrow_down + - + - {{_titleFn(item)}} -
- {{_subtitleFn(item)}} + +
+ {{_titleFn(item)}} +
+ {{_subtitleFn(item)}} +
- - - {{_titleFn(item)}} -
- {{_subtitleFn(item)}} -
+
+ + + + +
+ {{_titleFn(item)}} +
+ {{_subtitleFn(item)}} +
+
+
+ + No results found! + +
+ + loading... +
diff --git a/dmp-frontend/src/app/library/auto-complete/single/single-auto-complete.component.scss b/dmp-frontend/src/app/library/auto-complete/single/single-auto-complete.component.scss index 4a8d65c72..401a5e99e 100644 --- a/dmp-frontend/src/app/library/auto-complete/single/single-auto-complete.component.scss +++ b/dmp-frontend/src/app/library/auto-complete/single/single-auto-complete.component.scss @@ -1,35 +1,60 @@ .auto-complete { - margin-left: inherit; - margin-right: inherit; + margin-left: inherit; + margin-right: inherit; - .not-loading { - display: none; - } + .not-loading { + display: none; + } - .chip-list { - width: 100%; - } + .chip-item { + transition: none; + background-color: transparent; + padding: 0; + box-shadow: none !important; + border-radius: unset; + min-height: auto; + height: auto; + } - .progress-loader { - position: absolute; - right: 0; - } + .chip-list { + width: 100%; + } + + .progress-loader { + position: absolute; + right: 0; + } + + .align-arrow-right { + position: absolute; + right: 0; + vertical-align: middle; + } +} + +.chip-list { + width: auto; } .two-line-mat-option { - // height: 3.5em; - line-height: 1.2em; + height: 3.5em; + line-height: 1.2em; } -.chip { - cursor: pointer; - opacity: 1 !important; +// .two-line-mat-option { +// height: 3.5em; +// line-height: 1.2em; +// } + +.mat-standard-chip:hover::after { + opacity: 0; } -.chip:hover { - background-color: #c5c5c5; +.mat-standard-chip:focus::after { + opacity: 0; } -::ng-deep .mat-autocomplete-panel.panel-width { - max-width: 78vw !important; -} + +// .mat-form-field-type-single-autocomplete:not(.mat-form-field-disabled) .mat-form-field-flex { +// cursor: pointer; +// } diff --git a/dmp-frontend/src/app/library/auto-complete/single/single-auto-complete.component.ts b/dmp-frontend/src/app/library/auto-complete/single/single-auto-complete.component.ts index 2079b101a..3d0f8788d 100644 --- a/dmp-frontend/src/app/library/auto-complete/single/single-auto-complete.component.ts +++ b/dmp-frontend/src/app/library/auto-complete/single/single-auto-complete.component.ts @@ -1,52 +1,69 @@ import { FocusMonitor } from '@angular/cdk/a11y'; -import { COMMA, ENTER } from '@angular/cdk/keycodes'; -import { Component, ElementRef, EventEmitter, Input, OnDestroy, OnInit, Optional, Output, Self } from '@angular/core'; -import { ControlValueAccessor, NgControl } from '@angular/forms'; -import { MatAutocompleteSelectedEvent } from '@angular/material/autocomplete'; +import { ENTER } from '@angular/cdk/keycodes'; +import { Component, DoCheck, ElementRef, EventEmitter, Input, OnChanges, OnDestroy, OnInit, Optional, Output, Self, SimpleChanges, TemplateRef, ViewChild } from '@angular/core'; +import { ControlValueAccessor, FormGroupDirective, NgControl, NgForm } from '@angular/forms'; +import { MatAutocomplete, MatAutocompleteSelectedEvent, MatAutocompleteTrigger } from '@angular/material/autocomplete'; +import { ErrorStateMatcher, mixinErrorState } from '@angular/material/core'; import { MatFormFieldControl } from '@angular/material/form-field'; +import { AutoCompleteGroup } from '@app/library/auto-complete/auto-complete-group'; +import { SingleAutoCompleteConfiguration } from '@app/library/auto-complete/single/single-auto-complete-configuration'; +import { BaseComponent } from '@common/base/base.component'; import { Observable, of as observableOf, Subject } from 'rxjs'; -import { debounceTime, distinctUntilChanged, map, mergeMap, startWith, tap } from 'rxjs/operators'; -import { AutoCompleteGroup } from '../auto-complete-group'; -import { SingleAutoCompleteConfiguration } from './single-auto-complete-configuration'; -import { switchMap } from 'rxjs/internal/operators/switchMap'; -import { Router } from '@angular/router'; +import { debounceTime, distinctUntilChanged, map, mergeMap, startWith, takeUntil } from 'rxjs/operators'; +export class CustomComponentBase extends BaseComponent { + constructor( + public _defaultErrorStateMatcher: ErrorStateMatcher, + public _parentForm: NgForm, + public _parentFormGroup: FormGroupDirective, + public ngControl: NgControl + ) { super(); } +} +export const _CustomComponentMixinBase = mixinErrorState(CustomComponentBase); + @Component({ selector: 'app-single-auto-complete', templateUrl: './single-auto-complete.component.html', styleUrls: ['./single-auto-complete.component.scss'], providers: [{ provide: MatFormFieldControl, useExisting: SingleAutoCompleteComponent }], }) -export class SingleAutoCompleteComponent implements OnInit, MatFormFieldControl, ControlValueAccessor, OnDestroy { +export class SingleAutoCompleteComponent extends _CustomComponentMixinBase implements OnInit, MatFormFieldControl, ControlValueAccessor, OnDestroy, DoCheck, OnChanges { static nextId = 0; + @ViewChild('autocomplete', { static: true }) autocomplete: MatAutocomplete; + @ViewChild('autocompleteTrigger', { static: true }) autocompleteTrigger: MatAutocompleteTrigger; + @ViewChild('autocompleteInput', { static: true }) autocompleteInput: ElementRef; + + @Input() initialSelectedData: any; + @Input() + get configuration(): SingleAutoCompleteConfiguration { return this._configuration; } + set configuration(configuration: SingleAutoCompleteConfiguration) { + this._configuration = configuration; + //On startup, fill the input with the existing value + if (this.autocompleteInput && this.value) { + this.inputValue = this._displayFn(this.value); + } + } + private _configuration: SingleAutoCompleteConfiguration; - @Input() configuration: SingleAutoCompleteConfiguration; // Selected Option Event @Output() optionSelected: EventEmitter = new EventEmitter(); - // Removed Option Event - @Output() optionRemoved: EventEmitter = new EventEmitter(); id = `single-autocomplete-${SingleAutoCompleteComponent.nextId++}`; stateChanges = new Subject(); focused = false; - errorState = false; controlType = 'single-autocomplete'; describedBy = ''; - _inputValue: string; + inputValue = ''; _inputSubject = new Subject(); loading = false; _items: Observable; _groupedItems: Observable; - private requestDelay = 200; //ms - private minFilteringChars = 1; - private loadDataOnStart = true; - separatorKeysCodes: number[] = [ENTER, COMMA]; + _selectedItems: Map = new Map(); - get empty() { - return !this._inputValue || this._inputValue.length === 0; - } + + get empty() { return (this.value == null) && (!this.inputValue || this.inputValue.length === 0); } get shouldLabelFloat() { return this.focused || !this.empty; } @@ -80,7 +97,6 @@ export class SingleAutoCompleteComponent implements OnInit, MatFormFieldControl< } set value(value: any | null) { this._selectedValue = value; - this._inputValue = (value && value != "") ? " " : null; this.stateChanges.next(); } private _selectedValue; @@ -88,10 +104,14 @@ export class SingleAutoCompleteComponent implements OnInit, MatFormFieldControl< constructor( private fm: FocusMonitor, private elRef: ElementRef, - private router: Router, - @Optional() @Self() public ngControl: NgControl) { + @Optional() @Self() public ngControl: NgControl, + @Optional() _parentForm: NgForm, + @Optional() _parentFormGroup: FormGroupDirective, + _defaultErrorStateMatcher: ErrorStateMatcher + ) { + super(_defaultErrorStateMatcher, _parentForm, _parentFormGroup, ngControl); - fm.monitor(elRef.nativeElement, true).subscribe((origin) => { + fm.monitor(elRef.nativeElement, true).pipe(takeUntil(this._destroyed)).subscribe((origin) => { this.focused = !!origin; this.stateChanges.next(); }); @@ -103,8 +123,43 @@ export class SingleAutoCompleteComponent implements OnInit, MatFormFieldControl< } } - ngOnInit() { + ngOnInit() { } + ngDoCheck(): void { + if (this.ngControl) { + this.updateErrorState(); + } + } + + ngOnChanges(changes: SimpleChanges) { + if (changes['initialSelectedData'] && changes['initialSelectedData'].currentValue && changes['initialSelectedData'].isFirstChange && this.configuration != null) { + this._selectedItems.set(JSON.stringify(this.configuration.valueAssign != null ? this.configuration.valueAssign(this.initialSelectedData) : this.initialSelectedData), this.initialSelectedData); + this.inputValue = this._displayFn(this.initialSelectedData); + } + + if (changes['configuration'] && changes['configuration'].isFirstChange) { + if (changes['initialSelectedData'] != null && this.value != null) { + if (this._valueToAssign(this.initialSelectedData) != this.value) { this.getSelectedItems(this.value); } + } else { + this.getSelectedItems(this.value); + } + } + } + + getSelectedItems(value: any) { + if (value != null && !this._selectedItems.has(JSON.stringify(value)) && this.configuration) { + if (this.configuration.getSelectedItem != null) { + this.configuration.getSelectedItem(value).pipe(takeUntil(this._destroyed)).subscribe(x => { + if (x != null) { + this._selectedItems.set(JSON.stringify(this.configuration.valueAssign != null ? this.configuration.valueAssign(x) : x), x); + this.inputValue = this._displayFn(x); + } + }); + } else { + this._selectedItems.set(JSON.stringify(this.configuration.valueAssign != null ? this.configuration.valueAssign(value) : value), value); + this.inputValue = this._displayFn(value); + } + } } filter(query: string): Observable { @@ -122,64 +177,40 @@ export class SingleAutoCompleteComponent implements OnInit, MatFormFieldControl< } } + stringify(value: any): string { + return JSON.stringify(value); + } + isNullOrEmpty(query: string): boolean { return typeof query !== 'string' || query === null || query.length === 0; } - _displayFn(item: any): string { - if (this.configuration.displayFn && item) { return this.configuration.displayFn(item); } - return item; - } - - _titleFn(item: any): string { - if (this.configuration.titleFn && item) { return this.configuration.titleFn(item); } - return item; - } - - _subtitleFn(item: any): string { - if (this.configuration.subtitleFn && item) { return this.configuration.subtitleFn(item); } - return null; - } - - _iconFn(item: any): string { - if (this.configuration.iconFn && item) { return this.configuration.iconFn(item); } - return null; - } - - _linkFn(item: any): string { - if (this.configuration.linkFn && item) { return this.configuration.linkFn(item); } - return null; - } - - _disableOption(item: any): boolean { - if (this.configuration.disableOption && item) { return this.configuration.disableOption(item); } - return null; - } - - _requestDelay(): number { - return this.configuration.requestDelay || this.requestDelay; - } - - _minFilteringChars(): number { - return this.configuration.minFilteringChars || this.minFilteringChars; - } - - _loadDataOnStart(): boolean { - return this.configuration.loadDataOnStart || this.loadDataOnStart; - } - _optionSelected(event: MatAutocompleteSelectedEvent) { - this._setValue(this.configuration.valueAssign ? this.configuration.valueAssign(event.option.value) : event.option.value); - //this._inputValue = " "; - this.stateChanges.next(); - this.optionSelected.emit(event.option.value); - if (this.configuration.removeAfterSelection) { - this.clearAutocomplete() - } + this.inputValue = this._displayFn(event.option.value); + this.optionSelectedInternal(event.option.value); } - private clearAutocomplete() { - this._setValue(null); + private optionSelectedInternal(item: any) { + const newValue = this._valueToAssign(item); + + //Update selected items + this._selectedItems.set(JSON.stringify(newValue), item); + + this._setValue(newValue); + + this.stateChanges.next(); + this.optionSelected.emit(item); + } + + public onKeyUp(event) { + this.inputValue = event.target.value; + // prevent filtering results if arrow were pressed + if (event.keyCode !== ENTER && (event.keyCode < 37 || event.keyCode > 40)) { + if (this.inputValue.length === 0 && this.value != null) { + this.optionSelectedInternal(null); + } + this._inputSubject.next(this.inputValue); + } } private _setValue(value: any) { @@ -194,72 +225,100 @@ export class SingleAutoCompleteComponent implements OnInit, MatFormFieldControl< startWith(null), debounceTime(this.requestDelay), distinctUntilChanged(), - tap(() => { this.loading = true; }), - switchMap(query => { - // If its a valid object, a selection just made and the object is set as the value of the form control. That means we should fire an extra request to the server. - if (this._isValidObject(query)) { return observableOf([]); } - - // Since the object is changed we need to clear any existing selections, except for the first time. - if (query !== null) { this.pushChanges(null); } - return this.filter(query); - }), - tap(() => { this.loading = false; })); + mergeMap(query => this.filter(query))); if (this.configuration.groupingFn) { this._groupedItems = this._items.pipe(map(items => this.configuration.groupingFn(items))); } } } - _inputValueChange(value: string) { - //this._inputValue = value; - this._inputSubject.next(value); - this.stateChanges.next(); - } - - _isValidObject(value: any): boolean { - try { - if (!value) { return false; } - if (typeof value !== 'object') { JSON.parse(value); } - } catch (e) { - return false; + public onBlur($event: MouseEvent) { + if (this.value != null) { + const inputLabel = this.inputValue; + const selectedLabel = this._displayFn(this._selectedItems.get(JSON.stringify(this.value))); + if (inputLabel && selectedLabel !== inputLabel) { + this.inputValue = selectedLabel; + } + } else if (this.inputValue && this.inputValue.length > 1 && this.autocomplete.options && this.autocomplete.options.length > 0 && this.autoSelectFirstOptionOnBlur) { + this.inputValue = this._displayFn(this.autocomplete.options.first.value); + this.optionSelectedInternal(this.autocomplete.options.first.value); } - return true; } onChange = (_: any) => { }; - onTouched = () => { }; - writeValue(value: any): void { this.value = value || ''; } + private _onTouched = () => { }; + writeValue(value: any): void { + this.value = value; + // Update chips observable + if (value != null) { this.getSelectedItems(value); } else { + if (this.autocompleteInput && this.autocompleteInput.nativeElement && this.autocompleteInput.nativeElement.value) { this.autocompleteInput.nativeElement.value = ''; } + this.inputValue = null; + } + } pushChanges(value: any) { this.onChange(value); } registerOnChange(fn: (_: any) => {}): void { this.onChange = fn; } - registerOnTouched(fn: () => {}): void { this.onTouched = fn; } + registerOnTouched(fn: () => {}): void { this._onTouched = fn; } setDisabledState(isDisabled: boolean): void { this.disabled = isDisabled; } - - setDescribedByIds(ids: string[]) { - this.describedBy = ids.join(' '); - } + setDescribedByIds(ids: string[]) { this.describedBy = ids.join(' '); } onContainerClick(event: MouseEvent) { - if ((event.target as Element).tagName.toLowerCase() !== 'input') { - this.elRef.nativeElement.querySelector('input').focus(); + event.stopPropagation(); + this._onInputFocus(); + if (this.disabled) { return; } + if (!this.autocomplete.isOpen) { + this.autocompleteTrigger.openPanel(); } } - chipRemove(): void { - this._setValue(null); - this.optionRemoved.emit(); - } - - linkToOption(value: any): void { - if (this._linkFn(value)) { - this.router.navigate([]).then(result => { window.open(this._linkFn(value), '_blank'); }); - } - } - - autoCompleteDisplayFn() { - return (val) => ""; - } - ngOnDestroy() { this.stateChanges.complete(); this.fm.stopMonitoring(this.elRef.nativeElement); } + + //Configuration getters + _displayFn(item: any): string { + // console.log('_displayFn' + item); + if (this.configuration.displayFn && item) { return this.configuration.displayFn(item); } + return item; + } + + _titleFn(item: any): string { + if (this.configuration.titleFn && item) { return this.configuration.titleFn(item); } + return item; + } + + _optionTemplate(item: any): TemplateRef { + if (this.configuration.optionTemplate && item) { return this.configuration.optionTemplate; } + return null; + } + + _selectedValueTemplate(item: any): TemplateRef { + if (this.configuration.selectedValueTemplate && item) { return this.configuration.selectedValueTemplate; } + return null; + } + + _subtitleFn(item: any): string { + if (this.configuration.subtitleFn && item) { return this.configuration.subtitleFn(item); } + return null; + } + + _valueToAssign(item: any): any { + if (this.configuration.valueAssign && item) { return this.configuration.valueAssign(item); } + return item; + } + + get requestDelay(): number { + return this.configuration.requestDelay != null ? this.configuration.requestDelay : 200; + } + + get minFilteringChars(): number { + return this.configuration.minFilteringChars != null ? this.configuration.minFilteringChars : 1; + } + + get loadDataOnStart(): boolean { + return this.configuration.loadDataOnStart != null ? this.configuration.loadDataOnStart : true; + } + + get autoSelectFirstOptionOnBlur(): boolean { + return this.configuration.autoSelectFirstOptionOnBlur != null ? this.configuration.autoSelectFirstOptionOnBlur : false; + } } diff --git a/dmp-frontend/src/app/library/confirmation-dialog/confirmation-dialog.component.scss b/dmp-frontend/src/app/library/confirmation-dialog/confirmation-dialog.component.scss deleted file mode 100644 index 025bfb9d5..000000000 --- a/dmp-frontend/src/app/library/confirmation-dialog/confirmation-dialog.component.scss +++ /dev/null @@ -1,44 +0,0 @@ -.confirmation-dialog { - .confirmation { - padding-bottom: 20px; - } - - .privacy-policy-names { - font-weight: 700; - padding: 1em; - } - - .close-btn { - margin-left: auto; - cursor: pointer; - } - - .warn-text { - color: #f44336; - } - - .cancel { - background-color: #aaaaaa; - color: #ffffff; - } - - .confirm { - background-color: #2cba6c; - color: #ffffff; - } - - .delete { - background-color: #ba2c2c; - color: #ffffff; - } - - .checkbox-privacy { - padding: 0em 1em; - } - - .required-policy { - padding: 0em 1.2em 1em; - font-size: smaller; - color: #f44336; - } -} diff --git a/dmp-frontend/src/app/library/confirmation-dialog/confirmation-dialog.module.ts b/dmp-frontend/src/app/library/confirmation-dialog/confirmation-dialog.module.ts deleted file mode 100644 index cda63242d..000000000 --- a/dmp-frontend/src/app/library/confirmation-dialog/confirmation-dialog.module.ts +++ /dev/null @@ -1,13 +0,0 @@ -import { NgModule } from '@angular/core'; -import { CommonUiModule } from '../../common/ui/common-ui.module'; -import { ConfirmationDialogComponent } from './confirmation-dialog.component'; - -@NgModule({ - imports: [CommonUiModule], - declarations: [ConfirmationDialogComponent], - exports: [ConfirmationDialogComponent], - entryComponents: [ConfirmationDialogComponent] -}) -export class ConfirmationDialogModule { - constructor() { } -} diff --git a/dmp-frontend/src/app/library/deactivate/can-deactivate.guard.ts b/dmp-frontend/src/app/library/deactivate/can-deactivate.guard.ts index aac88736e..75d89ac2d 100644 --- a/dmp-frontend/src/app/library/deactivate/can-deactivate.guard.ts +++ b/dmp-frontend/src/app/library/deactivate/can-deactivate.guard.ts @@ -1,12 +1,12 @@ import { Injectable } from '@angular/core'; import { MatDialog } from '@angular/material/dialog'; import { CanDeactivate } from '@angular/router'; -import { Observable } from 'rxjs'; +import { CheckDeactivateBaseComponent } from '@app/library/deactivate/deactivate.component'; +import { BaseComponent } from '@common/base/base.component'; +import { ConfirmationDialogComponent } from '@common/modules/confirmation-dialog/confirmation-dialog.component'; import { TranslateService } from '@ngx-translate/core'; +import { Observable } from 'rxjs'; import { map } from 'rxjs/operators'; -import { BaseComponent } from '../../core/common/base/base.component'; -import { CheckDeactivateBaseComponent } from './deactivate.component'; -import { ConfirmationDialogComponent } from '../confirmation-dialog/confirmation-dialog.component'; @Injectable() export class CanDeactivateGuard extends BaseComponent implements CanDeactivate { @@ -21,19 +21,19 @@ export class CanDeactivateGuard extends BaseComponent implements CanDeactivate { if (component.canDeactivate()) { - return true; - } else { - const dialogRef = this.dialog.open(ConfirmationDialogComponent, { - maxWidth: '700px', - data: { + return true; + } else { + const dialogRef = this.dialog.open(ConfirmationDialogComponent, { + maxWidth: '700px', + data: { message: this.language.instant('GENERAL.CONFIRMATION-DIALOG.LEAVE-PAGE'), warning: this.language.instant('GENERAL.CONFIRMATION-DIALOG.LEAVE-WARNING'), - cancelButton: this.language.instant('GENERAL.CONFIRMATION-DIALOG.ACTIONS.CANCEL'), + cancelButton: this.language.instant('GENERAL.CONFIRMATION-DIALOG.ACTIONS.CANCEL'), confirmButton: this.language.instant('GENERAL.CONFIRMATION-DIALOG.ACTIONS.LEAVE'), icon: 'error_outline' - } - }); - return dialogRef.afterClosed().pipe(map(x => x ? true : false)); - } + } + }); + return dialogRef.afterClosed().pipe(map(x => x ? true : false)); + } } } diff --git a/dmp-frontend/src/app/library/deactivate/deactivate.component.ts b/dmp-frontend/src/app/library/deactivate/deactivate.component.ts index ce05a6632..2b854f125 100644 --- a/dmp-frontend/src/app/library/deactivate/deactivate.component.ts +++ b/dmp-frontend/src/app/library/deactivate/deactivate.component.ts @@ -1,5 +1,5 @@ -import { BaseComponent } from '../../core/common/base/base.component'; import { HostListener } from '@angular/core'; +import { BaseComponent } from '@common/base/base.component'; export abstract class CheckDeactivateBaseComponent extends BaseComponent { diff --git a/dmp-frontend/src/app/library/export-method-dialog/export-method-dialog.module.ts b/dmp-frontend/src/app/library/export-method-dialog/export-method-dialog.module.ts index 327bc17e7..b72241c53 100644 --- a/dmp-frontend/src/app/library/export-method-dialog/export-method-dialog.module.ts +++ b/dmp-frontend/src/app/library/export-method-dialog/export-method-dialog.module.ts @@ -1,6 +1,6 @@ import { NgModule } from '@angular/core'; -import { CommonUiModule } from '../../common/ui/common-ui.module'; -import { ExportMethodDialogComponent } from './export-method-dialog.component'; +import { ExportMethodDialogComponent } from '@app/library/export-method-dialog/export-method-dialog.component'; +import { CommonUiModule } from '@common/ui/common-ui.module'; @NgModule({ imports: [CommonUiModule], diff --git a/dmp-frontend/src/app/library/notification/notification.component.ts b/dmp-frontend/src/app/library/notification/notification.component.ts index 20527fe02..2bc6c31b6 100644 --- a/dmp-frontend/src/app/library/notification/notification.component.ts +++ b/dmp-frontend/src/app/library/notification/notification.component.ts @@ -1,11 +1,11 @@ import { Component, OnInit } from '@angular/core'; import { MatDialog } from '@angular/material/dialog'; import { MatSnackBar } from '@angular/material/snack-bar'; +import { PopupNotification, SnackBarNotification, SnackBarNotificationLevel, UiNotificationService, UiNotificationType } from '@app/core/services/notification/ui-notification-service'; +import { PopupNotificationDialogComponent } from '@app/library/notification/popup/popup-notification.component'; +import { SnackBarNotificationComponent } from '@app/library/notification/snack-bar/snack-bar-notification.component'; +import { BaseComponent } from '@common/base/base.component'; import { takeUntil } from 'rxjs/operators'; -import { BaseComponent } from '../../core/common/base/base.component'; -import { UiNotificationService, UiNotificationType, PopupNotification, SnackBarNotification, SnackBarNotificationLevel } from '../../core/services/notification/ui-notification-service'; -import { PopupNotificationDialogComponent } from './popup/popup-notification.component'; -import { SnackBarNotificationComponent } from './snack-bar/snack-bar-notification.component'; @Component({ selector: 'app-notification', diff --git a/dmp-frontend/src/app/library/notification/notification.module.ts b/dmp-frontend/src/app/library/notification/notification.module.ts index 7d7a194d5..2abf82c9d 100644 --- a/dmp-frontend/src/app/library/notification/notification.module.ts +++ b/dmp-frontend/src/app/library/notification/notification.module.ts @@ -1,8 +1,8 @@ import { NgModule } from '@angular/core'; -import { CommonUiModule } from '../../common/ui/common-ui.module'; -import { NotificationComponent } from './notification.component'; -import { PopupNotificationDialogComponent } from './popup/popup-notification.component'; -import { SnackBarNotificationComponent } from './snack-bar/snack-bar-notification.component'; +import { NotificationComponent } from '@app/library/notification/notification.component'; +import { PopupNotificationDialogComponent } from '@app/library/notification/popup/popup-notification.component'; +import { SnackBarNotificationComponent } from '@app/library/notification/snack-bar/snack-bar-notification.component'; +import { CommonUiModule } from '@common/ui/common-ui.module'; @NgModule({ imports: [ diff --git a/dmp-frontend/src/app/library/url-listing/url-listing.module.ts b/dmp-frontend/src/app/library/url-listing/url-listing.module.ts index c0112e256..3ee5b0996 100644 --- a/dmp-frontend/src/app/library/url-listing/url-listing.module.ts +++ b/dmp-frontend/src/app/library/url-listing/url-listing.module.ts @@ -1,7 +1,7 @@ import { NgModule } from '@angular/core'; -import { CommonUiModule } from '../../common/ui/common-ui.module'; -import { FormattingModule } from '../../core/formatting.module'; -import { UrlListingComponent } from './url-listing.component'; +import { FormattingModule } from '@app/core/formatting.module'; +import { UrlListingComponent } from '@app/library/url-listing/url-listing.component'; +import { CommonUiModule } from '@common/ui/common-ui.module'; @NgModule({ imports: [ diff --git a/dmp-frontend/src/app/ui/about/about.module.ts b/dmp-frontend/src/app/ui/about/about.module.ts index e6830d4b2..0d119dc88 100644 --- a/dmp-frontend/src/app/ui/about/about.module.ts +++ b/dmp-frontend/src/app/ui/about/about.module.ts @@ -1,7 +1,7 @@ import { NgModule } from '@angular/core'; -import { CommonUiModule } from '../../common/ui/common-ui.module'; -import { AboutComponent } from './about.component'; -import { AboutRoutingModule } from './about.routing'; +import { AboutComponent } from '@app/ui/about/about.component'; +import { AboutRoutingModule } from '@app/ui/about/about.routing'; +import { CommonUiModule } from '@common/ui/common-ui.module'; @NgModule({ imports: [ diff --git a/dmp-frontend/src/app/ui/admin/dataset-profile/admin/page-editor-model.ts b/dmp-frontend/src/app/ui/admin/dataset-profile/admin/page-editor-model.ts index 1a35db433..6f16b2c02 100644 --- a/dmp-frontend/src/app/ui/admin/dataset-profile/admin/page-editor-model.ts +++ b/dmp-frontend/src/app/ui/admin/dataset-profile/admin/page-editor-model.ts @@ -1,7 +1,7 @@ import { FormGroup, Validators } from '@angular/forms'; -import { Page } from '../../../../core/model/admin/dataset-profile/dataset-profile'; -import { BaseFormModel } from '../../../../core/model/base-form-model'; -import { Guid } from '../../../../common/types/guid'; +import { Page } from '@app/core/model/admin/dataset-profile/dataset-profile'; +import { BaseFormModel } from '@app/core/model/base-form-model'; +import { Guid } from '@common/types/guid'; export class PageEditorModel extends BaseFormModel { public title: string; diff --git a/dmp-frontend/src/app/ui/admin/dataset-profile/dataset-profile.module.ts b/dmp-frontend/src/app/ui/admin/dataset-profile/dataset-profile.module.ts index c4fdba9cc..1e7c9eb19 100644 --- a/dmp-frontend/src/app/ui/admin/dataset-profile/dataset-profile.module.ts +++ b/dmp-frontend/src/app/ui/admin/dataset-profile/dataset-profile.module.ts @@ -1,32 +1,32 @@ import { NgModule } from '@angular/core'; -import { CommonFormsModule } from '../../../common/forms/common-forms.module'; -import { CommonUiModule } from '../../../common/ui/common-ui.module'; -import { FormattingModule } from '../../../core/formatting.module'; -import { DatasetProfileRoutingModule } from './dataset-profile.routing'; -import { DatasetProfileEditorDefaultValueComponent } from './editor/components/composite-profile-editor-default-value/component-profile-editor-default-value.component'; -import { DatasetProfileEditorCompositeFieldComponent } from './editor/components/composite-field/dataset-profile-editor-composite-field.component'; -import { DatasetProfileEditorAutoCompleteFieldComponent } from './editor/components/field-type/auto-complete/dataset-profile-editor-auto-complete-field.component'; -import { DatasetProfileEditorBooleanDecisionFieldComponent } from './editor/components/field-type/boolean-decision/dataset-profile-editor-boolean-decision-field.component'; -import { DatasetProfileEditorCheckboxFieldComponent } from './editor/components/field-type/checkbox/dataset-profile-editor-checkbox-field.component'; -import { DatasetProfileEditorComboBoxFieldComponent } from './editor/components/field-type/combo-box/dataset-profile-editor-combo-box-field.component'; -import { DatasetProfileEditorFreeTextFieldComponent } from './editor/components/field-type/free-text/dataset-profile-editor-free-text-field.component'; -import { DatasetProfileEditorRadioBoxFieldComponent } from './editor/components/field-type/radio-box/dataset-profile-editor-radio-box-field.component'; -import { DatasetProfileEditorTextAreaFieldComponent } from './editor/components/field-type/textarea/dataset-profile-editor-text-area-field.component'; -import { DatasetProfileEditorWordListFieldComponent } from './editor/components/field-type/word-list/dataset-profile-editor-word-list-field.component'; -import { DatasetProfileEditorFieldComponent } from './editor/components/field/dataset-profile-editor-field.component'; -import { DatasetProfileEditorPageComponent } from './editor/components/page/dataset-profile-editor-page.component'; -import { DatasetProfileEditorRuleComponent } from './editor/components/rule/dataset-profile-editor-rule.component'; -import { DatasetProfileEditorSectionComponent } from './editor/components/section/dataset-profile-editor-section.component'; -import { DatasetProfileEditorComponent } from './editor/dataset-profile-editor.component'; -import { DatasetProfileCriteriaComponent } from './listing/criteria/dataset-profile.component'; -import { DatasetProfileListingComponent } from './listing/dataset-profile-listing.component'; -import { ConfirmationDialogModule } from '../../../library/confirmation-dialog/confirmation-dialog.module'; -import { DatasetProfileEditorDatePickerFieldComponent } from './editor/components/field-type/datepicker/dataset-profile-editor-date-picker-field.component'; -import { DialodConfirmationUploadDatasetProfiles } from './listing/criteria/dialog-confirmation-upload-profile/dialog-confirmation-upload-profiles.component'; -import { DatasetProfileEditorInternalDmpEntitiesFieldComponent } from './editor/components/field-type/internal-dmp-entities/dataset-profile-editor-internal-dmp-entities-field.component'; -import { DatasetProfileEditorResearchersAutoCompleteFieldComponent } from './editor/components/field-type/researchers-auto-complete/dataset-profile-editor-researchers-auto-complete-field.component'; -import { DatasetProfileEditorDatasetsAutoCompleteFieldComponent } from './editor/components/field-type/datasets-auto-complete/dataset-profile-editor-datasets-autocomplete-field.component'; -import { DatasetProfileEditorDmpsAutoCompleteFieldComponent } from './editor/components/field-type/dmps-auto-complete/dataset-profile-editor-dmps-autocomplete-field.component'; +import { FormattingModule } from '@app/core/formatting.module'; +import { ConfirmationDialogModule } from '@common/modules/confirmation-dialog/confirmation-dialog.module'; +import { DatasetProfileRoutingModule } from '@app/ui/admin/dataset-profile/dataset-profile.routing'; +import { DatasetProfileEditorCompositeFieldComponent } from '@app/ui/admin/dataset-profile/editor/components/composite-field/dataset-profile-editor-composite-field.component'; +import { DatasetProfileEditorDefaultValueComponent } from '@app/ui/admin/dataset-profile/editor/components/composite-profile-editor-default-value/component-profile-editor-default-value.component'; +import { DatasetProfileEditorAutoCompleteFieldComponent } from '@app/ui/admin/dataset-profile/editor/components/field-type/auto-complete/dataset-profile-editor-auto-complete-field.component'; +import { DatasetProfileEditorBooleanDecisionFieldComponent } from '@app/ui/admin/dataset-profile/editor/components/field-type/boolean-decision/dataset-profile-editor-boolean-decision-field.component'; +import { DatasetProfileEditorCheckboxFieldComponent } from '@app/ui/admin/dataset-profile/editor/components/field-type/checkbox/dataset-profile-editor-checkbox-field.component'; +import { DatasetProfileEditorComboBoxFieldComponent } from '@app/ui/admin/dataset-profile/editor/components/field-type/combo-box/dataset-profile-editor-combo-box-field.component'; +import { DatasetProfileEditorDatasetsAutoCompleteFieldComponent } from '@app/ui/admin/dataset-profile/editor/components/field-type/datasets-auto-complete/dataset-profile-editor-datasets-autocomplete-field.component'; +import { DatasetProfileEditorDatePickerFieldComponent } from '@app/ui/admin/dataset-profile/editor/components/field-type/datepicker/dataset-profile-editor-date-picker-field.component'; +import { DatasetProfileEditorDmpsAutoCompleteFieldComponent } from '@app/ui/admin/dataset-profile/editor/components/field-type/dmps-auto-complete/dataset-profile-editor-dmps-autocomplete-field.component'; +import { DatasetProfileEditorFreeTextFieldComponent } from '@app/ui/admin/dataset-profile/editor/components/field-type/free-text/dataset-profile-editor-free-text-field.component'; +import { DatasetProfileEditorInternalDmpEntitiesFieldComponent } from '@app/ui/admin/dataset-profile/editor/components/field-type/internal-dmp-entities/dataset-profile-editor-internal-dmp-entities-field.component'; +import { DatasetProfileEditorRadioBoxFieldComponent } from '@app/ui/admin/dataset-profile/editor/components/field-type/radio-box/dataset-profile-editor-radio-box-field.component'; +import { DatasetProfileEditorResearchersAutoCompleteFieldComponent } from '@app/ui/admin/dataset-profile/editor/components/field-type/researchers-auto-complete/dataset-profile-editor-researchers-auto-complete-field.component'; +import { DatasetProfileEditorTextAreaFieldComponent } from '@app/ui/admin/dataset-profile/editor/components/field-type/textarea/dataset-profile-editor-text-area-field.component'; +import { DatasetProfileEditorWordListFieldComponent } from '@app/ui/admin/dataset-profile/editor/components/field-type/word-list/dataset-profile-editor-word-list-field.component'; +import { DatasetProfileEditorFieldComponent } from '@app/ui/admin/dataset-profile/editor/components/field/dataset-profile-editor-field.component'; +import { DatasetProfileEditorPageComponent } from '@app/ui/admin/dataset-profile/editor/components/page/dataset-profile-editor-page.component'; +import { DatasetProfileEditorRuleComponent } from '@app/ui/admin/dataset-profile/editor/components/rule/dataset-profile-editor-rule.component'; +import { DatasetProfileEditorSectionComponent } from '@app/ui/admin/dataset-profile/editor/components/section/dataset-profile-editor-section.component'; +import { DatasetProfileEditorComponent } from '@app/ui/admin/dataset-profile/editor/dataset-profile-editor.component'; +import { DatasetProfileCriteriaComponent } from '@app/ui/admin/dataset-profile/listing/criteria/dataset-profile.component'; +import { DialodConfirmationUploadDatasetProfiles } from '@app/ui/admin/dataset-profile/listing/criteria/dialog-confirmation-upload-profile/dialog-confirmation-upload-profiles.component'; +import { DatasetProfileListingComponent } from '@app/ui/admin/dataset-profile/listing/dataset-profile-listing.component'; +import { CommonFormsModule } from '@common/forms/common-forms.module'; +import { CommonUiModule } from '@common/ui/common-ui.module'; @NgModule({ imports: [ diff --git a/dmp-frontend/src/app/ui/admin/dataset-profile/editor/components/composite-field/dataset-profile-editor-composite-field.component.ts b/dmp-frontend/src/app/ui/admin/dataset-profile/editor/components/composite-field/dataset-profile-editor-composite-field.component.ts index e0ed0479f..e4fd16dfa 100644 --- a/dmp-frontend/src/app/ui/admin/dataset-profile/editor/components/composite-field/dataset-profile-editor-composite-field.component.ts +++ b/dmp-frontend/src/app/ui/admin/dataset-profile/editor/components/composite-field/dataset-profile-editor-composite-field.component.ts @@ -1,7 +1,7 @@ import { Component, Input, OnInit } from '@angular/core'; import { FormArray, FormControl, FormGroup } from '@angular/forms'; import { FieldEditorModel } from '../../../admin/field-editor-model'; -import { Guid } from '../../../../../../common/types/guid'; +import { Guid } from '@common/types/guid'; @Component({ selector: 'app-dataset-profile-editor-composite-field-component', diff --git a/dmp-frontend/src/app/ui/admin/dataset-profile/editor/components/field-type/combo-box/dataset-profile-editor-combo-box-field.component.ts b/dmp-frontend/src/app/ui/admin/dataset-profile/editor/components/field-type/combo-box/dataset-profile-editor-combo-box-field.component.ts index 4770e4ce9..86cc30d8d 100644 --- a/dmp-frontend/src/app/ui/admin/dataset-profile/editor/components/field-type/combo-box/dataset-profile-editor-combo-box-field.component.ts +++ b/dmp-frontend/src/app/ui/admin/dataset-profile/editor/components/field-type/combo-box/dataset-profile-editor-combo-box-field.component.ts @@ -1,11 +1,11 @@ import { Component, Input, OnInit } from '@angular/core'; import { FormGroup } from '@angular/forms'; +import { DatasetProfileComboBoxType } from '@app/core/common/enum/dataset-profile-combo-box-type'; +import { EnumUtils } from '@app/core/services/utilities/enum-utils.service'; +import { AutoCompleteFieldDataEditorModel } from '@app/ui/admin/dataset-profile/admin/field-data/auto-complete-field-data-editor-model'; +import { WordListFieldDataEditorModel } from '@app/ui/admin/dataset-profile/admin/field-data/word-list-field-data-editor-model'; +import { BaseComponent } from '@common/base/base.component'; import { takeUntil } from 'rxjs/operators'; -import { BaseComponent } from '../../../../../../../core/common/base/base.component'; -import { DatasetProfileComboBoxType } from '../../../../../../../core/common/enum/dataset-profile-combo-box-type'; -import { EnumUtils } from '../../../../../../../core/services/utilities/enum-utils.service'; -import { AutoCompleteFieldDataEditorModel } from '../../../../admin/field-data/auto-complete-field-data-editor-model'; -import { WordListFieldDataEditorModel } from '../../../../admin/field-data/word-list-field-data-editor-model'; @Component({ selector: 'app-dataset-profile-editor-combo-box-field-component', diff --git a/dmp-frontend/src/app/ui/admin/dataset-profile/editor/components/field-type/internal-dmp-entities/dataset-profile-editor-internal-dmp-entities-field.component.ts b/dmp-frontend/src/app/ui/admin/dataset-profile/editor/components/field-type/internal-dmp-entities/dataset-profile-editor-internal-dmp-entities-field.component.ts index 533669c20..2c7163000 100644 --- a/dmp-frontend/src/app/ui/admin/dataset-profile/editor/components/field-type/internal-dmp-entities/dataset-profile-editor-internal-dmp-entities-field.component.ts +++ b/dmp-frontend/src/app/ui/admin/dataset-profile/editor/components/field-type/internal-dmp-entities/dataset-profile-editor-internal-dmp-entities-field.component.ts @@ -1,13 +1,12 @@ -import { DatasetProfileInternalDmpEntitiesType } from "../../../../../../../core/common/enum/dataset-profile-internal-dmp-entities-type"; -import { EnumUtils } from "../../../../../../../core/services/utilities/enum-utils.service"; -import { Component, Input, OnInit } from "@angular/core"; -import { FormGroup } from "@angular/forms"; -import { BaseComponent } from "../../../../../../../core/common/base/base.component"; -import { takeUntil } from "rxjs/operators"; -import { ResearchersAutoCompleteFieldDataEditorModel } from "../../../../admin/field-data/researchers-auto-complete-field-data-editor-model"; -import { DatasetsAutoCompleteFieldDataEditorModel } from "../../../../admin/field-data/datasets-autocomplete-field-data-editor-mode"; -import { DmpsAutoCompleteFieldDataEditorModel } from "../../../../admin/field-data/dmps-autocomplete-field-data-editor-model"; - +import { Component, Input, OnInit } from '@angular/core'; +import { FormGroup } from '@angular/forms'; +import { DatasetProfileInternalDmpEntitiesType } from '@app/core/common/enum/dataset-profile-internal-dmp-entities-type'; +import { EnumUtils } from '@app/core/services/utilities/enum-utils.service'; +import { DatasetsAutoCompleteFieldDataEditorModel } from '@app/ui/admin/dataset-profile/admin/field-data/datasets-autocomplete-field-data-editor-mode'; +import { DmpsAutoCompleteFieldDataEditorModel } from '@app/ui/admin/dataset-profile/admin/field-data/dmps-autocomplete-field-data-editor-model'; +import { ResearchersAutoCompleteFieldDataEditorModel } from '@app/ui/admin/dataset-profile/admin/field-data/researchers-auto-complete-field-data-editor-model'; +import { BaseComponent } from '@common/base/base.component'; +import { takeUntil } from 'rxjs/operators'; @Component({ selector: 'app-dataset-profile-internal-dmp-entities-field-component', diff --git a/dmp-frontend/src/app/ui/admin/dataset-profile/editor/components/field/dataset-profile-editor-field.component.ts b/dmp-frontend/src/app/ui/admin/dataset-profile/editor/components/field/dataset-profile-editor-field.component.ts index bdc243b73..c9b082e4f 100644 --- a/dmp-frontend/src/app/ui/admin/dataset-profile/editor/components/field/dataset-profile-editor-field.component.ts +++ b/dmp-frontend/src/app/ui/admin/dataset-profile/editor/components/field/dataset-profile-editor-field.component.ts @@ -1,22 +1,21 @@  import { Component, Input, OnInit } from '@angular/core'; import { FormArray, FormControl, FormGroup } from '@angular/forms'; +import { DatasetProfileFieldViewStyle } from '@app/core/common/enum/dataset-profile-field-view-style'; +import { ValidationType } from '@app/core/common/enum/validation-type'; +import { DatasetProfileService } from '@app/core/services/dataset-profile/dataset-profile.service'; +import { EnumUtils } from '@app/core/services/utilities/enum-utils.service'; +import { BooleanDecisionFieldDataEditorModel } from '@app/ui/admin/dataset-profile/admin/field-data/boolean-decision-field-data-editor-model'; +import { CheckBoxFieldDataEditorModel } from '@app/ui/admin/dataset-profile/admin/field-data/check-box-field-data-editor-model'; +import { DatePickerDataEditorModel } from '@app/ui/admin/dataset-profile/admin/field-data/date-picker-data-editor-models'; +import { FreeTextFieldDataEditorModel } from '@app/ui/admin/dataset-profile/admin/field-data/free-text-field-data-editor-model'; +import { RadioBoxFieldDataEditorModel } from '@app/ui/admin/dataset-profile/admin/field-data/radio-box-field-data-editor-model'; +import { ResearchersAutoCompleteFieldDataEditorModel } from '@app/ui/admin/dataset-profile/admin/field-data/researchers-auto-complete-field-data-editor-model'; +import { TextAreaFieldDataEditorModel } from '@app/ui/admin/dataset-profile/admin/field-data/text-area-field-data-editor-model'; +import { WordListFieldDataEditorModel } from '@app/ui/admin/dataset-profile/admin/field-data/word-list-field-data-editor-model'; +import { RuleEditorModel } from '@app/ui/admin/dataset-profile/admin/rule-editor-model'; +import { BaseComponent } from '@common/base/base.component'; import { takeUntil } from 'rxjs/operators'; -import { BaseComponent } from '../../../../../../core/common/base/base.component'; -import { DatasetProfileFieldViewStyle } from '../../../../../../core/common/enum/dataset-profile-field-view-style'; -import { ValidationType } from '../../../../../../core/common/enum/validation-type'; -import { EnumUtils } from '../../../../../../core/services/utilities/enum-utils.service'; -import { BooleanDecisionFieldDataEditorModel } from '../../../admin/field-data/boolean-decision-field-data-editor-model'; -import { CheckBoxFieldDataEditorModel } from '../../../admin/field-data/check-box-field-data-editor-model'; -import { FreeTextFieldDataEditorModel } from '../../../admin/field-data/free-text-field-data-editor-model'; -import { RadioBoxFieldDataEditorModel } from '../../../admin/field-data/radio-box-field-data-editor-model'; -import { TextAreaFieldDataEditorModel } from '../../../admin/field-data/text-area-field-data-editor-model'; -import { WordListFieldDataEditorModel } from '../../../admin/field-data/word-list-field-data-editor-model'; -import { RuleEditorModel } from '../../../admin/rule-editor-model'; -import { DatePickerDataEditorModel } from '../../../admin/field-data/date-picker-data-editor-models'; -import { ResearchersAutoCompleteFieldDataEditorModel } from '../../../admin/field-data/researchers-auto-complete-field-data-editor-model'; -import { DatasetProfileInternalDmpEntitiesType } from '../../../../../../core/common/enum/dataset-profile-internal-dmp-entities-type'; -import { DatasetProfileService } from "../../../../../../core/services/dataset-profile/dataset-profile.service"; @Component({ selector: 'app-dataset-profile-editor-field-component', diff --git a/dmp-frontend/src/app/ui/admin/dataset-profile/editor/components/section/dataset-profile-editor-section.component.ts b/dmp-frontend/src/app/ui/admin/dataset-profile/editor/components/section/dataset-profile-editor-section.component.ts index 92a3dc424..9f54487c6 100644 --- a/dmp-frontend/src/app/ui/admin/dataset-profile/editor/components/section/dataset-profile-editor-section.component.ts +++ b/dmp-frontend/src/app/ui/admin/dataset-profile/editor/components/section/dataset-profile-editor-section.component.ts @@ -1,11 +1,11 @@ import { Component, Input, OnInit } from '@angular/core'; import { FormArray, FormGroup } from '@angular/forms'; +import { FieldEditorModel } from '@app/ui/admin/dataset-profile/admin/field-editor-model'; +import { FieldSetEditorModel } from '@app/ui/admin/dataset-profile/admin/field-set-editor-model'; +import { SectionEditorModel } from '@app/ui/admin/dataset-profile/admin/section-editor-model'; +import { BaseComponent } from '@common/base/base.component'; +import { Guid } from '@common/types/guid'; import { takeUntil } from 'rxjs/operators'; -import { BaseComponent } from '../../../../../../core/common/base/base.component'; -import { FieldEditorModel } from '../../../admin/field-editor-model'; -import { FieldSetEditorModel } from '../../../admin/field-set-editor-model'; -import { SectionEditorModel } from '../../../admin/section-editor-model'; -import { Guid } from '../../../../../../common/types/guid'; @Component({ selector: 'app-dataset-profile-editor-section-component', @@ -32,10 +32,10 @@ export class DatasetProfileEditorSectionComponent extends BaseComponent implemen addField() { const fieldSet: FieldSetEditorModel = new FieldSetEditorModel(); const field: FieldEditorModel = new FieldEditorModel(); - field.id=Guid.create().toString(); + field.id = Guid.create().toString(); fieldSet.fields.push(field); if (this.dataModel.fieldSets) { - fieldSet.id=Guid.create().toString(); + fieldSet.id = Guid.create().toString(); this.dataModel.fieldSets.push(fieldSet); } (this.form.get('fieldSets')).push(fieldSet.buildForm()); @@ -48,7 +48,7 @@ export class DatasetProfileEditorSectionComponent extends BaseComponent implemen } DeleteSectionInSection(index) { - this.dataModel.sections.splice(index,1); + this.dataModel.sections.splice(index, 1); (this.form.get('sections')).removeAt(index); } diff --git a/dmp-frontend/src/app/ui/admin/dataset-profile/editor/dataset-profile-editor.component.ts b/dmp-frontend/src/app/ui/admin/dataset-profile/editor/dataset-profile-editor.component.ts index 4dd912dfa..3d102781d 100644 --- a/dmp-frontend/src/app/ui/admin/dataset-profile/editor/dataset-profile-editor.component.ts +++ b/dmp-frontend/src/app/ui/admin/dataset-profile/editor/dataset-profile-editor.component.ts @@ -8,21 +8,20 @@ import { MatHorizontalStepper } from '@angular/material/stepper'; import { ActivatedRoute, ParamMap, Router } from '@angular/router'; import { TranslateService } from '@ngx-translate/core'; import { map, takeUntil } from 'rxjs/operators'; -import { BaseComponent } from '../../../../core/common/base/base.component'; -import { DatasetProfile } from '../../../../core/model/admin/dataset-profile/dataset-profile'; -import { DatasetWizardModel } from '../../../../core/model/dataset/dataset-wizard'; -import { DatasetProfileService } from '../../../../core/services/dataset-profile/dataset-profile.service'; -import { LoggingService } from '../../../../core/services/logging/logging-service'; -import { SnackBarNotificationLevel, UiNotificationService } from '../../../../core/services/notification/ui-notification-service'; -import { PageEditorModel } from '../admin/page-editor-model'; -import { SectionEditorModel } from '../admin/section-editor-model'; -import { DatasetProfileEditorModel } from './dataset-profile-editor-model'; -import { ConfirmationDialogComponent } from '../../../../library/confirmation-dialog/confirmation-dialog.component'; -import { DatasetProfileEnum } from '../../../../core/common/enum/dataset-profile'; import * as FileSaver from 'file-saver'; -import { BreadcrumbItem } from '../../../misc/breadcrumb/definition/breadcrumb-item'; -import { DatasetStatus } from '../../../../core/common/enum/dataset-status'; -//import * as data from 'src/assets/resources/skipDisable.json'; +import { BaseComponent } from '@common/base/base.component'; +import { DatasetProfileEditorModel } from '@app/ui/admin/dataset-profile/editor/dataset-profile-editor-model'; +import { DatasetWizardModel } from '@app/core/model/dataset/dataset-wizard'; +import { BreadcrumbItem } from '@app/ui/misc/breadcrumb/definition/breadcrumb-item'; +import { DatasetProfileService } from '@app/core/services/dataset-profile/dataset-profile.service'; +import { LoggingService } from '@app/core/services/logging/logging-service'; +import { UiNotificationService, SnackBarNotificationLevel } from '@app/core/services/notification/ui-notification-service'; +import { DatasetProfile } from '@app/core/model/admin/dataset-profile/dataset-profile'; +import { DatasetProfileEnum } from '@app/core/common/enum/dataset-profile'; +import { SectionEditorModel } from '@app/ui/admin/dataset-profile/admin/section-editor-model'; +import { PageEditorModel } from '@app/ui/admin/dataset-profile/admin/page-editor-model'; +import { DatasetStatus } from '@app/core/common/enum/dataset-status'; +import { ConfirmationDialogComponent } from '@common/modules/confirmation-dialog/confirmation-dialog.component'; const skipDisable: any[] = require('../../../../../assets/resources/skipDisable.json'); diff --git a/dmp-frontend/src/app/ui/admin/dataset-profile/listing/criteria/dataset-profile.component.ts b/dmp-frontend/src/app/ui/admin/dataset-profile/listing/criteria/dataset-profile.component.ts index 3b39d931b..f0b1b3e17 100644 --- a/dmp-frontend/src/app/ui/admin/dataset-profile/listing/criteria/dataset-profile.component.ts +++ b/dmp-frontend/src/app/ui/admin/dataset-profile/listing/criteria/dataset-profile.component.ts @@ -1,12 +1,12 @@ import { Component, OnInit } from '@angular/core'; import { MatDialog } from '@angular/material/dialog'; +import { DatasetProfileCriteria } from '@app/core/query/dataset-profile/dataset-profile-criteria'; +import { DatasetProfileService } from '@app/core/services/dataset-profile/dataset-profile.service'; +import { DialodConfirmationUploadDatasetProfiles } from '@app/ui/admin/dataset-profile/listing/criteria/dialog-confirmation-upload-profile/dialog-confirmation-upload-profiles.component'; +import { BaseCriteriaComponent } from '@app/ui/misc/criteria/base-criteria.component'; +import { ValidationErrorModel } from '@common/forms/validation/error-model/validation-error-model'; import { TranslateService } from '@ngx-translate/core'; import { takeUntil } from 'rxjs/operators'; -import { ValidationErrorModel } from '../../../../../common/forms/validation/error-model/validation-error-model'; -import { DatasetProfileCriteria } from '../../../../../core/query/dataset-profile/dataset-profile-criteria'; -import { DatasetProfileService } from '../../../../../core/services/dataset-profile/dataset-profile.service'; -import { BaseCriteriaComponent } from '../../../../misc/criteria/base-criteria.component'; -import { DialodConfirmationUploadDatasetProfiles } from './dialog-confirmation-upload-profile/dialog-confirmation-upload-profiles.component'; @Component({ selector: 'app-dataset-profile-criteria-component', 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 ffa8c646b..8582c490d 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 @@ -3,19 +3,19 @@ import { Component, OnInit, ViewChild } from '@angular/core'; import { MatPaginator, PageEvent } from '@angular/material/paginator'; import { MatSort } from '@angular/material/sort'; import { ActivatedRoute, Params, Router } from '@angular/router'; +import { DataTableRequest } from '@app/core/model/data-table/data-table-request'; +import { DatasetListingModel } from '@app/core/model/dataset/dataset-listing'; +import { DmpModel } from '@app/core/model/dmp/dmp'; +import { DatasetProfileCriteria } from '@app/core/query/dataset-profile/dataset-profile-criteria'; +import { DatasetProfileService } from '@app/core/services/dataset-profile/dataset-profile.service'; +import { DmpService } from '@app/core/services/dmp/dmp.service'; +import { UiNotificationService } from '@app/core/services/notification/ui-notification-service'; +import { DatasetProfileCriteriaComponent } from '@app/ui/admin/dataset-profile/listing/criteria/dataset-profile.component'; +import { BreadcrumbItem } from '@app/ui/misc/breadcrumb/definition/breadcrumb-item'; +import { BaseComponent } from '@common/base/base.component'; import { TranslateService } from '@ngx-translate/core'; import { merge as observableMerge, Observable, of as observableOf } from 'rxjs'; import { map, startWith, switchMap, 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 { UiNotificationService } from '../../../../core/services/notification/ui-notification-service'; -import { BreadcrumbItem } from '../../../misc/breadcrumb/definition/breadcrumb-item'; -import { DatasetProfileCriteriaComponent } from './criteria/dataset-profile.component'; @Component({ selector: 'app-dataset-profile-listing-component', diff --git a/dmp-frontend/src/app/ui/admin/dataset-profile/preview/dataset-profile-preview.component.ts b/dmp-frontend/src/app/ui/admin/dataset-profile/preview/dataset-profile-preview.component.ts index 97ea7d06d..092d41f6a 100644 --- a/dmp-frontend/src/app/ui/admin/dataset-profile/preview/dataset-profile-preview.component.ts +++ b/dmp-frontend/src/app/ui/admin/dataset-profile/preview/dataset-profile-preview.component.ts @@ -1,10 +1,10 @@ -import { Component, Inject, OnInit } from '@angular/core'; +import { Inject, OnInit } from '@angular/core'; import { FormGroup } from '@angular/forms'; import { MatDialogRef, MAT_DIALOG_DATA } from '@angular/material/dialog'; +import { DatasetProfileService } from '@app/core/services/dataset-profile/dataset-profile.service'; +import { DatasetWizardEditorModel } from '@app/ui/dataset/dataset-wizard/dataset-wizard-editor.model'; +import { BaseComponent } from '@common/base/base.component'; import { takeUntil } from 'rxjs/operators'; -import { BaseComponent } from '../../../../core/common/base/base.component'; -import { DatasetProfileService } from '../../../../core/services/dataset-profile/dataset-profile.service'; -import { DatasetWizardEditorModel } from '../../../dataset/dataset-wizard/dataset-wizard-editor.model'; // @Component({ // selector: 'app-dataset-profile-preview-component', diff --git a/dmp-frontend/src/app/ui/admin/dmp-profile/dmp-profile.module.ts b/dmp-frontend/src/app/ui/admin/dmp-profile/dmp-profile.module.ts index 373432037..4e4e79439 100644 --- a/dmp-frontend/src/app/ui/admin/dmp-profile/dmp-profile.module.ts +++ b/dmp-frontend/src/app/ui/admin/dmp-profile/dmp-profile.module.ts @@ -1,14 +1,14 @@ import { NgModule } from "@angular/core"; -import { CommonFormsModule } from "../../../common/forms/common-forms.module"; -import { CommonUiModule } from "../../../common/ui/common-ui.module"; -import { ConfirmationDialogModule } from "../../../library/confirmation-dialog/confirmation-dialog.module"; -import { UrlListingModule } from "../../../library/url-listing/url-listing.module"; -import { DmpProfileRoutingModule } from "./dmp-profile.routing"; -import { DmpProfileEditorComponent } from "./editor/dmp-profile-editor.component"; -import { DmpProfileCriteriaComponent } from "./listing/criteria/dmp-profile-criteria.component"; -import { DmpProfileListingComponent } from "./listing/dmp-profile-listing.component"; -import { DialodConfirmationUploadDmpProfiles } from "./listing/criteria/dialog-confirmation-upload-profile/dialog-confirmation-upload-profiles.component"; -import { DmpProfileExternalAutocompleteFieldEditorComponent } from "./editor/external-autocomplete/dmp-profile-external-autocomplete-field-editor.component"; +import { ConfirmationDialogModule } from '@common/modules/confirmation-dialog/confirmation-dialog.module'; +import { UrlListingModule } from '@app/library/url-listing/url-listing.module'; +import { CommonFormsModule } from '@common/forms/common-forms.module'; +import { CommonUiModule } from '@common/ui/common-ui.module'; +import { DmpProfileRoutingModule } from './dmp-profile.routing'; +import { DmpProfileEditorComponent } from './editor/dmp-profile-editor.component'; +import { DmpProfileExternalAutocompleteFieldEditorComponent } from './editor/external-autocomplete/dmp-profile-external-autocomplete-field-editor.component'; +import { DialodConfirmationUploadDmpProfiles } from './listing/criteria/dialog-confirmation-upload-profile/dialog-confirmation-upload-profiles.component'; +import { DmpProfileCriteriaComponent } from './listing/criteria/dmp-profile-criteria.component'; +import { DmpProfileListingComponent } from './listing/dmp-profile-listing.component'; @NgModule({ imports: [ 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 f56b1843f..51fe8a1c7 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 @@ -1,25 +1,25 @@ -import {of as observableOf, Observable } from 'rxjs'; - -import {map, takeUntil } from 'rxjs/operators'; -import { AfterViewInit, Component, OnInit } from '@angular/core'; +import { AfterViewInit, Component } from '@angular/core'; import { AbstractControl, FormArray, FormControl, FormGroup } from '@angular/forms'; import { ActivatedRoute, Params, Router } from '@angular/router'; +import { DmpProfileFieldDataType } from '@app/core/common/enum/dmp-profile-field-type'; +import { DmpProfileStatus } from '@app/core/common/enum/dmp-profile-status'; +import { DmpProfileType } from '@app/core/common/enum/dmp-profile-type'; +import { DmpProfile } from '@app/core/model/dmp-profile/dmp-profile'; +import { DmpProfileService } from '@app/core/services/dmp/dmp-profile.service'; +import { SnackBarNotificationLevel, UiNotificationService } from '@app/core/services/notification/ui-notification-service'; +import { EnumUtils } from '@app/core/services/utilities/enum-utils.service'; +import { DmpProfileEditorModel, DmpProfileFieldEditorModel } from '@app/ui/admin/dmp-profile/editor/dmp-profile-editor.model'; +import { DmpProfileExternalAutoCompleteFieldDataEditorModel } from '@app/ui/admin/dmp-profile/editor/external-autocomplete/dmp-profile-external-autocomplete-field-editor.model'; +import { BreadcrumbItem } from '@app/ui/misc/breadcrumb/definition/breadcrumb-item'; +import { BaseComponent } from '@common/base/base.component'; +import { ValidationErrorModel } from '@common/forms/validation/error-model/validation-error-model'; import { TranslateService } from '@ngx-translate/core'; +import { environment } from 'environments/environment'; import * as FileSaver from 'file-saver'; -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 { DmpProfileStatus } from '../../../../core/common/enum/dmp-profile-status'; -import { DmpProfileType } from '../../../../core/common/enum/dmp-profile-type'; -import { DmpProfile } from '../../../../core/model/dmp-profile/dmp-profile'; -import { DmpProfileService } from '../../../../core/services/dmp/dmp-profile.service'; -import { SnackBarNotificationLevel, UiNotificationService } from '../../../../core/services/notification/ui-notification-service'; -import { EnumUtils } from '../../../../core/services/utilities/enum-utils.service'; -import { DmpProfileEditorModel, DmpProfileFieldEditorModel } from './dmp-profile-editor.model'; -import { BreadcrumbItem } from '../../../misc/breadcrumb/definition/breadcrumb-item'; -import { DmpProfileExternalAutoCompleteFieldDataEditorModel } from './external-autocomplete/dmp-profile-external-autocomplete-field-editor.model'; +import { Observable, of as observableOf } from 'rxjs'; +import { map, takeUntil } from 'rxjs/operators'; + @Component({ selector: 'app-dmp-profile-editor-component', @@ -99,8 +99,8 @@ export class DmpProfileEditorComponent extends BaseComponent implements AfterVie this.dmpProfileService.createDmp(this.formGroup.value) .pipe(takeUntil(this._destroyed)) .subscribe( - complete => this.onCallbackSuccess(), - error => this.onCallbackError(error) + complete => this.onCallbackSuccess(), + error => this.onCallbackError(error) ); } @@ -202,8 +202,8 @@ export class DmpProfileEditorComponent extends BaseComponent implements AfterVie this.dmpProfileService.createDmp(this.formGroup.value) .pipe(takeUntil(this._destroyed)) .subscribe( - complete => this.onCallbackSuccess(), - error => this.onCallbackError(error) + complete => this.onCallbackSuccess(), + error => this.onCallbackError(error) ); } 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 cd32c2d40..aa8b71b81 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 @@ -1,10 +1,10 @@ import { FormBuilder, FormGroup } from '@angular/forms'; -import { ValidationErrorModel } from '../../../../common/forms/validation/error-model/validation-error-model'; -import { DmpProfileFieldDataType } from '../../../../core/common/enum/dmp-profile-field-type'; -import { DmpProfileType } from '../../../../core/common/enum/dmp-profile-type'; -import { DmpProfile, DmpProfileDefinition } from '../../../../core/model/dmp-profile/dmp-profile'; -import { DmpProfileField } from '../../../../core/model/dmp-profile/dmp-profile-field'; -import { DmpProfileExternalAutoCompleteFieldDataEditorModel } from './external-autocomplete/dmp-profile-external-autocomplete-field-editor.model'; +import { DmpProfileFieldDataType } from '@app/core/common/enum/dmp-profile-field-type'; +import { DmpProfileType } from '@app/core/common/enum/dmp-profile-type'; +import { DmpProfile, DmpProfileDefinition } from '@app/core/model/dmp-profile/dmp-profile'; +import { DmpProfileField } from '@app/core/model/dmp-profile/dmp-profile-field'; +import { DmpProfileExternalAutoCompleteFieldDataEditorModel } from '@app/ui/admin/dmp-profile/editor/external-autocomplete/dmp-profile-external-autocomplete-field-editor.model'; +import { ValidationErrorModel } from '@common/forms/validation/error-model/validation-error-model'; export class DmpProfileEditorModel { diff --git a/dmp-frontend/src/app/ui/admin/dmp-profile/listing/criteria/dmp-profile-criteria.component.ts b/dmp-frontend/src/app/ui/admin/dmp-profile/listing/criteria/dmp-profile-criteria.component.ts index def43eae6..bac44b696 100644 --- a/dmp-frontend/src/app/ui/admin/dmp-profile/listing/criteria/dmp-profile-criteria.component.ts +++ b/dmp-frontend/src/app/ui/admin/dmp-profile/listing/criteria/dmp-profile-criteria.component.ts @@ -1,14 +1,14 @@ import { Component, Input, OnInit } from '@angular/core'; -import { ValidationErrorModel } from '../../../../../common/forms/validation/error-model/validation-error-model'; -import { GrantListingModel } from '../../../../../core/model/grant/grant-listing'; -import { DmpCriteria } from '../../../../../core/query/dmp/dmp-criteria'; -import { DmpProfileCriteria } from '../../../../../core/query/dmp/dmp-profile-criteria'; -import { BaseCriteriaComponent } from '../../../../misc/criteria/base-criteria.component'; -import { DialodConfirmationUploadDmpProfiles } from './dialog-confirmation-upload-profile/dialog-confirmation-upload-profiles.component'; -import { MatDialog } from '@angular/material/dialog'; +import { MatDialog } from '@angular/material'; +import { GrantListingModel } from '@app/core/model/grant/grant-listing'; +import { DmpCriteria } from '@app/core/query/dmp/dmp-criteria'; +import { DmpProfileCriteria } from '@app/core/query/dmp/dmp-profile-criteria'; +import { DmpProfileService } from '@app/core/services/dmp/dmp-profile.service'; +import { DialodConfirmationUploadDmpProfiles } from '@app/ui/admin/dmp-profile/listing/criteria/dialog-confirmation-upload-profile/dialog-confirmation-upload-profiles.component'; +import { BaseCriteriaComponent } from '@app/ui/misc/criteria/base-criteria.component'; +import { ValidationErrorModel } from '@common/forms/validation/error-model/validation-error-model'; import { TranslateService } from '@ngx-translate/core'; import { takeUntil } from 'rxjs/operators'; -import { DmpProfileService } from '../../../../../core/services/dmp/dmp-profile.service'; @Component({ selector: 'app-dmp-profile-criteria-component', diff --git a/dmp-frontend/src/app/ui/admin/dmp-profile/listing/dmp-profile-listing.component.ts b/dmp-frontend/src/app/ui/admin/dmp-profile/listing/dmp-profile-listing.component.ts index 856548bc0..6a954910d 100644 --- a/dmp-frontend/src/app/ui/admin/dmp-profile/listing/dmp-profile-listing.component.ts +++ b/dmp-frontend/src/app/ui/admin/dmp-profile/listing/dmp-profile-listing.component.ts @@ -1,21 +1,21 @@ -import {merge as observableMerge, of as observableOf, Observable } from 'rxjs'; - -import {map, switchMap, startWith, takeUntil } from 'rxjs/operators'; import { DataSource } from '@angular/cdk/table'; import { Component, OnInit, ViewChild } from '@angular/core'; import { MatPaginator, PageEvent } from '@angular/material/paginator'; import { MatSnackBar } from '@angular/material/snack-bar'; import { MatSort } from '@angular/material/sort'; import { ActivatedRoute, Params, Router } from '@angular/router'; +import { DataTableRequest } from '@app/core/model/data-table/data-table-request'; +import { DmpProfileListing } from '@app/core/model/dmp-profile/dmp-profile-listing'; +import { DmpProfileCriteria } from '@app/core/query/dmp/dmp-profile-criteria'; +import { DmpProfileService } from '@app/core/services/dmp/dmp-profile.service'; +import { DmpProfileCriteriaComponent } from '@app/ui/admin/dmp-profile/listing/criteria/dmp-profile-criteria.component'; +import { BreadcrumbItem } from '@app/ui/misc/breadcrumb/definition/breadcrumb-item'; +import { BaseComponent } from '@common/base/base.component'; import { TranslateService } from '@ngx-translate/core'; -import { BaseComponent } from '../../../../core/common/base/base.component'; -import { DmpProfileListing } from '../../../../core/model/dmp-profile/dmp-profile-listing'; -import { DmpProfileCriteria } from '../../../../core/query/dmp/dmp-profile-criteria'; -import { DmpProfileService } from '../../../../core/services/dmp/dmp-profile.service'; -import { DataTableRequest } from '../../../../core/model/data-table/data-table-request'; -import { DmpProfileCriteriaComponent } from './criteria/dmp-profile-criteria.component'; -import { BreadcrumbItem } from '../../../misc/breadcrumb/definition/breadcrumb-item'; +import { merge as observableMerge, Observable, of as observableOf } from 'rxjs'; +import { map, startWith, switchMap, takeUntil } from 'rxjs/operators'; + @Component({ selector: 'app-dmp-profile-listing-component', @@ -131,7 +131,7 @@ export class DatasetDataSource extends DataSource { if (!result) { return []; } if (this._paginator.pageIndex === 0) { this.totalCount = result.totalCount; } return result.data; - }),); + })); } disconnect() { 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 ffa011faf..5431debc9 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,11 +1,11 @@ import { Component, OnInit } from '@angular/core'; import { FormBuilder, FormGroup } from '@angular/forms'; +import { AppRole } from '@app/core/common/enum/app-role'; +import { UserCriteria } from '@app/core/query/user/user-criteria'; +import { EnumUtils } from '@app/core/services/utilities/enum-utils.service'; +import { BaseCriteriaComponent } from '@app/ui/misc/criteria/base-criteria.component'; +import { ValidationErrorModel } from '@common/forms/validation/error-model/validation-error-model'; import { debounceTime, takeUntil } from 'rxjs/operators'; -import { ValidationErrorModel } from '../../../../../common/forms/validation/error-model/validation-error-model'; -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'; -import { BaseCriteriaComponent } from '../../../../misc/criteria/base-criteria.component'; @Component({ selector: 'app-user-criteria-component', 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 ca4393546..1e1c7a10f 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 @@ -1,14 +1,14 @@ import { Component, Input, OnInit } from '@angular/core'; import { AbstractControl, FormArray, FormBuilder, FormControl, FormGroup } from '@angular/forms'; +import { AppRole } from '@app/core/common/enum/app-role'; +import { UserListingModel } from '@app/core/model/user/user-listing'; +import { SnackBarNotificationLevel, UiNotificationService } from '@app/core/services/notification/ui-notification-service'; +import { UserService } from '@app/core/services/user/user.service'; +import { EnumUtils } from '@app/core/services/utilities/enum-utils.service'; +import { BaseComponent } from '@common/base/base.component'; +import { Validation, ValidationContext } from '@common/forms/validation/validation-context'; import { TranslateService } from '@ngx-translate/core'; import { takeUntil } from 'rxjs/operators'; -import { Validation, ValidationContext } from '../../../../../common/forms/validation/validation-context'; -import { BaseComponent } from '../../../../../core/common/base/base.component'; -import { AppRole } from '../../../../../core/common/enum/app-role'; -import { UserListingModel } from '../../../../../core/model/user/user-listing'; -import { UserService } from '../../../../../core/services/user/user.service'; -import { EnumUtils } from '../../../../../core/services/utilities/enum-utils.service'; -import { SnackBarNotificationLevel, UiNotificationService } from '../../../../../core/services/notification/ui-notification-service'; @Component({ selector: 'app-user-role-editor-component', @@ -26,7 +26,7 @@ export class UserRoleEditorComponent extends BaseComponent implements OnInit { private userService: UserService, private formBuilder: FormBuilder, private enumUtils: EnumUtils, - private uiNotificationService:UiNotificationService + private uiNotificationService: UiNotificationService ) { super(); } ngOnInit() { @@ -117,12 +117,12 @@ export class UserRoleEditorComponent extends BaseComponent implements OnInit { onCallbackSuccess() { this.nowEditing = false; this.formGroup.disable(); - this.uiNotificationService.snackBarNotification( this.language.instant('GENERAL.SNACK-BAR.SUCCESSFUL-UPDATE'), SnackBarNotificationLevel.Success); + this.uiNotificationService.snackBarNotification(this.language.instant('GENERAL.SNACK-BAR.SUCCESSFUL-UPDATE'), SnackBarNotificationLevel.Success); } onCallbackError(error: any) { this.validateAllFormFields(this.formGroup); - this.uiNotificationService.snackBarNotification( this.language.instant('GENERAL.SNACK-BAR.UNSUCCESSFUL-UPDATE'), SnackBarNotificationLevel.Error); + this.uiNotificationService.snackBarNotification(this.language.instant('GENERAL.SNACK-BAR.UNSUCCESSFUL-UPDATE'), SnackBarNotificationLevel.Error); } getPrincipalAppRoleValues(): Number[] { diff --git a/dmp-frontend/src/app/ui/admin/user/user.module.ts b/dmp-frontend/src/app/ui/admin/user/user.module.ts index 18257c942..38dae797a 100644 --- a/dmp-frontend/src/app/ui/admin/user/user.module.ts +++ b/dmp-frontend/src/app/ui/admin/user/user.module.ts @@ -1,7 +1,7 @@ import { NgModule } from '@angular/core'; -import { CommonFormsModule } from '../../../common/forms/common-forms.module'; -import { CommonUiModule } from '../../../common/ui/common-ui.module'; -import { FormattingModule } from '../../../core/formatting.module'; +import { FormattingModule } from '@app/core/formatting.module'; +import { CommonFormsModule } from '@common/forms/common-forms.module'; +import { CommonUiModule } from '@common/ui/common-ui.module'; import { UserCriteriaComponent } from './listing/criteria/user-criteria.component'; import { UserRoleEditorComponent } from './listing/role-editor/user-role-editor.component'; import { UserListingComponent } from './listing/user-listing.component'; 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 ece1c430d..61c1cadf5 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 @@ -1,13 +1,12 @@ import { Component, OnInit } from '@angular/core'; import { Router } from '@angular/router'; +import { Credential } from '@app/core/model/auth/credential'; +import { AuthService } from '@app/core/services/auth/auth.service'; +import { CultureService } from '@app/core/services/culture/culture-service'; +import { SnackBarNotificationLevel, UiNotificationService } from '@app/core/services/notification/ui-notification-service'; +import { BaseComponent } from '@common/base/base.component'; import { TranslateService } from '@ngx-translate/core'; import { takeUntil } from 'rxjs/operators'; -import { BaseComponent } from '../../../core/common/base/base.component'; -import { Credential } from '../../../core/model/auth/credential'; -import { CultureService } from '../../../core/services/culture/culture-service'; -import { SnackBarNotificationLevel, UiNotificationService } from '../../../core/services/notification/ui-notification-service'; -import { AuthService } from '../../../core/services/auth/auth.service'; - @Component({ selector: 'app-admin-login', templateUrl: './admin-login.component.html', diff --git a/dmp-frontend/src/app/ui/auth/admin-login/admin-login.module.ts b/dmp-frontend/src/app/ui/auth/admin-login/admin-login.module.ts index c4c98b17d..766ca5e31 100644 --- a/dmp-frontend/src/app/ui/auth/admin-login/admin-login.module.ts +++ b/dmp-frontend/src/app/ui/auth/admin-login/admin-login.module.ts @@ -1,8 +1,8 @@ import { NgModule } from '@angular/core'; -import { CommonFormsModule } from '../../../common/forms/common-forms.module'; -import { CommonUiModule } from '../../../common/ui/common-ui.module'; -import { AdminLoginComponent } from './admin-login.component'; -import { AdminLoginRoutingModule } from './admin-login.routing'; +import { AdminLoginComponent } from '@app/ui/auth/admin-login/admin-login.component'; +import { AdminLoginRoutingModule } from '@app/ui/auth/admin-login/admin-login.routing'; +import { CommonFormsModule } from '@common/forms/common-forms.module'; +import { CommonUiModule } from '@common/ui/common-ui.module'; @NgModule({ imports: [ diff --git a/dmp-frontend/src/app/ui/auth/login/b2access/b2access-login.component.ts b/dmp-frontend/src/app/ui/auth/login/b2access/b2access-login.component.ts index a0c38b6ec..bdba62c6c 100644 --- a/dmp-frontend/src/app/ui/auth/login/b2access/b2access-login.component.ts +++ b/dmp-frontend/src/app/ui/auth/login/b2access/b2access-login.component.ts @@ -1,12 +1,12 @@ import { HttpClient, HttpHeaders } from '@angular/common/http'; import { Component, OnInit } from '@angular/core'; import { ActivatedRoute, Params } from '@angular/router'; +import { AuthProvider } from '@app/core/common/enum/auth-provider'; +import { AuthService } from '@app/core/services/auth/auth.service'; +import { LoginService } from '@app/ui/auth/login/utilities/login.service'; +import { BaseComponent } from '@common/base/base.component'; +import { environment } from 'environments/environment'; import { takeUntil } from 'rxjs/operators'; -import { environment } from '../../../../../environments/environment'; -import { BaseComponent } from '../../../../core/common/base/base.component'; -import { AuthProvider } from '../../../../core/common/enum/auth-provider'; -import { AuthService } from '../../../../core/services/auth/auth.service'; -import { LoginService } from '../utilities/login.service'; @Component({ selector: 'app-b2access-login', @@ -37,10 +37,10 @@ export class B2AccessLoginComponent extends BaseComponent implements OnInit { public b2AccessGetAuthCode() { window.location.href = environment.loginProviders.b2accessConfiguration.oauthUrl - + '?response_type=code&client_id=' + environment.loginProviders.b2accessConfiguration.clientId - + '&redirect_uri=' + environment.loginProviders.b2accessConfiguration.redirectUri - + '&state=' + environment.loginProviders.b2accessConfiguration.state - + '&scope=USER_PROFILE'; + + '?response_type=code&client_id=' + environment.loginProviders.b2accessConfiguration.clientId + + '&redirect_uri=' + environment.loginProviders.b2accessConfiguration.redirectUri + + '&state=' + environment.loginProviders.b2accessConfiguration.state + + '&scope=USER_PROFILE'; } public b2AccessLogin(code: String) { diff --git a/dmp-frontend/src/app/ui/auth/login/configurable-login/configurable-login.component.ts b/dmp-frontend/src/app/ui/auth/login/configurable-login/configurable-login.component.ts index dfeef2274..95f170f8d 100644 --- a/dmp-frontend/src/app/ui/auth/login/configurable-login/configurable-login.component.ts +++ b/dmp-frontend/src/app/ui/auth/login/configurable-login/configurable-login.component.ts @@ -1,14 +1,14 @@ -import { Component, OnInit, Input } from "@angular/core"; -import { BaseComponent } from "../../../../core/common/base/base.component"; -import { ActivatedRoute, Router, Params } from "@angular/router"; -import { HttpClient } from "@angular/common/http"; -import { LoginService } from "../utilities/login.service"; -import { AuthService } from "../../../../core/services/auth/auth.service"; -import { takeUntil } from "rxjs/operators"; -import { environment } from "../../../../../environments/environment"; -import { AuthProvider } from "../../../../core/common/enum/auth-provider"; -import { ConfigurableProvider } from "../../../../core/model/configurable-provider/configurableProvider"; -import { ConfigurableProvidersService } from "../utilities/configurableProviders.service"; +import { HttpClient } from '@angular/common/http'; +import { Component, OnInit } from "@angular/core"; +import { ActivatedRoute, Params, Router } from '@angular/router'; +import { AuthProvider } from '@app/core/common/enum/auth-provider'; +import { ConfigurableProvider } from '@app/core/model/configurable-provider/configurableProvider'; +import { AuthService } from '@app/core/services/auth/auth.service'; +import { ConfigurableProvidersService } from '@app/ui/auth/login/utilities/configurableProviders.service'; +import { LoginService } from '@app/ui/auth/login/utilities/login.service'; +import { BaseComponent } from '@common/base/base.component'; +import { environment } from 'environments/environment'; +import { takeUntil } from 'rxjs/operators'; @Component({ selector: 'app-configurable-login', diff --git a/dmp-frontend/src/app/ui/auth/login/email-confirmation/email-confirmation.component.ts b/dmp-frontend/src/app/ui/auth/login/email-confirmation/email-confirmation.component.ts index fdffc2199..fb12bf926 100644 --- a/dmp-frontend/src/app/ui/auth/login/email-confirmation/email-confirmation.component.ts +++ b/dmp-frontend/src/app/ui/auth/login/email-confirmation/email-confirmation.component.ts @@ -1,11 +1,11 @@ import { Component, OnInit } from "@angular/core"; -import { ActivatedRoute, Params, Router } from "@angular/router"; +import { FormControl } from '@angular/forms'; +import { ActivatedRoute, Router } from "@angular/router"; +import { EmailConfirmationService } from '@app/core/services/email-confirmation/email-confirmation.service'; +import { SnackBarNotificationLevel, UiNotificationService } from '@app/core/services/notification/ui-notification-service'; +import { BaseComponent } from '@common/base/base.component'; +import { TranslateService } from '@ngx-translate/core'; import { takeUntil } from "rxjs/operators"; -import { BaseComponent } from "../../../../core/common/base/base.component"; -import { EmailConfirmationService } from "../../../../core/services/email-confirmation/email-confirmation.service"; -import { UiNotificationService, SnackBarNotificationLevel } from "../../../../core/services/notification/ui-notification-service"; -import { TranslateService } from "@ngx-translate/core"; -import { FormControl } from "@angular/forms"; @Component({ selector: 'app-email-confirmation-component', @@ -35,8 +35,8 @@ export class EmailConfirmation extends BaseComponent implements OnInit { this.emailConfirmationService.emailConfirmation(token) .pipe(takeUntil(this._destroyed)) .subscribe( - result => this.onCallbackEmailConfirmationSuccess(), - error => this.onCallbackError(error) + result => this.onCallbackEmailConfirmationSuccess(), + error => this.onCallbackError(error) ) } else { this.showForm = true; @@ -48,8 +48,8 @@ export class EmailConfirmation extends BaseComponent implements OnInit { this.emailConfirmationService.sendConfirmationEmail(this.emailFormControl.value) .pipe(takeUntil(this._destroyed)) .subscribe( - result => this.onCallbackSuccess(), - error => this.onCallbackError(error) + result => this.onCallbackSuccess(), + error => this.onCallbackError(error) ) } diff --git a/dmp-frontend/src/app/ui/auth/login/linkedin-login/linkedin-login.component.ts b/dmp-frontend/src/app/ui/auth/login/linkedin-login/linkedin-login.component.ts index bf2981f99..4d6acf28e 100644 --- a/dmp-frontend/src/app/ui/auth/login/linkedin-login/linkedin-login.component.ts +++ b/dmp-frontend/src/app/ui/auth/login/linkedin-login/linkedin-login.component.ts @@ -1,12 +1,12 @@ +import { HttpClient } from "@angular/common/http"; import { Component, OnInit } from '@angular/core'; import { ActivatedRoute, Params, Router } from '@angular/router'; +import { AuthProvider } from '@app/core/common/enum/auth-provider'; +import { AuthService } from '@app/core/services/auth/auth.service'; +import { LoginService } from '@app/ui/auth/login/utilities/login.service'; +import { BaseComponent } from '@common/base/base.component'; +import { environment } from 'environments/environment'; import { takeUntil } from 'rxjs/operators'; -import { environment } from '../../../../../environments/environment'; -import { BaseComponent } from '../../../../core/common/base/base.component'; -import { AuthProvider } from '../../../../core/common/enum/auth-provider'; -import { AuthService } from '../../../../core/services/auth/auth.service'; -import { LoginService } from '../utilities/login.service'; -import { HttpClient } from "@angular/common/http"; @Component({ selector: 'app-linkedin-login', 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 8de93aac9..3f2662445 100644 --- a/dmp-frontend/src/app/ui/auth/login/login.component.ts +++ b/dmp-frontend/src/app/ui/auth/login/login.component.ts @@ -1,13 +1,14 @@ import { AfterViewInit, Component, OnInit } from '@angular/core'; import { ActivatedRoute, Params, Router } from '@angular/router'; +import { AuthProvider } from '@app/core/common/enum/auth-provider'; +import { ConfigurableProvider } from '@app/core/model/configurable-provider/configurableProvider'; +import { AuthService } from '@app/core/services/auth/auth.service'; +import { ConfigurableProvidersService } from '@app/ui/auth/login/utilities/configurableProviders.service'; +import { LoginService } from '@app/ui/auth/login/utilities/login.service'; +import { BaseComponent } from '@common/base/base.component'; +import { environment } from 'environments/environment'; import { takeUntil } from 'rxjs/operators'; -import { environment } from '../../../../environments/environment'; -import { BaseComponent } from '../../../core/common/base/base.component'; -import { AuthProvider } from '../../../core/common/enum/auth-provider'; -import { AuthService } from '../../../core/services/auth/auth.service'; -import { LoginService } from './utilities/login.service'; -import { ConfigurableProvider } from "../../../core/model/configurable-provider/configurableProvider"; -import { ConfigurableProvidersService } from "./utilities/configurableProviders.service"; + /// /// diff --git a/dmp-frontend/src/app/ui/auth/login/login.module.ts b/dmp-frontend/src/app/ui/auth/login/login.module.ts index 898fb98cb..cfa773be0 100644 --- a/dmp-frontend/src/app/ui/auth/login/login.module.ts +++ b/dmp-frontend/src/app/ui/auth/login/login.module.ts @@ -1,17 +1,17 @@ import { NgModule } from '@angular/core'; -import { CommonFormsModule } from '../../../common/forms/common-forms.module'; -import { CommonUiModule } from '../../../common/ui/common-ui.module'; -import { LinkedInLoginComponent } from './linkedin-login/linkedin-login.component'; -import { LoginComponent } from './login.component'; -import { LoginRoutingModule } from './login.routing'; -import { TwitterLoginComponent } from './twitter-login/twitter-login.component'; -import { LoginService } from './utilities/login.service'; -import { B2AccessLoginComponent } from './b2access/b2access-login.component'; -import { OrcidLoginComponent } from './orcid-login/orcid-login.component'; -import { EmailConfirmation } from './email-confirmation/email-confirmation.component'; -import { OpenAireLoginComponent } from "./openaire-login/openaire-login.component"; -import { ConfigurableLoginComponent } from "./configurable-login/configurable-login.component"; -import { ConfigurableProvidersService } from "./utilities/configurableProviders.service"; +import { B2AccessLoginComponent } from '@app/ui/auth/login/b2access/b2access-login.component'; +import { ConfigurableLoginComponent } from '@app/ui/auth/login/configurable-login/configurable-login.component'; +import { EmailConfirmation } from '@app/ui/auth/login/email-confirmation/email-confirmation.component'; +import { LinkedInLoginComponent } from '@app/ui/auth/login/linkedin-login/linkedin-login.component'; +import { LoginComponent } from '@app/ui/auth/login/login.component'; +import { LoginRoutingModule } from '@app/ui/auth/login/login.routing'; +import { OpenAireLoginComponent } from '@app/ui/auth/login/openaire-login/openaire-login.component'; +import { OrcidLoginComponent } from '@app/ui/auth/login/orcid-login/orcid-login.component'; +import { TwitterLoginComponent } from '@app/ui/auth/login/twitter-login/twitter-login.component'; +import { ConfigurableProvidersService } from '@app/ui/auth/login/utilities/configurableProviders.service'; +import { LoginService } from '@app/ui/auth/login/utilities/login.service'; +import { CommonFormsModule } from '@common/forms/common-forms.module'; +import { CommonUiModule } from '@common/ui/common-ui.module'; @NgModule({ imports: [ diff --git a/dmp-frontend/src/app/ui/auth/login/openaire-login/openaire-login.component.ts b/dmp-frontend/src/app/ui/auth/login/openaire-login/openaire-login.component.ts index 14754d688..d621cd22a 100644 --- a/dmp-frontend/src/app/ui/auth/login/openaire-login/openaire-login.component.ts +++ b/dmp-frontend/src/app/ui/auth/login/openaire-login/openaire-login.component.ts @@ -1,12 +1,12 @@ +import { HttpClient } from '@angular/common/http'; import { Component, OnInit } from "@angular/core"; -import { BaseComponent } from "../../../../core/common/base/base.component"; -import { ActivatedRoute, Router, Params } from "@angular/router"; -import { LoginService } from "../utilities/login.service"; -import { AuthService } from "../../../../core/services/auth/auth.service"; -import { HttpClient } from "@angular/common/http"; -import { takeUntil } from "rxjs/operators"; -import { environment } from "../../../../../environments/environment"; -import { AuthProvider } from "../../../../core/common/enum/auth-provider"; +import { ActivatedRoute, Params, Router } from '@angular/router'; +import { AuthProvider } from '@app/core/common/enum/auth-provider'; +import { AuthService } from '@app/core/services/auth/auth.service'; +import { LoginService } from '@app/ui/auth/login/utilities/login.service'; +import { BaseComponent } from '@common/base/base.component'; +import { environment } from 'environments/environment'; +import { takeUntil } from 'rxjs/operators'; @Component({ selector: 'app-openaire-login', diff --git a/dmp-frontend/src/app/ui/auth/login/orcid-login/orcid-login.component.ts b/dmp-frontend/src/app/ui/auth/login/orcid-login/orcid-login.component.ts index 68b0ddd89..ea7b24e93 100644 --- a/dmp-frontend/src/app/ui/auth/login/orcid-login/orcid-login.component.ts +++ b/dmp-frontend/src/app/ui/auth/login/orcid-login/orcid-login.component.ts @@ -1,14 +1,14 @@ +import { HttpClient, HttpHeaders } from '@angular/common/http'; import { Component, OnInit } from '@angular/core'; -import { BaseComponent } from '../../../../core/common/base/base.component'; -import { LoginService } from '../utilities/login.service'; -import { ActivatedRoute, Params } from '@angular/router'; -import { takeUntil } from 'rxjs/operators'; -import { environment } from '../../../../../environments/environment'; -import { AuthService } from '../../../../core/services/auth/auth.service'; -import { AuthProvider } from '../../../../core/common/enum/auth-provider'; -import { HttpHeaders, HttpClient } from '@angular/common/http'; -import { OrcidUser } from '../../../../core/model/orcid/orcidUser'; import { FormControl } from '@angular/forms'; +import { ActivatedRoute, Params } from '@angular/router'; +import { AuthProvider } from '@app/core/common/enum/auth-provider'; +import { OrcidUser } from '@app/core/model/orcid/orcidUser'; +import { AuthService } from '@app/core/services/auth/auth.service'; +import { LoginService } from '@app/ui/auth/login/utilities/login.service'; +import { BaseComponent } from '@common/base/base.component'; +import { environment } from 'environments/environment'; +import { takeUntil } from 'rxjs/operators'; @Component({ selector: 'app-orcid-login', @@ -63,8 +63,8 @@ export class OrcidLoginComponent extends BaseComponent implements OnInit { this.authService.login({ ticket: this.accessToken, provider: AuthProvider.ORCID, data: this.orcidUser }) .pipe(takeUntil(this._destroyed)) .subscribe( - res => this.loginService.onLogInSuccess(res, this.returnUrl), - error => this.loginService.onLogInError(error) + res => this.loginService.onLogInSuccess(res, this.returnUrl), + error => this.loginService.onLogInError(error) ); }); } @@ -74,8 +74,8 @@ export class OrcidLoginComponent extends BaseComponent implements OnInit { this.authService.login({ ticket: this.accessToken, provider: AuthProvider.ORCID, data: this.orcidUser }) .pipe(takeUntil(this._destroyed)) .subscribe( - res => this.loginService.onLogInSuccess(res, this.returnUrl), - error => this.loginService.onLogInError(error) + res => this.loginService.onLogInSuccess(res, this.returnUrl), + error => this.loginService.onLogInError(error) ); } } diff --git a/dmp-frontend/src/app/ui/auth/login/twitter-login/twitter-login.component.ts b/dmp-frontend/src/app/ui/auth/login/twitter-login/twitter-login.component.ts index 98304ba65..66729e3c6 100644 --- a/dmp-frontend/src/app/ui/auth/login/twitter-login/twitter-login.component.ts +++ b/dmp-frontend/src/app/ui/auth/login/twitter-login/twitter-login.component.ts @@ -1,13 +1,13 @@ import { HttpHeaders } from '@angular/common/http'; import { Component, OnInit } from '@angular/core'; import { ActivatedRoute, Params } from '@angular/router'; +import { AuthProvider } from '@app/core/common/enum/auth-provider'; +import { AuthService } from '@app/core/services/auth/auth.service'; +import { BaseHttpService } from '@app/core/services/http/base-http.service'; +import { LoginService } from '@app/ui/auth/login/utilities/login.service'; +import { BaseComponent } from '@common/base/base.component'; +import { environment } from 'environments/environment'; import { takeUntil } from 'rxjs/operators'; -import { environment } from '../../../../../environments/environment'; -import { BaseComponent } from '../../../../core/common/base/base.component'; -import { AuthService } from '../../../../core/services/auth/auth.service'; -import { BaseHttpService } from '../../../../core/services/http/base-http.service'; -import { LoginService } from '../utilities/login.service'; -import { AuthProvider } from '../../../../core/common/enum/auth-provider'; @Component({ selector: 'app-twitter-login', diff --git a/dmp-frontend/src/app/ui/auth/login/utilities/configurableProviders.service.ts b/dmp-frontend/src/app/ui/auth/login/utilities/configurableProviders.service.ts index 64ef44970..0c269b45d 100644 --- a/dmp-frontend/src/app/ui/auth/login/utilities/configurableProviders.service.ts +++ b/dmp-frontend/src/app/ui/auth/login/utilities/configurableProviders.service.ts @@ -1,6 +1,6 @@ import { Injectable } from "@angular/core"; -import { BaseService } from "../../../../core/common/base/base.service"; -import { ConfigurableProvider } from "../../../../core/model/configurable-provider/configurableProvider"; +import { BaseService } from '@common/base/base.service'; +import { ConfigurableProvider } from '@app/core/model/configurable-provider/configurableProvider'; @Injectable() export class ConfigurableProvidersService extends BaseService { diff --git a/dmp-frontend/src/app/ui/auth/login/utilities/login.service.ts b/dmp-frontend/src/app/ui/auth/login/utilities/login.service.ts index 59426a466..121f54bb1 100644 --- a/dmp-frontend/src/app/ui/auth/login/utilities/login.service.ts +++ b/dmp-frontend/src/app/ui/auth/login/utilities/login.service.ts @@ -1,10 +1,10 @@ import { Injectable, NgZone } from '@angular/core'; import { Router } from '@angular/router'; +import { AuthService } from '@app/core/services/auth/auth.service'; +import { CultureService } from '@app/core/services/culture/culture-service'; +import { SnackBarNotificationLevel, UiNotificationService } from '@app/core/services/notification/ui-notification-service'; +import { BaseService } from '@common/base/base.service'; import { TranslateService } from '@ngx-translate/core'; -import { BaseService } from '../../../../core/common/base/base.service'; -import { CultureService } from '../../../../core/services/culture/culture-service'; -import { UiNotificationService, SnackBarNotificationLevel } from '../../../../core/services/notification/ui-notification-service'; -import { AuthService } from '../../../../core/services/auth/auth.service'; @Injectable() export class LoginService extends BaseService { diff --git a/dmp-frontend/src/app/ui/contact/contact-content/contact-content.component.ts b/dmp-frontend/src/app/ui/contact/contact-content/contact-content.component.ts index b7b4dcc70..b1275e92a 100644 --- a/dmp-frontend/src/app/ui/contact/contact-content/contact-content.component.ts +++ b/dmp-frontend/src/app/ui/contact/contact-content/contact-content.component.ts @@ -1,13 +1,13 @@ -import { FormGroup, AbstractControl, FormControl, FormArray } from '@angular/forms'; -import { Component, OnInit, Input } from '@angular/core'; import { Location } from '@angular/common'; -import { takeUntil } from 'rxjs/operators'; +import { Component, Input, OnInit } from '@angular/core'; +import { AbstractControl, FormArray, FormControl, FormGroup } from '@angular/forms'; +import { ContactEmailFormModel } from '@app/core/model/contact/contact-email-form-model'; +import { ContactSupportService } from '@app/core/services/contact-support/contact-support.service'; +import { SnackBarNotificationLevel, UiNotificationService } from '@app/core/services/notification/ui-notification-service'; +import { BaseComponent } from '@common/base/base.component'; +import { ValidationErrorModel } from '@common/forms/validation/error-model/validation-error-model'; import { TranslateService } from '@ngx-translate/core'; -import { ContactEmailFormModel } from '../../../core/model/contact/contact-email-form-model'; -import { ContactSupportService } from '../../../core/services/contact-support/contact-support.service'; -import { BaseComponent } from '../../../core/common/base/base.component'; -import { UiNotificationService, SnackBarNotificationLevel } from '../../../core/services/notification/ui-notification-service'; -import { ValidationErrorModel } from '../../../common/forms/validation/error-model/validation-error-model'; +import { takeUntil } from 'rxjs/operators'; @Component({ selector: 'app-contact-content', diff --git a/dmp-frontend/src/app/ui/contact/contact.module.ts b/dmp-frontend/src/app/ui/contact/contact.module.ts index ec900601e..ce8dc2912 100644 --- a/dmp-frontend/src/app/ui/contact/contact.module.ts +++ b/dmp-frontend/src/app/ui/contact/contact.module.ts @@ -1,9 +1,9 @@ import { NgModule } from '@angular/core'; -import { CommonUiModule } from '../../common/ui/common-ui.module'; -import { ContactRoutingModule } from './contact.routing'; -import { ContactContentComponent } from './contact-content/contact-content.component'; -import { ContactDialogComponent } from './contact-dialog/contact-dialog.component'; import { ReactiveFormsModule } from '@angular/forms'; +import { ContactContentComponent } from '@app/ui/contact/contact-content/contact-content.component'; +import { ContactDialogComponent } from '@app/ui/contact/contact-dialog/contact-dialog.component'; +import { ContactRoutingModule } from '@app/ui/contact/contact.routing'; +import { CommonUiModule } from '@common/ui/common-ui.module'; @NgModule({ imports: [ diff --git a/dmp-frontend/src/app/ui/dashboard/dashboard.component.ts b/dmp-frontend/src/app/ui/dashboard/dashboard.component.ts index b8cb32450..7eafd961e 100644 --- a/dmp-frontend/src/app/ui/dashboard/dashboard.component.ts +++ b/dmp-frontend/src/app/ui/dashboard/dashboard.component.ts @@ -1,33 +1,32 @@ -import {of as observableOf, Observable } from 'rxjs'; - -import {mergeMap, takeUntil } from 'rxjs/operators'; import { Component, OnInit } from '@angular/core'; import { FormControl } from '@angular/forms'; -import { Router, ActivatedRoute, Params } from '@angular/router'; -import { BaseComponent } from '../../core/common/base/base.component'; -import { RecentActivityType } from '../../core/common/enum/recent-activity-type'; -import { DashboardStatisticsModel } from '../../core/model/dashboard/dashboard-statistics-model'; -import { SearchBarItem } from '../../core/model/dashboard/search-bar-item'; -import { GrantCriteria } from '../../core/query/grant/grant-criteria'; -import { AuthService } from '../../core/services/auth/auth.service'; -import { DashboardService } from '../../core/services/dashboard/dashboard.service'; -import { GrantService } from '../../core/services/grant/grant.service'; -import { SearchBarService } from '../../core/services/search-bar/search-bar.service'; -import { UserService } from '../../core/services/user/user.service'; -import { SingleAutoCompleteConfiguration } from '../../library/auto-complete/single/single-auto-complete-configuration'; -import { RequestItem } from '../../core/query/request-item'; -import { DmpListingModel } from '../../core/model/dmp/dmp-listing'; -import { DmpService } from '../../core/services/dmp/dmp.service'; -import { DataTableRequest } from '../../core/model/data-table/data-table-request'; -import { DmpCriteria } from '../../core/query/dmp/dmp-criteria'; -import { ExploreDmpCriteriaModel } from '../../core/query/explore-dmp/explore-dmp-criteria'; -import { DatasetListingModel } from '../../core/model/dataset/dataset-listing'; -import { DatasetService } from '../../core/services/dataset/dataset.service'; -import { ExploreDatasetCriteriaModel } from '../../core/query/explore-dataset/explore-dataset-criteria'; +import { ActivatedRoute, Router } from '@angular/router'; +import { RecentActivityType } from '@app/core/common/enum/recent-activity-type'; +import { DashboardStatisticsModel } from '@app/core/model/dashboard/dashboard-statistics-model'; +import { SearchBarItem } from '@app/core/model/dashboard/search-bar-item'; +import { DataTableRequest } from '@app/core/model/data-table/data-table-request'; +import { DatasetListingModel } from '@app/core/model/dataset/dataset-listing'; +import { DmpListingModel } from '@app/core/model/dmp/dmp-listing'; +import { ExploreDatasetCriteriaModel } from '@app/core/query/explore-dataset/explore-dataset-criteria'; +import { ExploreDmpCriteriaModel } from '@app/core/query/explore-dmp/explore-dmp-criteria'; +import { GrantCriteria } from '@app/core/query/grant/grant-criteria'; +import { RequestItem } from '@app/core/query/request-item'; +import { AuthService } from '@app/core/services/auth/auth.service'; +import { DashboardService } from '@app/core/services/dashboard/dashboard.service'; +import { DatasetService } from '@app/core/services/dataset/dataset.service'; +import { DmpService } from '@app/core/services/dmp/dmp.service'; +import { GrantService } from '@app/core/services/grant/grant.service'; +import { SearchBarService } from '@app/core/services/search-bar/search-bar.service'; +import { UserService } from '@app/core/services/user/user.service'; +import { SingleAutoCompleteConfiguration } from '@app/library/auto-complete/single/single-auto-complete-configuration'; +import { BaseComponent } from '@common/base/base.component'; +import { Observable, of as observableOf } from 'rxjs'; +import { mergeMap, takeUntil } from 'rxjs/operators'; import { BreadcrumbItem } from '../misc/breadcrumb/definition/breadcrumb-item'; import { IBreadCrumbComponent } from '../misc/breadcrumb/definition/IBreadCrumbComponent'; + @Component({ selector: 'app-dashboard', templateUrl: './dashboard.component.html', diff --git a/dmp-frontend/src/app/ui/dashboard/dashboard.module.ts b/dmp-frontend/src/app/ui/dashboard/dashboard.module.ts index 95dac0bc1..3408a76e1 100644 --- a/dmp-frontend/src/app/ui/dashboard/dashboard.module.ts +++ b/dmp-frontend/src/app/ui/dashboard/dashboard.module.ts @@ -1,25 +1,26 @@ import { NgModule } from '@angular/core'; -import { CommonUiModule } from '../../common/ui/common-ui.module'; -import { CardComponent } from './card/card.component'; -import { DashboardComponent } from './dashboard.component'; -import { DashboardRoutingModule } from './dashboard.routing'; -import { DraftsComponent } from './drafts/drafts.component'; -import { InfoCounterComponent } from './info-counter/info-counter.component'; -import { QuickWizardCreateAdd } from './quick-wizard-create-add/quick-wizard-create-add.component'; -import { RecentActivityComponent } from './recent-activity/recent-activity.component'; -import { RecentEditedActivityComponent } from './recent-edited-activity/recent-edited-activity.component'; -import { RecentVisitedActivityComponent } from './recent-visited-activity/recent-visited-activity.component'; -import { WizardComponent } from './wizard/wizard.component'; -import { DmpInfoCounterComponent } from './dmp-info-counter/dmp-info-counter.component'; -import { DatasetInfoCounterComponent } from './dataset-info-counter/dataset-info-counter.component'; -import { ExportMethodDialogModule } from '../../library/export-method-dialog/export-method-dialog.module'; - +import { ExportMethodDialogModule } from '@app/library/export-method-dialog/export-method-dialog.module'; +import { CardComponent } from '@app/ui/dashboard/card/card.component'; +import { DashboardComponent } from '@app/ui/dashboard/dashboard.component'; +import { DashboardRoutingModule } from '@app/ui/dashboard/dashboard.routing'; +import { DatasetInfoCounterComponent } from '@app/ui/dashboard/dataset-info-counter/dataset-info-counter.component'; +import { DmpInfoCounterComponent } from '@app/ui/dashboard/dmp-info-counter/dmp-info-counter.component'; +import { DraftsComponent } from '@app/ui/dashboard/drafts/drafts.component'; +import { InfoCounterComponent } from '@app/ui/dashboard/info-counter/info-counter.component'; +import { QuickWizardCreateAdd } from '@app/ui/dashboard/quick-wizard-create-add/quick-wizard-create-add.component'; +import { RecentActivityComponent } from '@app/ui/dashboard/recent-activity/recent-activity.component'; +import { RecentEditedActivityComponent } from '@app/ui/dashboard/recent-edited-activity/recent-edited-activity.component'; +import { RecentVisitedActivityComponent } from '@app/ui/dashboard/recent-visited-activity/recent-visited-activity.component'; +import { WizardComponent } from '@app/ui/dashboard/wizard/wizard.component'; +import { CommonUiModule } from '@common/ui/common-ui.module'; +import { ConfirmationDialogModule } from '@common/modules/confirmation-dialog/confirmation-dialog.module'; @NgModule({ imports: [ CommonUiModule, DashboardRoutingModule, - ExportMethodDialogModule + ExportMethodDialogModule, + ConfirmationDialogModule ], declarations: [ DashboardComponent, diff --git a/dmp-frontend/src/app/ui/dashboard/quick-wizard-create-add/quick-wizard-create-add.component.ts b/dmp-frontend/src/app/ui/dashboard/quick-wizard-create-add/quick-wizard-create-add.component.ts index b0a82ffca..d64a2de98 100644 --- a/dmp-frontend/src/app/ui/dashboard/quick-wizard-create-add/quick-wizard-create-add.component.ts +++ b/dmp-frontend/src/app/ui/dashboard/quick-wizard-create-add/quick-wizard-create-add.component.ts @@ -1,8 +1,8 @@ -import { BaseComponent } from "../../../core/common/base/base.component"; -import { OnInit, Component } from "@angular/core"; -import { Router, ActivatedRoute } from "@angular/router"; -import { TranslateService } from "@ngx-translate/core"; +import { Component, OnInit } from "@angular/core"; import { MatSnackBar } from "@angular/material/snack-bar"; +import { ActivatedRoute, Router } from "@angular/router"; +import { BaseComponent } from '@common/base/base.component'; +import { TranslateService } from "@ngx-translate/core"; @Component({ selector: 'app-quick-wizard-create-add-component', @@ -22,15 +22,15 @@ export class QuickWizardCreateAdd extends BaseComponent implements OnInit { ngOnInit(): void { - + } - navigateToCreate(){ + navigateToCreate() { this.router.navigate(["/quick-wizard"]); } - - navigateToAdd(){ + + navigateToAdd() { this.router.navigate(["/datasetcreatewizard"]); } diff --git a/dmp-frontend/src/app/ui/dashboard/recent-activity/recent-activity.component.ts b/dmp-frontend/src/app/ui/dashboard/recent-activity/recent-activity.component.ts index 31d188f9a..012acfe46 100644 --- a/dmp-frontend/src/app/ui/dashboard/recent-activity/recent-activity.component.ts +++ b/dmp-frontend/src/app/ui/dashboard/recent-activity/recent-activity.component.ts @@ -1,9 +1,9 @@ import { Component, OnInit } from '@angular/core'; import { Router } from '@angular/router'; +import { RecentActivityType } from '@app/core/common/enum/recent-activity-type'; +import { UserService } from '@app/core/services/user/user.service'; +import { BaseComponent } from '@common/base/base.component'; import { takeUntil } from 'rxjs/operators'; -import { BaseComponent } from '../../../core/common/base/base.component'; -import { RecentActivityType } from '../../../core/common/enum/recent-activity-type'; -import { UserService } from '../../../core/services/user/user.service'; @Component({ selector: 'app-recent-activity', diff --git a/dmp-frontend/src/app/ui/dashboard/recent-edited-activity/recent-edited-activity.component.ts b/dmp-frontend/src/app/ui/dashboard/recent-edited-activity/recent-edited-activity.component.ts index c1d40d0cd..6e9b89b8b 100644 --- a/dmp-frontend/src/app/ui/dashboard/recent-edited-activity/recent-edited-activity.component.ts +++ b/dmp-frontend/src/app/ui/dashboard/recent-edited-activity/recent-edited-activity.component.ts @@ -1,19 +1,18 @@ import { Component, OnInit } from '@angular/core'; -import { DmpListingModel } from '../../../core/model/dmp/dmp-listing'; -import { EnumUtils } from '../../../core/services/utilities/enum-utils.service'; -import { AuthService } from '../../../core/services/auth/auth.service'; -import { DataTableRequest } from '../../../core/model/data-table/data-table-request'; -import { DmpCriteria } from '../../../core/query/dmp/dmp-criteria'; -import { DmpService } from '../../../core/services/dmp/dmp.service'; -import { RecentActivityType } from '../../../core/common/enum/recent-activity-type'; +import { MatDialog } from '@angular/material'; import { Router } from '@angular/router'; -import { Principal } from '../../../core/model/auth/Principal'; +import { RecentActivityType } from '@app/core/common/enum/recent-activity-type'; +import { Principal } from '@app/core/model/auth/Principal'; +import { DataTableRequest } from '@app/core/model/data-table/data-table-request'; +import { DmpListingModel } from '@app/core/model/dmp/dmp-listing'; +import { DmpCriteria } from '@app/core/query/dmp/dmp-criteria'; +import { AuthService } from '@app/core/services/auth/auth.service'; +import { DmpService } from '@app/core/services/dmp/dmp.service'; +import { SnackBarNotificationLevel, UiNotificationService } from '@app/core/services/notification/ui-notification-service'; +import { EnumUtils } from '@app/core/services/utilities/enum-utils.service'; +import { ConfirmationDialogComponent } from '@common/modules/confirmation-dialog/confirmation-dialog.component'; +import { BaseComponent } from '@common/base/base.component'; import { TranslateService } from '@ngx-translate/core'; -import { ConfirmationDialogComponent } from '../../../library/confirmation-dialog/confirmation-dialog.component'; -import { MatDialog } from '@angular/material/dialog'; -import { ExportMethodDialogComponent } from '../../../library/export-method-dialog/export-method-dialog.component'; -import { BaseComponent } from '../../../core/common/base/base.component'; -import { UiNotificationService, SnackBarNotificationLevel } from '../../../core/services/notification/ui-notification-service'; import * as FileSaver from 'file-saver'; import { takeUntil } from 'rxjs/operators'; @@ -80,8 +79,8 @@ export class RecentEditedActivityComponent extends BaseComponent implements OnIn this.dmpService.delete(dmp.id) .pipe(takeUntil(this._destroyed)) .subscribe( - complete => { this.onCallbackSuccess() }, - error => this.onDeleteCallbackError(error) + complete => { this.onCallbackSuccess() }, + error => this.onDeleteCallbackError(error) ); } }); diff --git a/dmp-frontend/src/app/ui/dashboard/recent-visited-activity/recent-visited-activity.component.ts b/dmp-frontend/src/app/ui/dashboard/recent-visited-activity/recent-visited-activity.component.ts index ddae74f9e..6cb7c8111 100644 --- a/dmp-frontend/src/app/ui/dashboard/recent-visited-activity/recent-visited-activity.component.ts +++ b/dmp-frontend/src/app/ui/dashboard/recent-visited-activity/recent-visited-activity.component.ts @@ -1,15 +1,13 @@ import { Component, OnInit } from "@angular/core"; -import { RecentActivityType } from "../../../core/common/enum/recent-activity-type"; -import { BaseComponent } from "../../../core/common/base/base.component"; -import { Router } from "@angular/router"; -import { AuthService } from "../../../core/services/auth/auth.service"; -import { UserService } from "../../../core/services/user/user.service"; -import { takeUntil } from "rxjs/operators"; -import { DmpService } from "../../../core/services/dmp/dmp.service"; -import { DataTableRequest } from "../../../core/model/data-table/data-table-request"; -import { DmpCriteria } from "../../../core/query/dmp/dmp-criteria"; -import { DmpListingModel } from "../../../core/model/dmp/dmp-listing"; -import { EnumUtils } from "../../../core/services/utilities/enum-utils.service"; +import { Router } from '@angular/router'; +import { RecentActivityType } from '@app/core/common/enum/recent-activity-type'; +import { DataTableRequest } from '@app/core/model/data-table/data-table-request'; +import { DmpListingModel } from '@app/core/model/dmp/dmp-listing'; +import { DmpCriteria } from '@app/core/query/dmp/dmp-criteria'; +import { AuthService } from '@app/core/services/auth/auth.service'; +import { DmpService } from '@app/core/services/dmp/dmp.service'; +import { EnumUtils } from '@app/core/services/utilities/enum-utils.service'; +import { BaseComponent } from '@common/base/base.component'; @Component({ selector: "app-recent-visited-activity", diff --git a/dmp-frontend/src/app/ui/dataset-create-wizard/dataset-create-wizard.component.ts b/dmp-frontend/src/app/ui/dataset-create-wizard/dataset-create-wizard.component.ts index cfa7614b2..4e39559ed 100644 --- a/dmp-frontend/src/app/ui/dataset-create-wizard/dataset-create-wizard.component.ts +++ b/dmp-frontend/src/app/ui/dataset-create-wizard/dataset-create-wizard.component.ts @@ -1,22 +1,21 @@ -import { of as observableOf, Observable } from 'rxjs'; import { Component, OnInit, ViewChild } from '@angular/core'; -import { FormBuilder, FormGroup, FormArray } from '@angular/forms'; +import { FormArray, FormBuilder, FormGroup } from '@angular/forms'; import { MatDialog } from '@angular/material/dialog'; import { MatStepper } from '@angular/material/stepper'; import { Router } from '@angular/router'; -import { BaseComponent } from '../../core/common/base/base.component'; -import { QuickWizardService } from '../../core/services/quick-wizard/quick-wizard.service'; -import { DatasetCreateWizardModel } from './dataset-create-wizard.model'; -import { IBreadCrumbComponent } from '../misc/breadcrumb/definition/IBreadCrumbComponent'; -import { takeUntil } from 'rxjs/operators'; -import { BreadcrumbItem } from '../misc/breadcrumb/definition/breadcrumb-item'; -import { SnackBarNotificationLevel, UiNotificationService } from '../../core/services/notification/ui-notification-service'; +import { DatasetStatus } from '@app/core/common/enum/dataset-status'; +import { SnackBarNotificationLevel, UiNotificationService } from '@app/core/services/notification/ui-notification-service'; +import { QuickWizardService } from '@app/core/services/quick-wizard/quick-wizard.service'; +import { CheckDeactivateBaseComponent } from '@app/library/deactivate/deactivate.component'; +import { DatasetCreateWizardModel } from '@app/ui/dataset-create-wizard/dataset-create-wizard.model'; +import { BreadcrumbItem } from '@app/ui/misc/breadcrumb/definition/breadcrumb-item'; +import { IBreadCrumbComponent } from '@app/ui/misc/breadcrumb/definition/IBreadCrumbComponent'; +import { DatasetEditorWizardComponent } from '@app/ui/quick-wizard/dataset-editor/dataset-editor-wizard.component'; +import { ConfirmationDialogComponent } from '@common/modules/confirmation-dialog/confirmation-dialog.component'; import { TranslateService } from '@ngx-translate/core'; -import { DatasetEditorWizardComponent } from '../quick-wizard/dataset-editor/dataset-editor-wizard.component'; -import { DatasetStatus } from '../../core/common/enum/dataset-status'; -import { ConfirmationDialogComponent } from '../../library/confirmation-dialog/confirmation-dialog.component'; -import { CheckDeactivateBaseComponent } from '../../library/deactivate/deactivate.component'; +import { Observable, of as observableOf } from 'rxjs'; +import { takeUntil } from 'rxjs/operators'; @Component({ selector: 'dataset-create-wizard.component', diff --git a/dmp-frontend/src/app/ui/dataset-create-wizard/dataset-create-wizard.model.ts b/dmp-frontend/src/app/ui/dataset-create-wizard/dataset-create-wizard.model.ts index a0ef11de6..159489cbf 100644 --- a/dmp-frontend/src/app/ui/dataset-create-wizard/dataset-create-wizard.model.ts +++ b/dmp-frontend/src/app/ui/dataset-create-wizard/dataset-create-wizard.model.ts @@ -1,10 +1,10 @@ import { FormBuilder, FormGroup, Validators } from "@angular/forms"; -import { BackendErrorValidator } from "../../common/forms/validation/custom-validator"; -import { ValidationErrorModel } from "../../common/forms/validation/error-model/validation-error-model"; -import { ValidationContext } from "../../common/forms/validation/validation-context"; -import { DmpCreateWizardFormModel } from "../../core/model/dmp/dmp-create-wizard/dmp-create-wizard-form.model"; -import { DatasetWizardEditorModel } from "../dataset/dataset-wizard/dataset-wizard-editor.model"; -import { DatasetEditorWizardModel } from "../quick-wizard/dataset-editor/dataset-editor-wizard-model"; +import { DmpCreateWizardFormModel } from '@app/core/model/dmp/dmp-create-wizard/dmp-create-wizard-form.model'; +import { DatasetWizardEditorModel } from '@app/ui/dataset/dataset-wizard/dataset-wizard-editor.model'; +import { DatasetEditorWizardModel } from '@app/ui/quick-wizard/dataset-editor/dataset-editor-wizard-model'; +import { BackendErrorValidator } from '@common/forms/validation/custom-validator'; +import { ValidationErrorModel } from '@common/forms/validation/error-model/validation-error-model'; +import { ValidationContext } from '@common/forms/validation/validation-context'; export class DatasetCreateWizardModel { diff --git a/dmp-frontend/src/app/ui/dataset-create-wizard/dataset-create-wizard.module.ts b/dmp-frontend/src/app/ui/dataset-create-wizard/dataset-create-wizard.module.ts index 8c5d790ec..ae3a5c492 100644 --- a/dmp-frontend/src/app/ui/dataset-create-wizard/dataset-create-wizard.module.ts +++ b/dmp-frontend/src/app/ui/dataset-create-wizard/dataset-create-wizard.module.ts @@ -1,18 +1,17 @@ import { NgModule } from '@angular/core'; -import { CommonFormsModule } from '../../common/forms/common-forms.module'; -import { CommonUiModule } from '../../common/ui/common-ui.module'; -import { FormattingModule } from '../../core/formatting.module'; -import { AutoCompleteModule } from '../../library/auto-complete/auto-complete.module'; -import { ConfirmationDialogModule } from '../../library/confirmation-dialog/confirmation-dialog.module'; -import { UrlListingModule } from '../../library/url-listing/url-listing.module'; -import { DatasetDescriptionFormModule } from '../misc/dataset-description-form/dataset-description-form.module'; -import { OuickWizardModule } from '../quick-wizard/quick-wizard.module'; -import { DatasetCreateWizard } from './dataset-create-wizard.component'; -import { DatasetCreateWizardRoutingModule } from './dataset-create-wizard.routing'; -import { DatasetDmpSelector } from './dmp-selector/dataset-dmp-selector.component'; -import { QuickWizardRoutingModule } from '../quick-wizard/quick-wizard.routing'; -import { CanDeactivateGuard } from '../../library/deactivate/can-deactivate.guard'; - +import { FormattingModule } from '@app/core/formatting.module'; +import { AutoCompleteModule } from '@app/library/auto-complete/auto-complete.module'; +import { ConfirmationDialogModule } from '@common/modules/confirmation-dialog/confirmation-dialog.module'; +import { CanDeactivateGuard } from '@app/library/deactivate/can-deactivate.guard'; +import { UrlListingModule } from '@app/library/url-listing/url-listing.module'; +import { DatasetCreateWizard } from '@app/ui/dataset-create-wizard/dataset-create-wizard.component'; +import { DatasetCreateWizardRoutingModule } from '@app/ui/dataset-create-wizard/dataset-create-wizard.routing'; +import { DatasetDmpSelector } from '@app/ui/dataset-create-wizard/dmp-selector/dataset-dmp-selector.component'; +import { DatasetDescriptionFormModule } from '@app/ui/misc/dataset-description-form/dataset-description-form.module'; +import { OuickWizardModule } from '@app/ui/quick-wizard/quick-wizard.module'; +import { QuickWizardRoutingModule } from '@app/ui/quick-wizard/quick-wizard.routing'; +import { CommonFormsModule } from '@common/forms/common-forms.module'; +import { CommonUiModule } from '@common/ui/common-ui.module'; @NgModule({ imports: [ diff --git a/dmp-frontend/src/app/ui/dataset-create-wizard/dmp-selector/dataset-dmp-selector.component.ts b/dmp-frontend/src/app/ui/dataset-create-wizard/dmp-selector/dataset-dmp-selector.component.ts index 5cd431fe7..21105181b 100644 --- a/dmp-frontend/src/app/ui/dataset-create-wizard/dmp-selector/dataset-dmp-selector.component.ts +++ b/dmp-frontend/src/app/ui/dataset-create-wizard/dmp-selector/dataset-dmp-selector.component.ts @@ -3,21 +3,21 @@ import { Component, Input, OnInit } from '@angular/core'; import { FormArray, FormControl, FormGroup } from '@angular/forms'; import { MatStepper } from '@angular/material/stepper'; import { ActivatedRoute, Router } from '@angular/router'; +import { DmpStatus } from '@app/core/common/enum/dmp-status'; +import { DataTableRequest } from '@app/core/model/data-table/data-table-request'; +import { DatasetProfileModel } from '@app/core/model/dataset/dataset-profile'; +import { DmpListingModel } from '@app/core/model/dmp/dmp-listing'; +import { DatasetProfileCriteria } from '@app/core/query/dataset-profile/dataset-profile-criteria'; +import { DmpCriteria } from '@app/core/query/dmp/dmp-criteria'; +import { RequestItem } from '@app/core/query/request-item'; +import { DatasetWizardService } from '@app/core/services/dataset-wizard/dataset-wizard.service'; +import { DmpService } from '@app/core/services/dmp/dmp.service'; +import { SingleAutoCompleteConfiguration } from '@app/library/auto-complete/single/single-auto-complete-configuration'; +import { BreadcrumbItem } from '@app/ui/misc/breadcrumb/definition/breadcrumb-item'; +import { IBreadCrumbComponent } from '@app/ui/misc/breadcrumb/definition/IBreadCrumbComponent'; +import { BaseComponent } from '@common/base/base.component'; import { Observable } from 'rxjs'; import { map, takeUntil } from 'rxjs/operators'; -import { BaseComponent } from '../../../core/common/base/base.component'; -import { DmpStatus } from '../../../core/common/enum/dmp-status'; -import { DataTableRequest } from '../../../core/model/data-table/data-table-request'; -import { DatasetProfileModel } from '../../../core/model/dataset/dataset-profile'; -import { DmpListingModel } from '../../../core/model/dmp/dmp-listing'; -import { DatasetProfileCriteria } from '../../../core/query/dataset-profile/dataset-profile-criteria'; -import { DmpCriteria } from '../../../core/query/dmp/dmp-criteria'; -import { RequestItem } from '../../../core/query/request-item'; -import { DatasetWizardService } from '../../../core/services/dataset-wizard/dataset-wizard.service'; -import { DmpService } from '../../../core/services/dmp/dmp.service'; -import { SingleAutoCompleteConfiguration } from '../../../library/auto-complete/single/single-auto-complete-configuration'; -import { BreadcrumbItem } from '../../misc/breadcrumb/definition/breadcrumb-item'; -import { IBreadCrumbComponent } from '../../misc/breadcrumb/definition/IBreadCrumbComponent'; @Component({ selector: 'dataset-dmp-selector-component', diff --git a/dmp-frontend/src/app/ui/dataset/dataset-wizard/dataset-copy-dialogue/dataset-copy-dialogue.component.ts b/dmp-frontend/src/app/ui/dataset/dataset-wizard/dataset-copy-dialogue/dataset-copy-dialogue.component.ts index 93b237741..3f729cc18 100644 --- a/dmp-frontend/src/app/ui/dataset/dataset-wizard/dataset-copy-dialogue/dataset-copy-dialogue.component.ts +++ b/dmp-frontend/src/app/ui/dataset/dataset-wizard/dataset-copy-dialogue/dataset-copy-dialogue.component.ts @@ -1,5 +1,5 @@ -import {map} from 'rxjs/operators'; +import { map, filter } from 'rxjs/operators'; import { Component } from "@angular/core"; import { MatDialogRef, MAT_DIALOG_DATA } from "@angular/material/dialog"; import { SingleAutoCompleteConfiguration } from "../../../../library/auto-complete/single/single-auto-complete-configuration"; @@ -37,8 +37,6 @@ export class DatasetCopyDialogueComponent { initialItems: (extraData) => this.searchDmp(''), displayFn: (item) => item['label'], titleFn: (item) => item['label'], - disableOption: (item) => !this.existsDatasetDescriptionTemplate(item['associatedProfiles']), - subtitleFn: (item) => !this.existsDatasetDescriptionTemplate(item['associatedProfiles']) ? this.getErrorMessage() : null }; } @@ -52,7 +50,7 @@ export class DatasetCopyDialogueComponent { this.dialogRef.close(this.data); } else if (!this.data.datasetProfileExist) { - this.data.formControl.setErrors({'incorrect': true}); + this.data.formControl.setErrors({ 'incorrect': true }); } }); } @@ -63,7 +61,7 @@ export class DatasetCopyDialogueComponent { const dmpDataTableRequest: DataTableRequest = new DataTableRequest(0, null, { fields: fields }); dmpDataTableRequest.criteria = new DmpCriteria(); dmpDataTableRequest.criteria.like = query; - return this.dmpService.getPaged(dmpDataTableRequest, "autocomplete").pipe(map(x => x.data)); + return this.dmpService.getPaged(dmpDataTableRequest, "autocomplete").pipe(map(x => x.data), map(x => x.filter(y => this.existsDatasetDescriptionTemplate(y.associatedProfiles)))); } existsDatasetDescriptionTemplate(associatedProfiles: DmpAssociatedProfileModel[]): boolean { @@ -79,7 +77,7 @@ export class DatasetCopyDialogueComponent { this.data.datasetProfileExist = true; } }) - }),); + })); } getErrorMessage() { diff --git a/dmp-frontend/src/app/ui/dataset/dataset-wizard/dataset-editor/dataset-editor.component.ts b/dmp-frontend/src/app/ui/dataset/dataset-wizard/dataset-editor/dataset-editor.component.ts index fbe61f231..d2cad6024 100644 --- a/dmp-frontend/src/app/ui/dataset/dataset-wizard/dataset-editor/dataset-editor.component.ts +++ b/dmp-frontend/src/app/ui/dataset/dataset-wizard/dataset-editor/dataset-editor.component.ts @@ -1,7 +1,7 @@ import { Component, Input } from '@angular/core'; import { FormGroup } from '@angular/forms'; import { Router } from '@angular/router'; -import { BaseComponent } from '../../../../core/common/base/base.component'; +import { BaseComponent } from '@common/base/base.component'; @Component({ selector: 'app-dataset-editor-component', 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 ebce512d8..052d4e68f 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 @@ -1,17 +1,17 @@ import { FormBuilder, FormGroup, Validators } from "@angular/forms"; -import { BackendErrorValidator } from "../../../common/forms/validation/custom-validator"; -import { ValidationErrorModel } from "../../../common/forms/validation/error-model/validation-error-model"; -import { ValidationContext } from "../../../common/forms/validation/validation-context"; -import { ExternalDatasetType } from "../../../core/common/enum/external-dataset-type"; -import { DataRepositoryModel } from "../../../core/model/data-repository/data-repository"; -import { DatasetProfileModel } from "../../../core/model/dataset/dataset-profile"; -import { DatasetWizardModel } from "../../../core/model/dataset/dataset-wizard"; -import { DmpModel } from "../../../core/model/dmp/dmp"; -import { ExternalDatasetModel } from "../../../core/model/external-dataset/external-dataset"; -import { RegistryModel } from "../../../core/model/registry/registry"; -import { ServiceModel } from "../../../core/model/service/service"; -import { TagModel } from "../../../core/model/tag/tag"; -import { DatasetDescriptionFormEditorModel } from "../../misc/dataset-description-form/dataset-description-form.model"; +import { ExternalDatasetType } from '@app/core/common/enum/external-dataset-type'; +import { DataRepositoryModel } from '@app/core/model/data-repository/data-repository'; +import { DatasetProfileModel } from '@app/core/model/dataset/dataset-profile'; +import { DatasetWizardModel } from '@app/core/model/dataset/dataset-wizard'; +import { DmpModel } from '@app/core/model/dmp/dmp'; +import { ExternalDatasetModel } from '@app/core/model/external-dataset/external-dataset'; +import { RegistryModel } from '@app/core/model/registry/registry'; +import { ServiceModel } from '@app/core/model/service/service'; +import { TagModel } from '@app/core/model/tag/tag'; +import { DatasetDescriptionFormEditorModel } from '@app/ui/misc/dataset-description-form/dataset-description-form.model'; +import { BackendErrorValidator } from '@common/forms/validation/custom-validator'; +import { ValidationErrorModel } from '@common/forms/validation/error-model/validation-error-model'; +import { ValidationContext } from '@common/forms/validation/validation-context'; export class DatasetWizardEditorModel { public id: string; 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 c938fceee..dd9bed9a2 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 @@ -1,37 +1,36 @@ -import { Component, OnInit, ViewChild } from '@angular/core'; +import { Component, OnInit } from '@angular/core'; import { FormControl, FormGroup } from '@angular/forms'; import { MatDialog } from '@angular/material/dialog'; import { MatSnackBar } from '@angular/material/snack-bar'; -import { MatStepper } from '@angular/material/stepper'; import { ActivatedRoute, Router } from '@angular/router'; +import { DatasetStatus } from '@app/core/common/enum/dataset-status'; +import { DmpStatus } from '@app/core/common/enum/dmp-status'; +import { DataTableRequest } from '@app/core/model/data-table/data-table-request'; +import { DatasetProfileModel } from '@app/core/model/dataset/dataset-profile'; +import { DmpModel } from '@app/core/model/dmp/dmp'; +import { DmpListingModel } from '@app/core/model/dmp/dmp-listing'; +import { DatasetProfileCriteria } from '@app/core/query/dataset-profile/dataset-profile-criteria'; +import { DmpCriteria } from '@app/core/query/dmp/dmp-criteria'; +import { RequestItem } from '@app/core/query/request-item'; +import { DatasetWizardService } from '@app/core/services/dataset-wizard/dataset-wizard.service'; +import { DmpService } from '@app/core/services/dmp/dmp.service'; +import { ExternalSourcesConfigurationService } from '@app/core/services/external-sources/external-sources-configuration.service'; +import { ExternalSourcesService } from '@app/core/services/external-sources/external-sources.service'; +import { SnackBarNotificationLevel, UiNotificationService } from '@app/core/services/notification/ui-notification-service'; +import { SingleAutoCompleteConfiguration } from '@app/library/auto-complete/single/single-auto-complete-configuration'; +import { ConfirmationDialogComponent } from '@common/modules/confirmation-dialog/confirmation-dialog.component'; +import { DatasetCopyDialogueComponent } from '@app/ui/dataset/dataset-wizard/dataset-copy-dialogue/dataset-copy-dialogue.component'; +import { DatasetWizardEditorModel } from '@app/ui/dataset/dataset-wizard/dataset-wizard-editor.model'; +import { BreadcrumbItem } from '@app/ui/misc/breadcrumb/definition/breadcrumb-item'; +import { IBreadCrumbComponent } from '@app/ui/misc/breadcrumb/definition/IBreadCrumbComponent'; +import { DatasetDescriptionFormEditorModel } from '@app/ui/misc/dataset-description-form/dataset-description-form.model'; +import { LinkToScroll } from '@app/ui/misc/dataset-description-form/tableOfContentsMaterial/table-of-contents'; +import { BaseComponent } from '@common/base/base.component'; +import { ValidationErrorModel } from '@common/forms/validation/error-model/validation-error-model'; import { TranslateService } from '@ngx-translate/core'; import * as FileSaver from 'file-saver'; import { Observable, of as observableOf } from 'rxjs'; import { catchError, map, takeUntil } from 'rxjs/operators'; -import { ValidationErrorModel } from '../../../common/forms/validation/error-model/validation-error-model'; -import { BaseComponent } from '../../../core/common/base/base.component'; -import { DatasetStatus } from '../../../core/common/enum/dataset-status'; -import { DmpStatus } from '../../../core/common/enum/dmp-status'; -import { DataTableRequest } from '../../../core/model/data-table/data-table-request'; -import { DatasetProfileModel } from '../../../core/model/dataset/dataset-profile'; -import { DmpModel } from '../../../core/model/dmp/dmp'; -import { DmpListingModel } from '../../../core/model/dmp/dmp-listing'; -import { DatasetProfileCriteria } from '../../../core/query/dataset-profile/dataset-profile-criteria'; -import { DmpCriteria } from '../../../core/query/dmp/dmp-criteria'; -import { RequestItem } from '../../../core/query/request-item'; -import { DatasetWizardService } from '../../../core/services/dataset-wizard/dataset-wizard.service'; -import { DmpService } from '../../../core/services/dmp/dmp.service'; -import { ExternalSourcesConfigurationService } from '../../../core/services/external-sources/external-sources-configuration.service'; -import { ExternalSourcesService } from '../../../core/services/external-sources/external-sources.service'; -import { SnackBarNotificationLevel, UiNotificationService } from '../../../core/services/notification/ui-notification-service'; -import { SingleAutoCompleteConfiguration } from '../../../library/auto-complete/single/single-auto-complete-configuration'; -import { ConfirmationDialogComponent } from '../../../library/confirmation-dialog/confirmation-dialog.component'; -import { BreadcrumbItem } from '../../misc/breadcrumb/definition/breadcrumb-item'; -import { IBreadCrumbComponent } from '../../misc/breadcrumb/definition/IBreadCrumbComponent'; -import { DatasetDescriptionFormEditorModel } from '../../misc/dataset-description-form/dataset-description-form.model'; -import { LinkToScroll } from '../../misc/dataset-description-form/tableOfContentsMaterial/table-of-contents'; -import { DatasetCopyDialogueComponent } from './dataset-copy-dialogue/dataset-copy-dialogue.component'; -import { DatasetWizardEditorModel } from './dataset-wizard-editor.model'; @Component({ selector: 'app-dataset-wizard-component', @@ -397,7 +396,7 @@ export class DatasetWizardComponent extends BaseComponent implements OnInit, IBr public isSemiFormValid(formGroup: FormGroup): boolean { var isValid: boolean = true; Object.keys(formGroup.controls).forEach(controlName => { - if (controlName != 'datasetProfileDefinition' && !formGroup.get(controlName).disabled && !(formGroup.get(controlName).valid)) { + if (controlName != 'datasetProfileDefinition' && !formGroup.get(controlName).disabled && !(formGroup.get(controlName).valid)) { isValid = false; } }); diff --git a/dmp-frontend/src/app/ui/dataset/dataset-wizard/external-references/dataset-external-references-editor.component.ts b/dmp-frontend/src/app/ui/dataset/dataset-wizard/external-references/dataset-external-references-editor.component.ts index 6b3ba5f13..57a63660e 100644 --- a/dmp-frontend/src/app/ui/dataset/dataset-wizard/external-references/dataset-external-references-editor.component.ts +++ b/dmp-frontend/src/app/ui/dataset/dataset-wizard/external-references/dataset-external-references-editor.component.ts @@ -2,26 +2,26 @@ import { Component, Input, OnInit } from '@angular/core'; import { FormArray, FormGroup } from '@angular/forms'; import { MatDialog } from '@angular/material/dialog'; import { Router } from '@angular/router'; +import { ExternalSourceItemModel } from '@app/core/model/external-sources/external-source-item'; +import { ExternalSourcesConfiguration } from '@app/core/model/external-sources/external-sources-configuration'; +import { DataRepositoryCriteria } from '@app/core/query/data-repository/data-repository-criteria'; +import { ExternalDatasetCriteria } from '@app/core/query/external-dataset/external-dataset-criteria'; +import { RegistryCriteria } from '@app/core/query/registry/registry-criteria'; +import { RequestItem } from '@app/core/query/request-item'; +import { ServiceCriteria } from '@app/core/query/service/service-criteria'; +import { TagCriteria } from '@app/core/query/tag/tag-criteria'; +import { ExternalSourcesConfigurationService } from '@app/core/services/external-sources/external-sources-configuration.service'; +import { ExternalSourcesService } from '@app/core/services/external-sources/external-sources.service'; +import { SingleAutoCompleteConfiguration } from '@app/library/auto-complete/single/single-auto-complete-configuration'; +import { ExternalDataRepositoryEditorModel, ExternalDatasetEditorModel, ExternalRegistryEditorModel, ExternalServiceEditorModel, ExternalTagEditorModel } from '@app/ui/dataset/dataset-wizard/dataset-wizard-editor.model'; +import { DatasetExternalDataRepositoryDialogEditorComponent } from '@app/ui/dataset/dataset-wizard/external-references/editors/data-repository/dataset-external-data-repository-dialog-editor.component'; +import { DatasetExternalDatasetDialogEditorComponent } from '@app/ui/dataset/dataset-wizard/external-references/editors/external-dataset/dataset-external-dataset-dialog-editor.component'; +import { DatasetExternalRegistryDialogEditorComponent } from '@app/ui/dataset/dataset-wizard/external-references/editors/registry/dataset-external-registry-dialog-editor.component'; +import { DatasetExternalServiceDialogEditorComponent } from '@app/ui/dataset/dataset-wizard/external-references/editors/service/dataset-external-service-dialog-editor.component'; +import { BaseComponent } from '@common/base/base.component'; +import { TranslateService } from '@ngx-translate/core'; import { Observable } from 'rxjs'; import { takeUntil } from 'rxjs/operators'; -import { BaseComponent } from '../../../../core/common/base/base.component'; -import { ExternalSourceItemModel } from '../../../../core/model/external-sources/external-source-item'; -import { ExternalSourcesConfiguration } from '../../../../core/model/external-sources/external-sources-configuration'; -import { DataRepositoryCriteria } from '../../../../core/query/data-repository/data-repository-criteria'; -import { ExternalDatasetCriteria } from '../../../../core/query/external-dataset/external-dataset-criteria'; -import { RegistryCriteria } from '../../../../core/query/registry/registry-criteria'; -import { ServiceCriteria } from '../../../../core/query/service/service-criteria'; -import { TagCriteria } from '../../../../core/query/tag/tag-criteria'; -import { ExternalSourcesConfigurationService } from '../../../../core/services/external-sources/external-sources-configuration.service'; -import { ExternalSourcesService } from '../../../../core/services/external-sources/external-sources.service'; -import { SingleAutoCompleteConfiguration } from '../../../../library/auto-complete/single/single-auto-complete-configuration'; -import { RequestItem } from '../../../../core/query/request-item'; -import { ExternalDataRepositoryEditorModel, ExternalDatasetEditorModel, ExternalRegistryEditorModel, ExternalServiceEditorModel, ExternalTagEditorModel } from '../dataset-wizard-editor.model'; -import { DatasetExternalDataRepositoryDialogEditorComponent } from './editors/data-repository/dataset-external-data-repository-dialog-editor.component'; -import { DatasetExternalDatasetDialogEditorComponent } from './editors/external-dataset/dataset-external-dataset-dialog-editor.component'; -import { DatasetExternalRegistryDialogEditorComponent } from './editors/registry/dataset-external-registry-dialog-editor.component'; -import { DatasetExternalServiceDialogEditorComponent } from './editors/service/dataset-external-service-dialog-editor.component'; -import { TranslateService } from '@ngx-translate/core'; @Component({ selector: 'app-dataset-external-references-editor-component', @@ -33,11 +33,45 @@ export class DatasetExternalReferencesEditorComponent extends BaseComponent impl @Input() formGroup: FormGroup = null; @Input() viewOnly = false; - externalDatasetAutoCompleteConfiguration: SingleAutoCompleteConfiguration; - registriesAutoCompleteConfiguration: SingleAutoCompleteConfiguration; - dataRepositoriesAutoCompleteConfiguration: SingleAutoCompleteConfiguration; - servicesAutoCompleteConfiguration: SingleAutoCompleteConfiguration; - tagsAutoCompleteConfiguration: SingleAutoCompleteConfiguration; + externalDatasetAutoCompleteConfiguration: SingleAutoCompleteConfiguration = { + filterFn: this.searchDatasetExternalDatasets.bind(this), + initialItems: (type) => this.searchDatasetExternalDatasets('', type),//.filter(resultItem => (excludedItems || []).map(x => x.id).indexOf(resultItem.id) === -1), + displayFn: (item) => item ? item.name : null, + titleFn: (item) => item ? item.name : null, + subtitleFn: (item) => item.source ? this.language.instant('TYPES.EXTERNAL-DATASET-TYPE.SOURCE:') + item.source : this.language.instant('TYPES.EXTERNAL-DATASET-TYPE.NO-SOURCE') + }; + + registriesAutoCompleteConfiguration: SingleAutoCompleteConfiguration = { + filterFn: this.searchDatasetExternalRegistries.bind(this), + initialItems: (type) => this.searchDatasetExternalRegistries('', type), + displayFn: (item) => item ? item.name : null, + titleFn: (item) => item ? item.name : null, + subtitleFn: (item) => item.source ? this.language.instant('TYPES.EXTERNAL-DATASET-TYPE.SOURCE:') + item.source : this.language.instant('TYPES.EXTERNAL-DATASET-TYPE.NO-SOURCE') + }; + + dataRepositoriesAutoCompleteConfiguration: SingleAutoCompleteConfiguration = { + filterFn: this.searchDatasetExternalDataRepositories.bind(this), + initialItems: (type) => this.searchDatasetExternalDataRepositories('', type), + displayFn: (item) => item ? item.name : null, + titleFn: (item) => item ? item.name : null, + subtitleFn: (item) => item.source ? this.language.instant('TYPES.EXTERNAL-DATASET-TYPE.SOURCE:') + item.source : this.language.instant('TYPES.EXTERNAL-DATASET-TYPE.NO-SOURCE') + }; + + servicesAutoCompleteConfiguration: SingleAutoCompleteConfiguration = { + filterFn: this.searchDatasetExternalServices.bind(this), + initialItems: (type) => this.searchDatasetExternalServices('', type), + displayFn: (item) => item ? item.label : null, + titleFn: (item) => item ? item.label : null, + subtitleFn: (item) => item.source ? this.language.instant('TYPES.EXTERNAL-DATASET-TYPE.SOURCE:') + item.source : this.language.instant('TYPES.EXTERNAL-DATASET-TYPE.NO-SOURCE') + }; + + tagsAutoCompleteConfiguration: SingleAutoCompleteConfiguration = { + filterFn: this.searchDatasetTags.bind(this), + initialItems: (type) => this.searchDatasetTags('', type), + displayFn: (item) => item ? item.name : null, + titleFn: (item) => item ? item.name : null, + subtitleFn: (item) => item.tag ? this.language.instant('TYPES.EXTERNAL-DATASET-TYPE.SOURCE:') + item.tag : this.language.instant('TYPES.EXTERNAL-DATASET-TYPE.NO-SOURCE') + }; externalSourcesConfiguration: ExternalSourcesConfiguration; @@ -63,51 +97,6 @@ export class DatasetExternalReferencesEditorComponent extends BaseComponent impl this.externalSourcesConfiguration.services.push({ key: '', label: 'All' }); this.externalSourcesConfiguration.tags.push({ key: '', label: 'All' }); }); - - this.dataRepositoriesAutoCompleteConfiguration = { - filterFn: this.searchDatasetExternalDataRepositories.bind(this), - removeAfterSelection: true, - initialItems: (type) => this.searchDatasetExternalDataRepositories('', type), - displayFn: (item) => item ? item.name : null, - titleFn: (item) => item ? item.name : null, - subtitleFn: (item) => item.source ? this.language.instant('TYPES.EXTERNAL-DATASET-TYPE.SOURCE:') + item.source : this.language.instant('TYPES.EXTERNAL-DATASET-TYPE.NO-SOURCE') - }; - - this.externalDatasetAutoCompleteConfiguration = { - filterFn: this.searchDatasetExternalDatasets.bind(this), - removeAfterSelection: true, - initialItems: (type) => this.searchDatasetExternalDatasets('', type),//.filter(resultItem => excludedItems.map(x => x.id).indexOf(resultItem.id) === -1), - displayFn: (item) => item ? item.name : null, - titleFn: (item) => item ? item.name : null, - subtitleFn: (item) => item.source ? this.language.instant('TYPES.EXTERNAL-DATASET-TYPE.SOURCE:') + item.source : this.language.instant('TYPES.EXTERNAL-DATASET-TYPE.NO-SOURCE') - }; - - this.registriesAutoCompleteConfiguration = { - filterFn: this.searchDatasetExternalRegistries.bind(this), - removeAfterSelection: true, - initialItems: (type) => this.searchDatasetExternalRegistries('', type), - displayFn: (item) => item ? item.name : null, - titleFn: (item) => item ? item.name : null, - subtitleFn: (item) => item.source ? this.language.instant('TYPES.EXTERNAL-DATASET-TYPE.SOURCE:') + item.source : this.language.instant('TYPES.EXTERNAL-DATASET-TYPE.NO-SOURCE') - }; - - this.servicesAutoCompleteConfiguration = { - filterFn: this.searchDatasetExternalServices.bind(this), - removeAfterSelection: true, - initialItems: (type) => this.searchDatasetExternalServices('', type), - displayFn: (item) => item ? item.label : null, - titleFn: (item) => item ? item.label : null, - subtitleFn: (item) => item.source ? this.language.instant('TYPES.EXTERNAL-DATASET-TYPE.SOURCE:') + item.source : this.language.instant('TYPES.EXTERNAL-DATASET-TYPE.NO-SOURCE') - }; - - this.tagsAutoCompleteConfiguration = { - filterFn: this.searchDatasetTags.bind(this), - removeAfterSelection: true, - initialItems: (type) => this.searchDatasetTags('', type), - displayFn: (item) => item ? item.name : null, - titleFn: (item) => item ? item.name : null, - subtitleFn: (item) => item.tag ? this.language.instant('TYPES.EXTERNAL-DATASET-TYPE.SOURCE:') + item.tag : this.language.instant('TYPES.EXTERNAL-DATASET-TYPE.NO-SOURCE') - }; } public cancel(): void { diff --git a/dmp-frontend/src/app/ui/dataset/dataset-wizard/external-references/editors/data-repository/dataset-external-data-repository-dialog-editor.component.ts b/dmp-frontend/src/app/ui/dataset/dataset-wizard/external-references/editors/data-repository/dataset-external-data-repository-dialog-editor.component.ts index 7215a1d49..f162b0c9c 100644 --- a/dmp-frontend/src/app/ui/dataset/dataset-wizard/external-references/editors/data-repository/dataset-external-data-repository-dialog-editor.component.ts +++ b/dmp-frontend/src/app/ui/dataset/dataset-wizard/external-references/editors/data-repository/dataset-external-data-repository-dialog-editor.component.ts @@ -1,10 +1,10 @@ import { Component, Inject, OnInit } from '@angular/core'; import { FormGroup } from '@angular/forms'; import { MatDialogRef, MAT_DIALOG_DATA } from '@angular/material/dialog'; +import { ExternalDataRepositoryService } from '@app/core/services/external-sources/data-repository/extternal-data-repository.service'; +import { ExternalDataRepositoryEditorModel } from '@app/ui/dataset/dataset-wizard/dataset-wizard-editor.model'; +import { BaseComponent } from '@common/base/base.component'; import { takeUntil } from 'rxjs/operators'; -import { BaseComponent } from '../../../../../../core/common/base/base.component'; -import { ExternalDataRepositoryService } from '../../../../../../core/services/external-sources/data-repository/extternal-data-repository.service'; -import { ExternalDataRepositoryEditorModel } from '../../../dataset-wizard-editor.model'; @Component({ templateUrl: 'dataset-external-data-repository-dialog-editor.component.html', diff --git a/dmp-frontend/src/app/ui/dataset/dataset-wizard/external-references/editors/external-dataset/dataset-external-dataset-dialog-editor.component.ts b/dmp-frontend/src/app/ui/dataset/dataset-wizard/external-references/editors/external-dataset/dataset-external-dataset-dialog-editor.component.ts index 88914f5f2..27fd2d062 100644 --- a/dmp-frontend/src/app/ui/dataset/dataset-wizard/external-references/editors/external-dataset/dataset-external-dataset-dialog-editor.component.ts +++ b/dmp-frontend/src/app/ui/dataset/dataset-wizard/external-references/editors/external-dataset/dataset-external-dataset-dialog-editor.component.ts @@ -1,10 +1,10 @@ import { Component, Inject, OnInit } from '@angular/core'; import { FormGroup } from '@angular/forms'; import { MatDialogRef, MAT_DIALOG_DATA } from '@angular/material/dialog'; +import { ExternalDatasetService } from '@app/core/services/external-sources/dataset/external-dataset.service'; +import { ExternalDatasetEditorModel } from '@app/ui/dataset/dataset-wizard/dataset-wizard-editor.model'; +import { BaseComponent } from '@common/base/base.component'; import { takeUntil } from 'rxjs/operators'; -import { BaseComponent } from '../../../../../../core/common/base/base.component'; -import { ExternalDatasetService } from '../../../../../../core/services/external-sources/dataset/external-dataset.service'; -import { ExternalDatasetEditorModel } from '../../../dataset-wizard-editor.model'; @Component({ templateUrl: 'dataset-external-dataset-dialog-editor.component.html', diff --git a/dmp-frontend/src/app/ui/dataset/dataset-wizard/external-references/editors/registry/dataset-external-registry-dialog-editor.component.ts b/dmp-frontend/src/app/ui/dataset/dataset-wizard/external-references/editors/registry/dataset-external-registry-dialog-editor.component.ts index 96e538083..bad2db7e6 100644 --- a/dmp-frontend/src/app/ui/dataset/dataset-wizard/external-references/editors/registry/dataset-external-registry-dialog-editor.component.ts +++ b/dmp-frontend/src/app/ui/dataset/dataset-wizard/external-references/editors/registry/dataset-external-registry-dialog-editor.component.ts @@ -1,10 +1,10 @@ import { Component, Inject, OnInit } from '@angular/core'; import { FormGroup } from '@angular/forms'; import { MatDialogRef, MAT_DIALOG_DATA } from '@angular/material/dialog'; +import { ExternalRegistryService } from '@app/core/services/external-sources/registry/external-registry.service'; +import { ExternalRegistryEditorModel } from '@app/ui/dataset/dataset-wizard/dataset-wizard-editor.model'; +import { BaseComponent } from '@common/base/base.component'; import { takeUntil } from 'rxjs/operators'; -import { BaseComponent } from '../../../../../../core/common/base/base.component'; -import { ExternalRegistryService } from '../../../../../../core/services/external-sources/registry/external-registry.service'; -import { ExternalRegistryEditorModel } from '../../../dataset-wizard-editor.model'; @Component({ templateUrl: 'dataset-external-registry-dialog-editor.component.html', diff --git a/dmp-frontend/src/app/ui/dataset/dataset-wizard/external-references/editors/service/dataset-external-service-dialog-editor.component.ts b/dmp-frontend/src/app/ui/dataset/dataset-wizard/external-references/editors/service/dataset-external-service-dialog-editor.component.ts index f97c8b685..a2b4a9dfe 100644 --- a/dmp-frontend/src/app/ui/dataset/dataset-wizard/external-references/editors/service/dataset-external-service-dialog-editor.component.ts +++ b/dmp-frontend/src/app/ui/dataset/dataset-wizard/external-references/editors/service/dataset-external-service-dialog-editor.component.ts @@ -1,10 +1,10 @@ import { Component, Inject, OnInit } from '@angular/core'; import { FormGroup } from '@angular/forms'; import { MatDialogRef, MAT_DIALOG_DATA } from '@angular/material/dialog'; +import { ExternalServiceService } from '@app/core/services/external-sources/service/external-service.service'; +import { ExternalServiceEditorModel } from '@app/ui/dataset/dataset-wizard/dataset-wizard-editor.model'; +import { BaseComponent } from '@common/base/base.component'; import { takeUntil } from 'rxjs/operators'; -import { BaseComponent } from '../../../../../../core/common/base/base.component'; -import { ExternalServiceService } from '../../../../../../core/services/external-sources/service/external-service.service'; -import { ExternalServiceEditorModel } from '../../../dataset-wizard-editor.model'; @Component({ templateUrl: 'dataset-external-service-dialog-editor.component.html', diff --git a/dmp-frontend/src/app/ui/dataset/dataset.module.ts b/dmp-frontend/src/app/ui/dataset/dataset.module.ts index c2a467d1e..0a041cd64 100644 --- a/dmp-frontend/src/app/ui/dataset/dataset.module.ts +++ b/dmp-frontend/src/app/ui/dataset/dataset.module.ts @@ -1,27 +1,27 @@ import { NgModule } from '@angular/core'; +import { AutoCompleteModule } from '@app/library/auto-complete/auto-complete.module'; +import { ConfirmationDialogModule } from '@common/modules/confirmation-dialog/confirmation-dialog.module'; +import { ExportMethodDialogModule } from '@app/library/export-method-dialog/export-method-dialog.module'; +import { UrlListingModule } from '@app/library/url-listing/url-listing.module'; +import { DatasetCopyDialogueComponent } from '@app/ui/dataset/dataset-wizard/dataset-copy-dialogue/dataset-copy-dialogue.component'; +import { DatasetEditorComponent } from '@app/ui/dataset/dataset-wizard/dataset-editor/dataset-editor.component'; +import { DatasetWizardComponent } from '@app/ui/dataset/dataset-wizard/dataset-wizard.component'; +import { DatasetExternalReferencesEditorComponent } from '@app/ui/dataset/dataset-wizard/external-references/dataset-external-references-editor.component'; +import { DatasetExternalDataRepositoryDialogEditorComponent } from '@app/ui/dataset/dataset-wizard/external-references/editors/data-repository/dataset-external-data-repository-dialog-editor.component'; +import { DatasetExternalDatasetDialogEditorComponent } from '@app/ui/dataset/dataset-wizard/external-references/editors/external-dataset/dataset-external-dataset-dialog-editor.component'; +import { DatasetExternalRegistryDialogEditorComponent } from '@app/ui/dataset/dataset-wizard/external-references/editors/registry/dataset-external-registry-dialog-editor.component'; +import { DatasetExternalServiceDialogEditorComponent } from '@app/ui/dataset/dataset-wizard/external-references/editors/service/dataset-external-service-dialog-editor.component'; +import { DatasetRoutingModule } from '@app/ui/dataset/dataset.routing'; +import { DatasetCriteriaComponent } from '@app/ui/dataset/listing/criteria/dataset-criteria.component'; +import { DatasetUploadDialogue } from '@app/ui/dataset/listing/criteria/dataset-upload-dialogue/dataset-upload-dialogue.component'; +import { DatasetListingComponent } from '@app/ui/dataset/listing/dataset-listing.component'; +import { DatasetListingItemComponent } from '@app/ui/dataset/listing/listing-item/dataset-listing-item.component'; +import { DatasetDescriptionFormModule } from '@app/ui/misc/dataset-description-form/dataset-description-form.module'; +import { TableOfContentsModule } from '@app/ui/misc/dataset-description-form/tableOfContentsMaterial/table-of-contents.module'; +import { ExternalSourcesModule } from '@app/ui/misc/external-sources/external-sources.module'; +import { CommonFormsModule } from '@common/forms/common-forms.module'; +import { CommonUiModule } from '@common/ui/common-ui.module'; import { AngularStickyThingsModule } from '@w11k/angular-sticky-things'; -import { CommonFormsModule } from '../../common/forms/common-forms.module'; -import { CommonUiModule } from '../../common/ui/common-ui.module'; -import { AutoCompleteModule } from '../../library/auto-complete/auto-complete.module'; -import { ConfirmationDialogModule } from '../../library/confirmation-dialog/confirmation-dialog.module'; -import { ExportMethodDialogModule } from '../../library/export-method-dialog/export-method-dialog.module'; -import { UrlListingModule } from '../../library/url-listing/url-listing.module'; -import { DatasetDescriptionFormModule } from '../misc/dataset-description-form/dataset-description-form.module'; -import { TableOfContentsModule } from '../misc/dataset-description-form/tableOfContentsMaterial/table-of-contents.module'; -import { ExternalSourcesModule } from '../misc/external-sources/external-sources.module'; -import { DatasetCopyDialogueComponent } from './dataset-wizard/dataset-copy-dialogue/dataset-copy-dialogue.component'; -import { DatasetEditorComponent } from './dataset-wizard/dataset-editor/dataset-editor.component'; -import { DatasetWizardComponent } from './dataset-wizard/dataset-wizard.component'; -import { DatasetExternalReferencesEditorComponent } from './dataset-wizard/external-references/dataset-external-references-editor.component'; -import { DatasetExternalDataRepositoryDialogEditorComponent } from './dataset-wizard/external-references/editors/data-repository/dataset-external-data-repository-dialog-editor.component'; -import { DatasetExternalDatasetDialogEditorComponent } from './dataset-wizard/external-references/editors/external-dataset/dataset-external-dataset-dialog-editor.component'; -import { DatasetExternalRegistryDialogEditorComponent } from './dataset-wizard/external-references/editors/registry/dataset-external-registry-dialog-editor.component'; -import { DatasetExternalServiceDialogEditorComponent } from './dataset-wizard/external-references/editors/service/dataset-external-service-dialog-editor.component'; -import { DatasetRoutingModule } from './dataset.routing'; -import { DatasetCriteriaComponent } from './listing/criteria/dataset-criteria.component'; -import { DatasetUploadDialogue } from './listing/criteria/dataset-upload-dialogue/dataset-upload-dialogue.component'; -import { DatasetListingComponent } from './listing/dataset-listing.component'; -import { DatasetListingItemComponent } from './listing/listing-item/dataset-listing-item.component'; @NgModule({ imports: [ diff --git a/dmp-frontend/src/app/ui/dataset/listing/criteria/dataset-criteria.component.ts b/dmp-frontend/src/app/ui/dataset/listing/criteria/dataset-criteria.component.ts index cfcee2add..21f2ee355 100644 --- a/dmp-frontend/src/app/ui/dataset/listing/criteria/dataset-criteria.component.ts +++ b/dmp-frontend/src/app/ui/dataset/listing/criteria/dataset-criteria.component.ts @@ -4,35 +4,35 @@ import { FormBuilder, FormControl, FormGroup } from '@angular/forms'; import { MatDialog } from '@angular/material/dialog'; import { MatSnackBar } from '@angular/material/snack-bar'; import { Router } from '@angular/router'; +import { DatasetStatus } from '@app/core/common/enum/dataset-status'; +import { DataTableData } from '@app/core/model/data-table/data-table-data'; +import { DataTableRequest } from '@app/core/model/data-table/data-table-request'; +import { DmpListingModel } from '@app/core/model/dmp/dmp-listing'; +import { ExternalSourceItemModel } from '@app/core/model/external-sources/external-source-item'; +import { DatasetProfileCriteria } from '@app/core/query/dataset-profile/dataset-profile-criteria'; +import { DatasetCriteria } from '@app/core/query/dataset/dataset-criteria'; +import { DmpCriteria } from '@app/core/query/dmp/dmp-criteria'; +import { GrantCriteria } from '@app/core/query/grant/grant-criteria'; +import { OrganisationCriteria } from '@app/core/query/organisation/organisation-criteria'; +import { RequestItem } from '@app/core/query/request-item'; +import { TagCriteria } from '@app/core/query/tag/tag-criteria'; +import { UserCriteria } from '@app/core/query/user/user-criteria'; +import { DatasetWizardService } from '@app/core/services/dataset-wizard/dataset-wizard.service'; +import { DatasetService } from '@app/core/services/dataset/dataset.service'; +import { DmpService } from '@app/core/services/dmp/dmp.service'; +import { ExternalSourcesService } from '@app/core/services/external-sources/external-sources.service'; +import { GrantService } from '@app/core/services/grant/grant.service'; +import { SnackBarNotificationLevel, UiNotificationService } from '@app/core/services/notification/ui-notification-service'; +import { OrganisationService } from '@app/core/services/organisation/organisation.service'; +import { UserService } from '@app/core/services/user/user.service'; +import { EnumUtils } from '@app/core/services/utilities/enum-utils.service'; +import { MultipleAutoCompleteConfiguration } from '@app/library/auto-complete/multiple/multiple-auto-complete-configuration'; +import { DatasetUploadDialogue } from '@app/ui/dataset/listing/criteria/dataset-upload-dialogue/dataset-upload-dialogue.component'; +import { BaseCriteriaComponent } from '@app/ui/misc/criteria/base-criteria.component'; +import { ValidationErrorModel } from '@common/forms/validation/error-model/validation-error-model'; import { TranslateService } from '@ngx-translate/core'; import { Observable } from 'rxjs'; import { map, takeUntil } from 'rxjs/operators'; -import { ValidationErrorModel } from '../../../../common/forms/validation/error-model/validation-error-model'; -import { DatasetStatus } from '../../../../core/common/enum/dataset-status'; -import { DataTableData } from '../../../../core/model/data-table/data-table-data'; -import { DataTableRequest } from '../../../../core/model/data-table/data-table-request'; -import { DmpListingModel } from '../../../../core/model/dmp/dmp-listing'; -import { ExternalSourceItemModel } from '../../../../core/model/external-sources/external-source-item'; -import { DatasetProfileCriteria } from '../../../../core/query/dataset-profile/dataset-profile-criteria'; -import { DatasetCriteria } from '../../../../core/query/dataset/dataset-criteria'; -import { DmpCriteria } from '../../../../core/query/dmp/dmp-criteria'; -import { GrantCriteria } from '../../../../core/query/grant/grant-criteria'; -import { OrganisationCriteria } from '../../../../core/query/organisation/organisation-criteria'; -import { RequestItem } from '../../../../core/query/request-item'; -import { TagCriteria } from '../../../../core/query/tag/tag-criteria'; -import { UserCriteria } from '../../../../core/query/user/user-criteria'; -import { DatasetWizardService } from '../../../../core/services/dataset-wizard/dataset-wizard.service'; -import { DatasetService } from '../../../../core/services/dataset/dataset.service'; -import { DmpService } from '../../../../core/services/dmp/dmp.service'; -import { ExternalSourcesService } from '../../../../core/services/external-sources/external-sources.service'; -import { GrantService } from '../../../../core/services/grant/grant.service'; -import { SnackBarNotificationLevel, UiNotificationService } from '../../../../core/services/notification/ui-notification-service'; -import { OrganisationService } from '../../../../core/services/organisation/organisation.service'; -import { UserService } from '../../../../core/services/user/user.service'; -import { EnumUtils } from '../../../../core/services/utilities/enum-utils.service'; -import { MultipleAutoCompleteConfiguration } from '../../../../library/auto-complete/multiple/multiple-auto-complete-configuration'; -import { BaseCriteriaComponent } from '../../../misc/criteria/base-criteria.component'; -import { DatasetUploadDialogue } from './dataset-upload-dialogue/dataset-upload-dialogue.component'; @Component({ selector: 'app-dataset-criteria-component', @@ -64,14 +64,14 @@ export class DatasetCriteriaComponent extends BaseCriteriaComponent implements O tagsAutoCompleteConfiguration = { filterFn: this.filterTags.bind(this), - initialItems: (excludedItems: any[]) => this.filterTags('').pipe(map(result => result.filter(resultItem => excludedItems.map(x => x.id).indexOf(resultItem.id) === -1))), + initialItems: (excludedItems: any[]) => this.filterTags('').pipe(map(result => result.filter(resultItem => (excludedItems || []).map(x => x.id).indexOf(resultItem.id) === -1))), displayFn: (item) => item['name'], titleFn: (item) => item['name'] }; datasetTemplateAutoCompleteConfiguration: MultipleAutoCompleteConfiguration = { filterFn: this.filterDatasetTemplate.bind(this), - initialItems: (excludedItems: any[]) => this.filterDatasetTemplate('').pipe(map(result => result.filter(resultItem => excludedItems.map(x => x.id).indexOf(resultItem.id) === -1))), + initialItems: (excludedItems: any[]) => this.filterDatasetTemplate('').pipe(map(result => result.filter(resultItem => (excludedItems || []).map(x => x.id).indexOf(resultItem.id) === -1))), displayFn: (item) => item['label'], titleFn: (item) => item['label'], subtitleFn: (item) => item['description'] @@ -86,21 +86,21 @@ export class DatasetCriteriaComponent extends BaseCriteriaComponent implements O collaboratorsAutoCompleteConfiguration: MultipleAutoCompleteConfiguration = { filterFn: this.filterCollaborators.bind(this), - initialItems: (excludedItems: any[]) => this.filterCollaborators('').pipe(map(result => result.filter(resultItem => excludedItems.map(x => x.id).indexOf(resultItem.id) === -1))), + initialItems: (excludedItems: any[]) => this.filterCollaborators('').pipe(map(result => result.filter(resultItem => (excludedItems || []).map(x => x.id).indexOf(resultItem.id) === -1))), displayFn: (item) => item['name'], titleFn: (item) => item['name'] }; grantAutoCompleteConfiguration: MultipleAutoCompleteConfiguration = { filterFn: this.filterGrant.bind(this), - initialItems: (excludedItems: any[]) => this.filterGrant('').pipe(map(result => result.filter(resultItem => excludedItems.map(x => x.id).indexOf(resultItem.id) === -1))), + initialItems: (excludedItems: any[]) => this.filterGrant('').pipe(map(result => result.filter(resultItem => (excludedItems || []).map(x => x.id).indexOf(resultItem.id) === -1))), displayFn: (item) => item['label'], titleFn: (item) => item['label'] }; organisationAutoCompleteConfiguration: MultipleAutoCompleteConfiguration = { filterFn: this.filterOrganisations.bind(this), - initialItems: (excludedItems: any[]) => this.filterOrganisations('').pipe(map(result => result.filter(resultItem => excludedItems.map(x => x.id).indexOf(resultItem.id) === -1))), + initialItems: (excludedItems: any[]) => this.filterOrganisations('').pipe(map(result => result.filter(resultItem => (excludedItems || []).map(x => x.id).indexOf(resultItem.id) === -1))), displayFn: (item) => item['name'], titleFn: (item) => item['name'] } diff --git a/dmp-frontend/src/app/ui/dataset/listing/criteria/dataset-upload-dialogue/dataset-upload-dialogue.component.ts b/dmp-frontend/src/app/ui/dataset/listing/criteria/dataset-upload-dialogue/dataset-upload-dialogue.component.ts index d4aeef786..7921bcbd8 100644 --- a/dmp-frontend/src/app/ui/dataset/listing/criteria/dataset-upload-dialogue/dataset-upload-dialogue.component.ts +++ b/dmp-frontend/src/app/ui/dataset/listing/criteria/dataset-upload-dialogue/dataset-upload-dialogue.component.ts @@ -1,22 +1,21 @@ -import {map, takeUntil } from 'rxjs/operators'; import { Component, Inject, OnInit } from '@angular/core'; import { MatDialogRef, MAT_DIALOG_DATA } from '@angular/material/dialog'; +import { DataTableData } from '@app/core/model/data-table/data-table-data'; +import { DataTableRequest } from '@app/core/model/data-table/data-table-request'; +import { DatasetProfileModel } from '@app/core/model/dataset/dataset-profile'; +import { DmpModel } from '@app/core/model/dmp/dmp'; +import { DmpListingModel } from '@app/core/model/dmp/dmp-listing'; +import { DatasetProfileCriteria } from '@app/core/query/dataset-profile/dataset-profile-criteria'; +import { DatasetCriteria } from '@app/core/query/dataset/dataset-criteria'; +import { DmpCriteria } from '@app/core/query/dmp/dmp-criteria'; +import { RequestItem } from '@app/core/query/request-item'; +import { DatasetWizardService } from '@app/core/services/dataset-wizard/dataset-wizard.service'; +import { DmpService } from '@app/core/services/dmp/dmp.service'; +import { BaseCriteriaComponent } from '@app/ui/misc/criteria/base-criteria.component'; +import { ValidationErrorModel } from '@common/forms/validation/error-model/validation-error-model'; import { Observable } from 'rxjs'; -import { DataTableData } from '../../../../../core/model/data-table/data-table-data'; -import { DmpListingModel } from '../../../../../core/model/dmp/dmp-listing'; -import { DataTableRequest } from '../../../../../core/model/data-table/data-table-request'; -import { DmpCriteria } from '../../../../../core/query/dmp/dmp-criteria'; -import { DmpService } from '../../../../../core/services/dmp/dmp.service'; -import { ValidationErrorModel } from '../../../../../common/forms/validation/error-model/validation-error-model'; -import { BaseCriteriaComponent } from '../../../../misc/criteria/base-criteria.component'; -import { DmpModel } from '../../../../../core/model/dmp/dmp'; -import { DatasetProfileModel } from '../../../../../core/model/dataset/dataset-profile'; -import { DatasetWizardService } from '../../../../../core/services/dataset-wizard/dataset-wizard.service'; -import { RequestItem } from '../../../../../core/query/request-item'; -import { DatasetProfileCriteria } from '../../../../../core/query/dataset-profile/dataset-profile-criteria'; -import { DatasetCriteria } from '../../../../../core/query/dataset/dataset-criteria'; -import { DatasetCriteriaComponent } from '../dataset-criteria.component'; +import { map, takeUntil } from 'rxjs/operators'; @Component({ selector: 'dataset-upload-dialogue', diff --git a/dmp-frontend/src/app/ui/dataset/listing/dataset-listing.component.ts b/dmp-frontend/src/app/ui/dataset/listing/dataset-listing.component.ts index 01e4afd8a..c843dfe12 100644 --- a/dmp-frontend/src/app/ui/dataset/listing/dataset-listing.component.ts +++ b/dmp-frontend/src/app/ui/dataset/listing/dataset-listing.component.ts @@ -1,21 +1,21 @@ -import { of as observableOf, Observable } from 'rxjs'; import { Component, OnInit, ViewChild } from '@angular/core'; -import { MatPaginator, PageEvent } from '@angular/material/paginator'; +import { MatPaginator } from '@angular/material/paginator'; import { MatSort } from '@angular/material/sort'; import { ActivatedRoute, Params, Router } from '@angular/router'; -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 { DatasetCriteria } from '../../../core/query/dataset/dataset-criteria'; -import { DatasetService } from '../../../core/services/dataset/dataset.service'; -import { DmpService } from '../../../core/services/dmp/dmp.service'; -import { BreadcrumbItem } from '../../misc/breadcrumb/definition/breadcrumb-item'; -import { IBreadCrumbComponent } from '../../misc/breadcrumb/definition/IBreadCrumbComponent'; -import { DatasetCriteriaComponent } from './criteria/dataset-criteria.component'; +import { DatasetStatus } from '@app/core/common/enum/dataset-status'; +import { DataTableRequest } from '@app/core/model/data-table/data-table-request'; +import { DatasetListingModel } from '@app/core/model/dataset/dataset-listing'; +import { DatasetCriteria } from '@app/core/query/dataset/dataset-criteria'; +import { DatasetService } from '@app/core/services/dataset/dataset.service'; +import { DmpService } from '@app/core/services/dmp/dmp.service'; +import { DatasetCriteriaComponent } from '@app/ui/dataset/listing/criteria/dataset-criteria.component'; +import { BreadcrumbItem } from '@app/ui/misc/breadcrumb/definition/breadcrumb-item'; +import { IBreadCrumbComponent } from '@app/ui/misc/breadcrumb/definition/IBreadCrumbComponent'; +import { BaseComponent } from '@common/base/base.component'; import { TranslateService } from '@ngx-translate/core'; -import { DatasetStatus } from '../../../core/common/enum/dataset-status'; +import { Observable, of as observableOf } from 'rxjs'; +import { takeUntil } from 'rxjs/operators'; @Component({ selector: 'app-dataset-listing-component', diff --git a/dmp-frontend/src/app/ui/dmp/clone/dmp-clone.component.ts b/dmp-frontend/src/app/ui/dmp/clone/dmp-clone.component.ts index f9c8bd81d..35279871e 100644 --- a/dmp-frontend/src/app/ui/dmp/clone/dmp-clone.component.ts +++ b/dmp-frontend/src/app/ui/dmp/clone/dmp-clone.component.ts @@ -1,22 +1,22 @@ -import {of as observableOf, Observable } from 'rxjs'; - -import {map, takeUntil } from 'rxjs/operators'; -import { Component, OnInit } from '@angular/core'; -import { DmpWizardEditorModel } from '../wizard/dmp-wizard-editor.model'; -import { FormGroup } from '@angular/forms'; -import { BaseComponent } from '../../../core/common/base/base.component'; -import { ActivatedRoute, Params, Router } from '@angular/router'; -import { DmpModel } from '../../../core/model/dmp/dmp'; -import { TranslateService } from '@ngx-translate/core'; -import { DmpService } from '../../../core/services/dmp/dmp.service'; -import { BreadcrumbItem } from '../../misc/breadcrumb/definition/breadcrumb-item'; -import { ValidationErrorModel } from '../../../common/forms/validation/error-model/validation-error-model'; -import { UiNotificationService, SnackBarNotificationLevel } from '../../../core/services/notification/ui-notification-service'; -import { FunderFormModel } from '../editor/grant-tab/funder-form-model'; -import { ProjectFormModel } from '../editor/grant-tab/project-form-model'; -import { GrantTabModel } from '../editor/grant-tab/grant-tab-model'; import { HttpErrorResponse } from '@angular/common/http'; +import { Component, OnInit } from '@angular/core'; +import { FormGroup } from '@angular/forms'; +import { ActivatedRoute, Params, Router } from '@angular/router'; +import { DmpModel } from '@app/core/model/dmp/dmp'; +import { DmpService } from '@app/core/services/dmp/dmp.service'; +import { SnackBarNotificationLevel, UiNotificationService } from '@app/core/services/notification/ui-notification-service'; +import { FunderFormModel } from '@app/ui/dmp/editor/grant-tab/funder-form-model'; +import { GrantTabModel } from '@app/ui/dmp/editor/grant-tab/grant-tab-model'; +import { ProjectFormModel } from '@app/ui/dmp/editor/grant-tab/project-form-model'; +import { DmpWizardEditorModel } from '@app/ui/dmp/wizard/dmp-wizard-editor.model'; +import { BreadcrumbItem } from '@app/ui/misc/breadcrumb/definition/breadcrumb-item'; +import { BaseComponent } from '@common/base/base.component'; +import { ValidationErrorModel } from '@common/forms/validation/error-model/validation-error-model'; +import { TranslateService } from '@ngx-translate/core'; +import { Observable, of as observableOf } from 'rxjs'; +import { map, takeUntil } from 'rxjs/operators'; + @Component({ selector: 'app-dmp-clone', diff --git a/dmp-frontend/src/app/ui/dmp/dmp.module.ts b/dmp-frontend/src/app/ui/dmp/dmp.module.ts index 22702fe5b..b701a8e40 100644 --- a/dmp-frontend/src/app/ui/dmp/dmp.module.ts +++ b/dmp-frontend/src/app/ui/dmp/dmp.module.ts @@ -1,34 +1,35 @@ import { NgModule } from '@angular/core'; -import { CommonFormsModule } from '../../common/forms/common-forms.module'; -import { CommonUiModule } from '../../common/ui/common-ui.module'; -import { FormattingModule } from '../../core/formatting.module'; -import { AutoCompleteModule } from '../../library/auto-complete/auto-complete.module'; -import { ConfirmationDialogModule } from '../../library/confirmation-dialog/confirmation-dialog.module'; -import { UrlListingModule } from '../../library/url-listing/url-listing.module'; -import { DmpRoutingModule } from './dmp.routing'; -import { AddResearcherComponent } from './editor/add-researcher/add-researcher.component'; -import { AvailableProfilesComponent } from './editor/available-profiles/available-profiles.component'; -import { DmpEditorComponent } from './editor/dmp-editor.component'; -import { DmpFinalizeDialogComponent } from './editor/dmp-finalize-dialog/dmp-finalize-dialog.component'; -import { DynamicDmpFieldResolverComponent } from './editor/dynamic-field-resolver/dynamic-dmp-field-resolver.component'; -import { DynamicFieldGrantComponent } from './editor/dynamic-fields-grant/dynamic-field-grant/dynamic-field-grant.component'; -import { DynamicFieldsGrantComponent } from './editor/dynamic-fields-grant/dynamic-fields-grant.component'; -import { InvitationAcceptedComponent } from './invitation/accepted/dmp-invitation-accepted.component'; -import { DmpInvitationDialogComponent } from './invitation/dmp-invitation.component'; -import { DmpCriteriaComponent } from './listing/criteria/dmp-criteria.component'; -import { DmpUploadDialogue } from './listing/criteria/upload-dialogue/dmp-upload-dialogue.component'; -import { DmpListingComponent } from './listing/dmp-listing.component'; -import { DmpListingItemComponent } from './listing/listing-item/dmp-listing-item.component'; -import { DmpWizardComponent } from './wizard/dmp-wizard.component'; -import { DmpWizardEditorComponent } from './wizard/editor/dmp-wizard-editor.component'; -import { DmpWizardDatasetListingComponent } from './wizard/listing/dmp-wizard-dataset-listing.component'; -import { ExportMethodDialogModule } from '../../library/export-method-dialog/export-method-dialog.module'; -import { GeneralTabComponent } from './editor/general-tab/general-tab.component'; -import { PeopleTabComponent } from './editor/people-tab/people-tab.component'; -import { GrantTabComponent } from './editor/grant-tab/grant-tab.component'; -import { DatasetsTabComponent } from './editor/datasets-tab/datasets-tab.component'; -import { DmpOverviewModule } from './overview/dmp-overview.module'; -import { DmpCloneComponent } from './clone/dmp-clone.component'; +import { FormattingModule } from '@app/core/formatting.module'; +import { AutoCompleteModule } from '@app/library/auto-complete/auto-complete.module'; +import { ConfirmationDialogModule } from '@common/modules/confirmation-dialog/confirmation-dialog.module'; +import { ExportMethodDialogModule } from '@app/library/export-method-dialog/export-method-dialog.module'; +import { UrlListingModule } from '@app/library/url-listing/url-listing.module'; +import { DmpCloneComponent } from '@app/ui/dmp/clone/dmp-clone.component'; +import { DmpRoutingModule } from '@app/ui/dmp/dmp.routing'; +import { AddResearcherComponent } from '@app/ui/dmp/editor/add-researcher/add-researcher.component'; +import { AvailableProfilesComponent } from '@app/ui/dmp/editor/available-profiles/available-profiles.component'; +import { DatasetsTabComponent } from '@app/ui/dmp/editor/datasets-tab/datasets-tab.component'; +import { DmpEditorComponent } from '@app/ui/dmp/editor/dmp-editor.component'; +import { DmpFinalizeDialogComponent } from '@app/ui/dmp/editor/dmp-finalize-dialog/dmp-finalize-dialog.component'; +import { DynamicDmpFieldResolverComponent } from '@app/ui/dmp/editor/dynamic-field-resolver/dynamic-dmp-field-resolver.component'; +import { DynamicFieldGrantComponent } from '@app/ui/dmp/editor/dynamic-fields-grant/dynamic-field-grant/dynamic-field-grant.component'; +import { DynamicFieldsGrantComponent } from '@app/ui/dmp/editor/dynamic-fields-grant/dynamic-fields-grant.component'; +import { GeneralTabComponent } from '@app/ui/dmp/editor/general-tab/general-tab.component'; +import { GrantTabComponent } from '@app/ui/dmp/editor/grant-tab/grant-tab.component'; +import { PeopleTabComponent } from '@app/ui/dmp/editor/people-tab/people-tab.component'; +import { InvitationAcceptedComponent } from '@app/ui/dmp/invitation/accepted/dmp-invitation-accepted.component'; +import { DmpInvitationDialogComponent } from '@app/ui/dmp/invitation/dmp-invitation.component'; +import { DmpCriteriaComponent } from '@app/ui/dmp/listing/criteria/dmp-criteria.component'; +import { DmpUploadDialogue } from '@app/ui/dmp/listing/criteria/upload-dialogue/dmp-upload-dialogue.component'; +import { DmpListingComponent } from '@app/ui/dmp/listing/dmp-listing.component'; +import { DmpListingItemComponent } from '@app/ui/dmp/listing/listing-item/dmp-listing-item.component'; +import { DmpOverviewModule } from '@app/ui/dmp/overview/dmp-overview.module'; +import { DmpWizardComponent } from '@app/ui/dmp/wizard/dmp-wizard.component'; +import { DmpWizardEditorComponent } from '@app/ui/dmp/wizard/editor/dmp-wizard-editor.component'; +import { DmpWizardDatasetListingComponent } from '@app/ui/dmp/wizard/listing/dmp-wizard-dataset-listing.component'; +import { CommonFormsModule } from '@common/forms/common-forms.module'; +import { FormValidationErrorsDialogModule } from '@common/forms/form-validation-errors-dialog/form-validation-errors-dialog.module'; +import { CommonUiModule } from '@common/ui/common-ui.module'; @NgModule({ imports: [ @@ -40,7 +41,8 @@ import { DmpCloneComponent } from './clone/dmp-clone.component'; FormattingModule, AutoCompleteModule, DmpRoutingModule, - DmpOverviewModule + DmpOverviewModule, + FormValidationErrorsDialogModule ], declarations: [ DmpListingComponent, diff --git a/dmp-frontend/src/app/ui/dmp/editor/add-researcher/add-researcher.component.ts b/dmp-frontend/src/app/ui/dmp/editor/add-researcher/add-researcher.component.ts index 7d677020e..ca87c4f60 100644 --- a/dmp-frontend/src/app/ui/dmp/editor/add-researcher/add-researcher.component.ts +++ b/dmp-frontend/src/app/ui/dmp/editor/add-researcher/add-researcher.component.ts @@ -1,11 +1,10 @@ import { Component, Inject, OnInit } from '@angular/core'; import { FormGroup } from '@angular/forms'; import { MatDialogRef, MAT_DIALOG_DATA } from '@angular/material/dialog'; +import { ExternalResearcherService } from '@app/core/services/external-sources/researcher/external-researcher.service'; +import { ResearcherEditorModel } from '@app/ui/dmp/editor/add-researcher/add-researcher.model'; +import { BaseComponent } from '@common/base/base.component'; import { takeUntil } from 'rxjs/operators'; -import { BaseComponent } from '../../../../core/common/base/base.component'; -import { ExternalResearcherService } from '../../../../core/services/external-sources/researcher/external-researcher.service'; -import { ResearcherEditorModel } from './add-researcher.model'; -import { ResearcherModel } from '../../../../core/model/researcher/researcher'; @Component({ selector: 'app-add-researcher-component', @@ -30,7 +29,7 @@ export class AddResearcherComponent extends BaseComponent implements OnInit { this.externalResearcherService.createResearcher(this.formGroup.value) .pipe(takeUntil(this._destroyed)) .subscribe( - null, null, () => this.dialogRef.close() + null, null, () => this.dialogRef.close() ); } diff --git a/dmp-frontend/src/app/ui/dmp/editor/add-researcher/add-researcher.model.ts b/dmp-frontend/src/app/ui/dmp/editor/add-researcher/add-researcher.model.ts index a5fa6df33..80dca6276 100644 --- a/dmp-frontend/src/app/ui/dmp/editor/add-researcher/add-researcher.model.ts +++ b/dmp-frontend/src/app/ui/dmp/editor/add-researcher/add-researcher.model.ts @@ -1,8 +1,8 @@ import { FormBuilder, FormGroup } from '@angular/forms'; -import { ResearcherModel } from '../../../../core/model/researcher/researcher'; -import { ValidationContext } from "../../../../common/forms/validation/validation-context"; -import { BackendErrorValidator } from "../../../../common/forms/validation/custom-validator"; -import { ValidationErrorModel } from "../../../../common/forms/validation/error-model/validation-error-model"; +import { ResearcherModel } from '@app/core/model/researcher/researcher'; +import { BackendErrorValidator } from '@common/forms/validation/custom-validator'; +import { ValidationErrorModel } from '@common/forms/validation/error-model/validation-error-model'; +import { ValidationContext } from '@common/forms/validation/validation-context'; export class ResearcherEditorModel { public id: String; diff --git a/dmp-frontend/src/app/ui/dmp/editor/available-profiles/available-profiles.component.ts b/dmp-frontend/src/app/ui/dmp/editor/available-profiles/available-profiles.component.ts index 8045b1195..12dea9dad 100644 --- a/dmp-frontend/src/app/ui/dmp/editor/available-profiles/available-profiles.component.ts +++ b/dmp-frontend/src/app/ui/dmp/editor/available-profiles/available-profiles.component.ts @@ -1,12 +1,12 @@ import { Component, Inject, OnInit } from '@angular/core'; import { FormGroup } from '@angular/forms'; import { MatDialogRef, MAT_DIALOG_DATA } from '@angular/material/dialog'; +import { DataTableRequest } from '@app/core/model/data-table/data-table-request'; +import { DatasetProfileModel } from '@app/core/model/dataset/dataset-profile'; +import { DatasetProfileCriteria } from '@app/core/query/dataset-profile/dataset-profile-criteria'; +import { DatasetService } from '@app/core/services/dataset/dataset.service'; +import { BaseComponent } from '@common/base/base.component'; import { takeUntil } from 'rxjs/operators'; -import { BaseComponent } from '../../../../core/common/base/base.component'; -import { DatasetProfileModel } from '../../../../core/model/dataset/dataset-profile'; -import { DatasetService } from '../../../../core/services/dataset/dataset.service'; -import { DataTableRequest } from "../../../../core/model/data-table/data-table-request"; -import { DatasetProfileCriteria } from "../../../../core/query/dataset-profile/dataset-profile-criteria"; @Component({ selector: 'app-available-profiles-component', 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 1f9240f5f..e96507cb5 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 @@ -107,15 +107,15 @@
- -
-
diff --git a/dmp-frontend/src/app/ui/dmp/editor/dmp-editor.component.ts b/dmp-frontend/src/app/ui/dmp/editor/dmp-editor.component.ts index 4f01c3b24..8cac4012b 100644 --- a/dmp-frontend/src/app/ui/dmp/editor/dmp-editor.component.ts +++ b/dmp-frontend/src/app/ui/dmp/editor/dmp-editor.component.ts @@ -1,39 +1,41 @@ -import { of as observableOf, Observable } from 'rxjs'; - -import { map, takeUntil } from 'rxjs/operators'; import { Component, OnInit } from '@angular/core'; import { FormGroup } from '@angular/forms'; import { MatDialog } from '@angular/material/dialog'; import { ActivatedRoute, Params, Router } from '@angular/router'; +import { DmpStatus } from '@app/core/common/enum/dmp-status'; +import { Status } from '@app/core/common/enum/Status'; +import { DataTableRequest } from '@app/core/model/data-table/data-table-request'; +import { DmpProfileDefinition } from '@app/core/model/dmp-profile/dmp-profile'; +import { DmpProfileListing } from '@app/core/model/dmp-profile/dmp-profile-listing'; +import { DmpModel } from '@app/core/model/dmp/dmp'; +import { UserModel } from '@app/core/model/user/user'; +import { UserInfoListingModel } from '@app/core/model/user/user-info-listing'; +import { BaseCriteria } from '@app/core/query/base-criteria'; +import { DmpProfileCriteria } from '@app/core/query/dmp/dmp-profile-criteria'; +import { GrantCriteria } from '@app/core/query/grant/grant-criteria'; +import { RequestItem } from '@app/core/query/request-item'; +import { AuthService } from '@app/core/services/auth/auth.service'; +import { DmpProfileService } from '@app/core/services/dmp/dmp-profile.service'; +import { DmpService } from '@app/core/services/dmp/dmp.service'; +import { SnackBarNotificationLevel, UiNotificationService } from '@app/core/services/notification/ui-notification-service'; +import { ConfirmationDialogComponent } from '@common/modules/confirmation-dialog/confirmation-dialog.component'; +import { DmpEditorModel } from '@app/ui/dmp/editor/dmp-editor.model'; +import { DmpFinalizeDialogComponent, DmpFinalizeDialogInput } from '@app/ui/dmp/editor/dmp-finalize-dialog/dmp-finalize-dialog.component'; +import { FunderFormModel } from '@app/ui/dmp/editor/grant-tab/funder-form-model'; +import { GrantTabModel } from '@app/ui/dmp/editor/grant-tab/grant-tab-model'; +import { ProjectFormModel } from '@app/ui/dmp/editor/grant-tab/project-form-model'; +import { BreadcrumbItem } from '@app/ui/misc/breadcrumb/definition/breadcrumb-item'; +import { IBreadCrumbComponent } from '@app/ui/misc/breadcrumb/definition/IBreadCrumbComponent'; +import { BaseComponent } from '@common/base/base.component'; +import { FormService } from '@common/forms/form-service'; +import { FormValidationErrorsDialogComponent } from '@common/forms/form-validation-errors-dialog/form-validation-errors-dialog.component'; +import { ValidationErrorModel } from '@common/forms/validation/error-model/validation-error-model'; import { TranslateService } from '@ngx-translate/core'; import * as FileSaver from 'file-saver'; -import { ValidationErrorModel } from '../../../common/forms/validation/error-model/validation-error-model'; -import { BaseComponent } from '../../../core/common/base/base.component'; -import { DmpStatus } from '../../../core/common/enum/dmp-status'; -import { Status } from '../../../core/common/enum/Status'; -import { DataTableRequest } from '../../../core/model/data-table/data-table-request'; -import { DmpProfileDefinition } from '../../../core/model/dmp-profile/dmp-profile'; -import { DmpProfileListing } from '../../../core/model/dmp-profile/dmp-profile-listing'; -import { DmpModel } from '../../../core/model/dmp/dmp'; -import { UserModel } from '../../../core/model/user/user'; -import { BaseCriteria } from '../../../core/query/base-criteria'; -import { DmpProfileCriteria } from '../../../core/query/dmp/dmp-profile-criteria'; -import { GrantCriteria } from '../../../core/query/grant/grant-criteria'; -import { RequestItem } from '../../../core/query/request-item'; -import { DmpProfileService } from '../../../core/services/dmp/dmp-profile.service'; -import { DmpService } from '../../../core/services/dmp/dmp.service'; -import { SnackBarNotificationLevel, UiNotificationService } from '../../../core/services/notification/ui-notification-service'; -import { ConfirmationDialogComponent } from '../../../library/confirmation-dialog/confirmation-dialog.component'; -import { BreadcrumbItem } from '../../misc/breadcrumb/definition/breadcrumb-item'; -import { IBreadCrumbComponent } from '../../misc/breadcrumb/definition/IBreadCrumbComponent'; -import { DmpEditorModel } from './dmp-editor.model'; -import { DmpFinalizeDialogComponent, DmpFinalizeDialogInput } from './dmp-finalize-dialog/dmp-finalize-dialog.component'; -import { AuthService } from '../../../core/services/auth/auth.service'; -import { UserInfoListingModel } from '../../../core/model/user/user-info-listing'; -import { GrantTabModel } from './grant-tab/grant-tab-model'; -import { ProjectFormModel } from './grant-tab/project-form-model'; -import { FunderFormModel } from './grant-tab/funder-form-model'; +import { Observable, of as observableOf } from 'rxjs'; +import { map, takeUntil } from 'rxjs/operators'; +import { Guid } from '@common/types/guid'; @Component({ selector: 'app-dmp-editor-component', @@ -69,6 +71,7 @@ export class DmpEditorComponent extends BaseComponent implements OnInit, IBreadC private dialog: MatDialog, private uiNotificationService: UiNotificationService, private authService: AuthService, + private formService: FormService ) { super(); } @@ -223,15 +226,29 @@ export class DmpEditorComponent extends BaseComponent implements OnInit, IBreadC // } formSubmit(showAddDatasetDialog?: boolean): void { - //this.touchAllFormFields(this.formGroup); - if (!this.isFormValid()) { return; } + this.formService.touchAllFormFields(this.formGroup); + if (!this.isFormValid()) { + this.showValidationErrorsDialog(); + return; + } this.onSubmit(showAddDatasetDialog); } public isFormValid() { - return this.formGroup.get('label').valid && this.formGroup.get('profiles').valid && - (this.formGroup.get('funder').get('label').valid || this.formGroup.get('funder').get('existFunder').valid) && - (this.formGroup.get('grant').get('label').valid || this.formGroup.get('grant').get('existGrant').valid); + return this.formGroup.valid; + // return this.formGroup.get('label').valid && this.formGroup.get('profiles').valid && + // (this.formGroup.get('funder').get('label').valid || this.formGroup.get('funder').get('existFunder').valid) && + // (this.formGroup.get('grant').get('label').valid || this.formGroup.get('grant').get('existGrant').valid); + } + + private showValidationErrorsDialog(projectOnly?: boolean) { + const dialogRef = this.dialog.open(FormValidationErrorsDialogComponent, { + disableClose: true, + data: { + formGroup: this.formGroup, + projectOnly: projectOnly + }, + }); } onSubmit(showAddDatasetDialog?: boolean): void { @@ -242,7 +259,7 @@ export class DmpEditorComponent extends BaseComponent implements OnInit, IBreadC if (showAddDatasetDialog) { this.addDatasetOpenDialog(complete); } - else { this.onCallbackSuccess() } + else { this.onCallbackSuccess(complete) } }, error => { this.formGroup.get('status').setValue(DmpStatus.Draft); @@ -252,9 +269,9 @@ export class DmpEditorComponent extends BaseComponent implements OnInit, IBreadC } - onCallbackSuccess(): void { + onCallbackSuccess(id?: String): void { this.uiNotificationService.snackBarNotification(this.isNew ? this.language.instant('GENERAL.SNACK-BAR.SUCCESSFUL-CREATION') : this.language.instant('GENERAL.SNACK-BAR.SUCCESSFUL-UPDATE'), SnackBarNotificationLevel.Success); - this.router.navigate(['/plans']); + id != null ? this.router.navigate(['/plans', 'edit', id]) : this.router.navigate(['/plans']); } onCallbackError(error: any) { @@ -430,7 +447,7 @@ export class DmpEditorComponent extends BaseComponent implements OnInit, IBreadC if (result) { this.router.navigate(['datasets/new/' + id]); } else { - this.router.navigate(['/plans']); + id != null ? this.router.navigate(['/plans', 'edit', id]) : this.router.navigate(['/plans']); } }); } diff --git a/dmp-frontend/src/app/ui/dmp/editor/dmp-editor.model.ts b/dmp-frontend/src/app/ui/dmp/editor/dmp-editor.model.ts index 2eaee767b..3becc2b75 100644 --- a/dmp-frontend/src/app/ui/dmp/editor/dmp-editor.model.ts +++ b/dmp-frontend/src/app/ui/dmp/editor/dmp-editor.model.ts @@ -1,25 +1,25 @@ import { FormBuilder, FormGroup, Validators } from "@angular/forms"; -import { BackendErrorValidator } from "../../../common/forms/validation/custom-validator"; -import { ValidationErrorModel } from "../../../common/forms/validation/error-model/validation-error-model"; -import { ValidationContext } from "../../../common/forms/validation/validation-context"; -import { Status } from "../../../core/common/enum/Status"; -import { DmpProfile, DmpProfileDefinition } from "../../../core/model/dmp-profile/dmp-profile"; -import { DmpModel } from "../../../core/model/dmp/dmp"; -import { DmpDynamicField } from "../../../core/model/dmp/dmp-dynamic-field"; -import { DmpDynamicFieldDependency } from "../../../core/model/dmp/dmp-dynamic-field-dependency"; -import { OrganizationModel } from "../../../core/model/organisation/organization"; -import { ResearcherModel } from "../../../core/model/researcher/researcher"; -import { UserModel } from "../../../core/model/user/user"; -import { ValidJsonValidator } from "../../../library/auto-complete/auto-complete-custom-validator"; -import { UserInfoListingModel } from "../../../core/model/user/user-info-listing"; -import { DatasetModel } from "../../../core/model/dataset/dataset"; -import { GrantTabModel } from "./grant-tab/grant-tab-model"; -import { DmpProfileExternalAutoCompleteFieldDataEditorModel } from "../../admin/dmp-profile/editor/external-autocomplete/dmp-profile-external-autocomplete-field-editor.model"; -import { DmpProfileType } from "../../../core/common/enum/dmp-profile-type"; -import { DmpProfileFieldDataType } from "../../../core/common/enum/dmp-profile-field-type"; -import { DmpProfileField } from "../../../core/model/dmp-profile/dmp-profile-field"; -import { ProjectFormModel } from "./grant-tab/project-form-model"; -import { FunderFormModel } from "./grant-tab/funder-form-model"; +import { DmpProfileFieldDataType } from '@app/core/common/enum/dmp-profile-field-type'; +import { DmpProfileType } from '@app/core/common/enum/dmp-profile-type'; +import { Status } from '@app/core/common/enum/Status'; +import { DatasetModel } from '@app/core/model/dataset/dataset'; +import { DmpProfile, DmpProfileDefinition } from '@app/core/model/dmp-profile/dmp-profile'; +import { DmpProfileField } from '@app/core/model/dmp-profile/dmp-profile-field'; +import { DmpModel } from '@app/core/model/dmp/dmp'; +import { DmpDynamicField } from '@app/core/model/dmp/dmp-dynamic-field'; +import { DmpDynamicFieldDependency } from '@app/core/model/dmp/dmp-dynamic-field-dependency'; +import { OrganizationModel } from '@app/core/model/organisation/organization'; +import { ResearcherModel } from '@app/core/model/researcher/researcher'; +import { UserModel } from '@app/core/model/user/user'; +import { UserInfoListingModel } from '@app/core/model/user/user-info-listing'; +import { ValidJsonValidator } from '@app/library/auto-complete/auto-complete-custom-validator'; +import { DmpProfileExternalAutoCompleteFieldDataEditorModel } from '@app/ui/admin/dmp-profile/editor/external-autocomplete/dmp-profile-external-autocomplete-field-editor.model'; +import { FunderFormModel } from '@app/ui/dmp/editor/grant-tab/funder-form-model'; +import { GrantTabModel } from '@app/ui/dmp/editor/grant-tab/grant-tab-model'; +import { ProjectFormModel } from '@app/ui/dmp/editor/grant-tab/project-form-model'; +import { BackendErrorValidator } from '@common/forms/validation/custom-validator'; +import { ValidationErrorModel } from '@common/forms/validation/error-model/validation-error-model'; +import { ValidationContext } from '@common/forms/validation/validation-context'; export class DmpEditorModel { public id: string; diff --git a/dmp-frontend/src/app/ui/dmp/editor/dmp-finalize-dialog/dmp-finalize-dialog.component.ts b/dmp-frontend/src/app/ui/dmp/editor/dmp-finalize-dialog/dmp-finalize-dialog.component.ts index 9708fff9a..c8aca013d 100644 --- a/dmp-frontend/src/app/ui/dmp/editor/dmp-finalize-dialog/dmp-finalize-dialog.component.ts +++ b/dmp-frontend/src/app/ui/dmp/editor/dmp-finalize-dialog/dmp-finalize-dialog.component.ts @@ -1,9 +1,9 @@ import { Component, Inject, OnInit } from '@angular/core'; import { MatDialogRef, MAT_DIALOG_DATA } from '@angular/material/dialog'; import { Router } from '@angular/router'; -import { BaseComponent } from '../../../../core/common/base/base.component'; -import { DatasetStatus } from '../../../../core/common/enum/dataset-status'; -import { DatasetService } from '../../../../core/services/dataset/dataset.service'; +import { DatasetStatus } from '@app/core/common/enum/dataset-status'; +import { DatasetService } from '@app/core/services/dataset/dataset.service'; +import { BaseComponent } from '@common/base/base.component'; @Component({ selector: 'app-dmp-finalize-dialog-component', diff --git a/dmp-frontend/src/app/ui/dmp/editor/general-tab/general-tab.component.ts b/dmp-frontend/src/app/ui/dmp/editor/general-tab/general-tab.component.ts index d678e2dab..99f8a01b9 100644 --- a/dmp-frontend/src/app/ui/dmp/editor/general-tab/general-tab.component.ts +++ b/dmp-frontend/src/app/ui/dmp/editor/general-tab/general-tab.component.ts @@ -2,24 +2,24 @@ import { Component, Input, OnInit } from '@angular/core'; import { FormGroup } from '@angular/forms'; import { MatDialog } from '@angular/material/dialog'; +import { DataTableRequest } from '@app/core/model/data-table/data-table-request'; +import { DatasetProfileModel } from '@app/core/model/dataset/dataset-profile'; +import { DmpProfileDefinition } from '@app/core/model/dmp-profile/dmp-profile'; +import { ExternalSourceItemModel } from '@app/core/model/external-sources/external-source-item'; +import { DatasetProfileCriteria } from '@app/core/query/dataset-profile/dataset-profile-criteria'; +import { DmpProfileCriteria } from '@app/core/query/dmp/dmp-profile-criteria'; +import { RequestItem } from '@app/core/query/request-item'; +import { DmpProfileService } from '@app/core/services/dmp/dmp-profile.service'; +import { DmpService } from '@app/core/services/dmp/dmp.service'; +import { ExternalSourcesService } from '@app/core/services/external-sources/external-sources.service'; +import { MultipleAutoCompleteConfiguration } from '@app/library/auto-complete/multiple/multiple-auto-complete-configuration'; +import { SingleAutoCompleteConfiguration } from '@app/library/auto-complete/single/single-auto-complete-configuration'; +import { AddResearcherComponent } from '@app/ui/dmp/editor/add-researcher/add-researcher.component'; +import { AvailableProfilesComponent } from '@app/ui/dmp/editor/available-profiles/available-profiles.component'; +import { BaseComponent } from '@common/base/base.component'; import { TranslateService } from '@ngx-translate/core'; import { Observable } from 'rxjs'; import { map, takeUntil } from 'rxjs/operators'; -import { BaseComponent } from '../../../../core/common/base/base.component'; -import { DataTableRequest } from '../../../../core/model/data-table/data-table-request'; -import { DatasetProfileModel } from '../../../../core/model/dataset/dataset-profile'; -import { DmpProfileDefinition } from '../../../../core/model/dmp-profile/dmp-profile'; -import { ExternalSourceItemModel } from '../../../../core/model/external-sources/external-source-item'; -import { DatasetProfileCriteria } from '../../../../core/query/dataset-profile/dataset-profile-criteria'; -import { DmpProfileCriteria } from '../../../../core/query/dmp/dmp-profile-criteria'; -import { RequestItem } from '../../../../core/query/request-item'; -import { DmpProfileService } from '../../../../core/services/dmp/dmp-profile.service'; -import { DmpService } from '../../../../core/services/dmp/dmp.service'; -import { ExternalSourcesService } from '../../../../core/services/external-sources/external-sources.service'; -import { MultipleAutoCompleteConfiguration } from '../../../../library/auto-complete/multiple/multiple-auto-complete-configuration'; -import { SingleAutoCompleteConfiguration } from '../../../../library/auto-complete/single/single-auto-complete-configuration'; -import { AddResearcherComponent } from '../add-researcher/add-researcher.component'; -import { AvailableProfilesComponent } from '../available-profiles/available-profiles.component'; @Component({ selector: 'app-general-tab', diff --git a/dmp-frontend/src/app/ui/dmp/editor/grant-tab/funder-form-model.ts b/dmp-frontend/src/app/ui/dmp/editor/grant-tab/funder-form-model.ts index 50a229331..76adf4e24 100644 --- a/dmp-frontend/src/app/ui/dmp/editor/grant-tab/funder-form-model.ts +++ b/dmp-frontend/src/app/ui/dmp/editor/grant-tab/funder-form-model.ts @@ -1,9 +1,10 @@ -import { Status } from "../../../../core/common/enum/Status"; -import { FunderModel } from "../../../../core/model/funder/funder"; -import { ValidationErrorModel } from "../../../../common/forms/validation/error-model/validation-error-model"; -import { ValidationContext } from "../../../../common/forms/validation/validation-context"; -import { FormGroup, FormBuilder, Validators } from "@angular/forms"; -import { BackendErrorValidator } from "../../../../common/forms/validation/custom-validator"; +import { FormBuilder, FormGroup, Validators } from '@angular/forms'; +import { Status } from '@app/core/common/enum/Status'; +import { FunderModel } from '@app/core/model/funder/funder'; +import { BackendErrorValidator } from '@common/forms/validation/custom-validator'; +import { ValidationErrorModel } from '@common/forms/validation/error-model/validation-error-model'; +import { ValidationContext } from '@common/forms/validation/validation-context'; + export class FunderFormModel { public id: string; diff --git a/dmp-frontend/src/app/ui/dmp/editor/grant-tab/grant-tab-model.ts b/dmp-frontend/src/app/ui/dmp/editor/grant-tab/grant-tab-model.ts index f89ca6cce..afba9fce2 100644 --- a/dmp-frontend/src/app/ui/dmp/editor/grant-tab/grant-tab-model.ts +++ b/dmp-frontend/src/app/ui/dmp/editor/grant-tab/grant-tab-model.ts @@ -1,10 +1,11 @@ -import { Status } from "../../../../core/common/enum/Status"; -import { GrantListingModel } from "../../../../core/model/grant/grant-listing"; -import { ValidationErrorModel } from "../../../../common/forms/validation/error-model/validation-error-model"; -import { ValidationContext } from "../../../../common/forms/validation/validation-context"; -import { FormBuilder, FormGroup, Validators } from "@angular/forms"; -import { BackendErrorValidator } from "../../../../common/forms/validation/custom-validator"; -import { ValidJsonValidator } from "../../../../library/auto-complete/auto-complete-custom-validator"; +import { FormBuilder, FormGroup, Validators } from '@angular/forms'; +import { Status } from '@app/core/common/enum/Status'; +import { GrantListingModel } from '@app/core/model/grant/grant-listing'; +import { ValidJsonValidator } from '@app/library/auto-complete/auto-complete-custom-validator'; +import { BackendErrorValidator } from '@common/forms/validation/custom-validator'; +import { ValidationErrorModel } from '@common/forms/validation/error-model/validation-error-model'; +import { ValidationContext } from '@common/forms/validation/validation-context'; + export class GrantTabModel { public id: string; diff --git a/dmp-frontend/src/app/ui/dmp/editor/grant-tab/grant-tab.component.ts b/dmp-frontend/src/app/ui/dmp/editor/grant-tab/grant-tab.component.ts index f76bf72e1..b39fe23fe 100644 --- a/dmp-frontend/src/app/ui/dmp/editor/grant-tab/grant-tab.component.ts +++ b/dmp-frontend/src/app/ui/dmp/editor/grant-tab/grant-tab.component.ts @@ -1,17 +1,17 @@ -import { Component, OnInit, Input } from '@angular/core'; +import { Component, Input, OnInit } from '@angular/core'; import { FormGroup } from '@angular/forms'; -import { SingleAutoCompleteConfiguration } from '../../../../library/auto-complete/single/single-auto-complete-configuration'; -import { RequestItem } from '../../../../core/query/request-item'; -import { GrantCriteria } from '../../../../core/query/grant/grant-criteria'; -import { GrantService } from '../../../../core/services/grant/grant.service'; -import { GrantTabModel } from './grant-tab-model'; -import { ProjectService } from '../../../../core/services/project/project.service'; -import { FunderService } from '../../../../core/services/funder/funder.service'; -import { FunderCriteria } from '../../../../core/query/funder/funder-criteria'; -import { ProjectCriteria } from '../../../../core/query/project/project-criteria'; +import { FunderCriteria } from '@app/core/query/funder/funder-criteria'; +import { GrantCriteria } from '@app/core/query/grant/grant-criteria'; +import { ProjectCriteria } from '@app/core/query/project/project-criteria'; +import { RequestItem } from '@app/core/query/request-item'; +import { FunderService } from '@app/core/services/funder/funder.service'; +import { GrantService } from '@app/core/services/grant/grant.service'; +import { ProjectService } from '@app/core/services/project/project.service'; +import { SingleAutoCompleteConfiguration } from '@app/library/auto-complete/single/single-auto-complete-configuration'; +import { GrantTabModel } from '@app/ui/dmp/editor/grant-tab/grant-tab-model'; +import { BaseComponent } from '@common/base/base.component'; import { TranslateService } from '@ngx-translate/core'; -import { takeUntil } from "rxjs/operators"; -import { BaseComponent } from "../../../../core/common/base/base.component"; +import { takeUntil } from 'rxjs/operators'; @Component({ selector: 'app-grant-tab', diff --git a/dmp-frontend/src/app/ui/dmp/editor/grant-tab/project-form-model.ts b/dmp-frontend/src/app/ui/dmp/editor/grant-tab/project-form-model.ts index 15e46491a..797dfee69 100644 --- a/dmp-frontend/src/app/ui/dmp/editor/grant-tab/project-form-model.ts +++ b/dmp-frontend/src/app/ui/dmp/editor/grant-tab/project-form-model.ts @@ -1,10 +1,10 @@ -import { Status } from "../../../../core/common/enum/Status"; -import { ProjectModel } from "../../../../core/model/project/project"; -import { ValidationErrorModel } from "../../../../common/forms/validation/error-model/validation-error-model"; -import { ValidationContext } from "../../../../common/forms/validation/validation-context"; -import { FormGroup, FormBuilder, Validators } from "@angular/forms"; -import { BackendErrorValidator } from "../../../../common/forms/validation/custom-validator"; -import { ValidJsonValidator } from "../../../../library/auto-complete/auto-complete-custom-validator"; +import { FormBuilder, FormGroup, Validators } from '@angular/forms'; +import { Status } from '@app/core/common/enum/Status'; +import { ProjectModel } from '@app/core/model/project/project'; +import { BackendErrorValidator } from '@common/forms/validation/custom-validator'; +import { ValidationErrorModel } from '@common/forms/validation/error-model/validation-error-model'; +import { ValidationContext } from '@common/forms/validation/validation-context'; + export class ProjectFormModel { public id: string; diff --git a/dmp-frontend/src/app/ui/dmp/editor/people-tab/people-tab.component.ts b/dmp-frontend/src/app/ui/dmp/editor/people-tab/people-tab.component.ts index 33678428f..1c303c446 100644 --- a/dmp-frontend/src/app/ui/dmp/editor/people-tab/people-tab.component.ts +++ b/dmp-frontend/src/app/ui/dmp/editor/people-tab/people-tab.component.ts @@ -1,12 +1,12 @@ import { Component, Input, OnInit } from '@angular/core'; import { FormGroup } from '@angular/forms'; import { MatDialog } from '@angular/material/dialog'; +import { ConfirmationDialogComponent } from '@common/modules/confirmation-dialog/confirmation-dialog.component'; import { TranslateService } from '@ngx-translate/core'; import { Principal } from '../../../../core/model/auth/Principal'; import { UserInfoListingModel } from '../../../../core/model/user/user-info-listing'; import { AuthService } from '../../../../core/services/auth/auth.service'; import { DmpService } from '../../../../core/services/dmp/dmp.service'; -import { ConfirmationDialogComponent } from '../../../../library/confirmation-dialog/confirmation-dialog.component'; import { DmpInvitationDialogComponent } from '../../invitation/dmp-invitation.component'; import { DmpEditorModel } from '../dmp-editor.model'; diff --git a/dmp-frontend/src/app/ui/dmp/invitation/accepted/dmp-invitation-accepted.component.ts b/dmp-frontend/src/app/ui/dmp/invitation/accepted/dmp-invitation-accepted.component.ts index 8441d4d6d..4f9f8726b 100644 --- a/dmp-frontend/src/app/ui/dmp/invitation/accepted/dmp-invitation-accepted.component.ts +++ b/dmp-frontend/src/app/ui/dmp/invitation/accepted/dmp-invitation-accepted.component.ts @@ -1,8 +1,8 @@ import { Component, OnInit } from '@angular/core'; import { ActivatedRoute, Router } from '@angular/router'; +import { DmpInvitationService } from '@app/core/services/dmp/dmp-invitation.service'; +import { BaseComponent } from '@common/base/base.component'; import { takeUntil } from 'rxjs/operators'; -import { BaseComponent } from '../../../../core/common/base/base.component'; -import { DmpInvitationService } from '../../../../core/services/dmp/dmp-invitation.service'; @Component({ selector: 'app-dmp-invitation-accepted-component', diff --git a/dmp-frontend/src/app/ui/dmp/invitation/dmp-invitation.component.ts b/dmp-frontend/src/app/ui/dmp/invitation/dmp-invitation.component.ts index ed144faf8..bbda70d88 100644 --- a/dmp-frontend/src/app/ui/dmp/invitation/dmp-invitation.component.ts +++ b/dmp-frontend/src/app/ui/dmp/invitation/dmp-invitation.component.ts @@ -1,22 +1,19 @@ -import {map, takeUntil } from 'rxjs/operators'; import { COMMA, ENTER } from '@angular/cdk/keycodes'; import { Component, Inject, OnInit } from '@angular/core'; import { FormGroup } from '@angular/forms'; import { MatChipInputEvent } from '@angular/material/chips'; import { MatDialogRef, MAT_DIALOG_DATA } from '@angular/material/dialog'; import { ActivatedRoute, Router } from '@angular/router'; +import { DmpInvitation } from '@app/core/model/dmp/invitation/dmp-invitation'; +import { DmpInvitationUser } from '@app/core/model/dmp/invitation/dmp-invitation-user'; +import { DmpInvitationUserCriteria } from '@app/core/query/dmp/dmp-invitation-user-criteria'; +import { RequestItem } from '@app/core/query/request-item'; +import { DmpInvitationService } from '@app/core/services/dmp/dmp-invitation.service'; +import { MultipleAutoCompleteConfiguration } from '@app/library/auto-complete/multiple/multiple-auto-complete-configuration'; +import { BaseComponent } from '@common/base/base.component'; import { Observable } from 'rxjs'; -import { BaseComponent } from '../../../core/common/base/base.component'; -import { DmpInvitation } from '../../../core/model/dmp/invitation/dmp-invitation'; -import { DmpInvitationUser } from '../../../core/model/dmp/invitation/dmp-invitation-user'; -import { DmpInvitationUserCriteria } from '../../../core/query/dmp/dmp-invitation-user-criteria'; -import { RequestItem } from '../../../core/query/request-item'; -import { DmpInvitationService } from '../../../core/services/dmp/dmp-invitation.service'; -import { MultipleAutoCompleteConfiguration } from '../../../library/auto-complete/multiple/multiple-auto-complete-configuration'; - - - +import { map, takeUntil } from 'rxjs/operators'; @Component({ selector: 'app-invitation-component', @@ -38,7 +35,7 @@ export class DmpInvitationDialogComponent extends BaseComponent implements OnIni usersAutoCompleteConfiguration: MultipleAutoCompleteConfiguration = { filterFn: this.filterUsers.bind(this), - initialItems: (excludedItems: any[]) => this.filterUsers('').pipe(map(result => result.filter(resultItem => excludedItems.map(x => x.id).indexOf(resultItem.id) === -1))), + initialItems: (excludedItems: any[]) => this.filterUsers('').pipe(map(result => result.filter(resultItem => (excludedItems || []).map(x => x.id).indexOf(resultItem.id) === -1))), displayFn: (item) => item.name, titleFn: (item) => item.name }; diff --git a/dmp-frontend/src/app/ui/dmp/listing/criteria/dmp-criteria.component.ts b/dmp-frontend/src/app/ui/dmp/listing/criteria/dmp-criteria.component.ts index 88b4a0940..d6b20728d 100644 --- a/dmp-frontend/src/app/ui/dmp/listing/criteria/dmp-criteria.component.ts +++ b/dmp-frontend/src/app/ui/dmp/listing/criteria/dmp-criteria.component.ts @@ -1,25 +1,25 @@ -import {map, takeUntil } from 'rxjs/operators'; import { Component, Input, OnInit } from '@angular/core'; import { FormBuilder, FormControl } from '@angular/forms'; import { MatDialog } from '@angular/material/dialog'; +import { DataTableRequest } from '@app/core/model/data-table/data-table-request'; +import { GrantListingModel } from '@app/core/model/grant/grant-listing'; +import { DatasetProfileCriteria } from '@app/core/query/dataset-profile/dataset-profile-criteria'; +import { DmpCriteria } from '@app/core/query/dmp/dmp-criteria'; +import { GrantCriteria } from '@app/core/query/grant/grant-criteria'; +import { OrganisationCriteria } from '@app/core/query/organisation/organisation-criteria'; +import { UserCriteria } from '@app/core/query/user/user-criteria'; +import { DatasetProfileService } from '@app/core/services/dataset-profile/dataset-profile.service'; +import { DmpService } from '@app/core/services/dmp/dmp.service'; +import { GrantService } from '@app/core/services/grant/grant.service'; +import { OrganisationService } from '@app/core/services/organisation/organisation.service'; +import { UserService } from '@app/core/services/user/user.service'; +import { MultipleAutoCompleteConfiguration } from '@app/library/auto-complete/multiple/multiple-auto-complete-configuration'; +import { DmpUploadDialogue } from '@app/ui/dmp/listing/criteria/upload-dialogue/dmp-upload-dialogue.component'; +import { BaseCriteriaComponent } from '@app/ui/misc/criteria/base-criteria.component'; +import { ValidationErrorModel } from '@common/forms/validation/error-model/validation-error-model'; import { TranslateService } from '@ngx-translate/core'; -import { ValidationErrorModel } from '../../../../common/forms/validation/error-model/validation-error-model'; -import { DataTableRequest } from '../../../../core/model/data-table/data-table-request'; -import { GrantListingModel } from '../../../../core/model/grant/grant-listing'; -import { DmpCriteria } from '../../../../core/query/dmp/dmp-criteria'; -import { OrganisationCriteria } from '../../../../core/query/organisation/organisation-criteria'; -import { GrantCriteria } from '../../../../core/query/grant/grant-criteria'; -import { UserCriteria } from '../../../../core/query/user/user-criteria'; -import { DmpService } from '../../../../core/services/dmp/dmp.service'; -import { OrganisationService } from '../../../../core/services/organisation/organisation.service'; -import { GrantService } from '../../../../core/services/grant/grant.service'; -import { UserService } from '../../../../core/services/user/user.service'; -import { MultipleAutoCompleteConfiguration } from '../../../../library/auto-complete/multiple/multiple-auto-complete-configuration'; -import { BaseCriteriaComponent } from '../../../misc/criteria/base-criteria.component'; -import { DmpUploadDialogue } from './upload-dialogue/dmp-upload-dialogue.component'; -import { DatasetProfileCriteria } from '../../../../core/query/dataset-profile/dataset-profile-criteria'; -import { DatasetProfileService } from '../../../../core/services/dataset-profile/dataset-profile.service'; +import { map, takeUntil } from 'rxjs/operators'; @Component({ selector: 'app-dmp-criteria-component', @@ -47,14 +47,14 @@ export class DmpCriteriaComponent extends BaseCriteriaComponent implements OnIni collaboratorsAutoCompleteConfiguration: MultipleAutoCompleteConfiguration = { filterFn: this.filterCollaborators.bind(this), - initialItems: (excludedItems: any[]) => this.filterCollaborators('').pipe(map(result => result.filter(resultItem => excludedItems.map(x => x.id).indexOf(resultItem.id) === -1))), + initialItems: (excludedItems: any[]) => this.filterCollaborators('').pipe(map(result => result.filter(resultItem => (excludedItems || []).map(x => x.id).indexOf(resultItem.id) === -1))), displayFn: (item) => item['name'], titleFn: (item) => item['name'] }; datasetTemplateAutoCompleteConfiguration: MultipleAutoCompleteConfiguration = { filterFn: this.filterDatasetTemplate.bind(this), - initialItems: (excludedItems: any[]) => this.filterDatasetTemplate('').pipe(map(result => result.filter(resultItem => excludedItems.map(x => x.id).indexOf(resultItem.id) === -1))), + initialItems: (excludedItems: any[]) => this.filterDatasetTemplate('').pipe(map(result => result.filter(resultItem => (excludedItems || []).map(x => x.id).indexOf(resultItem.id) === -1))), displayFn: (item) => item['label'], titleFn: (item) => item['label'], subtitleFn: (item) => item['description'] @@ -62,14 +62,14 @@ export class DmpCriteriaComponent extends BaseCriteriaComponent implements OnIni grantAutoCompleteConfiguration: MultipleAutoCompleteConfiguration = { filterFn: this.filterGrant.bind(this), - initialItems: (excludedItems: any[]) => this.filterGrant('').pipe(map(result => result.filter(resultItem => excludedItems.map(x => x.id).indexOf(resultItem.id) === -1))), + initialItems: (excludedItems: any[]) => this.filterGrant('').pipe(map(result => result.filter(resultItem => (excludedItems || []).map(x => x.id).indexOf(resultItem.id) === -1))), displayFn: (item) => item['label'], titleFn: (item) => item['label'] }; organisationAutoCompleteConfiguration: MultipleAutoCompleteConfiguration = { filterFn: this.filterOrganisations.bind(this), - initialItems: (excludedItems: any[]) => this.filterOrganisations('').pipe(map(result => result.filter(resultItem => excludedItems.map(x => x.id).indexOf(resultItem.id) === -1))), + initialItems: (excludedItems: any[]) => this.filterOrganisations('').pipe(map(result => result.filter(resultItem => (excludedItems || []).map(x => x.id).indexOf(resultItem.id) === -1))), displayFn: (item) => item['name'], titleFn: (item) => item['name'] } diff --git a/dmp-frontend/src/app/ui/dmp/listing/dmp-listing.component.ts b/dmp-frontend/src/app/ui/dmp/listing/dmp-listing.component.ts index 6debbbd2c..b4bcedc2b 100644 --- a/dmp-frontend/src/app/ui/dmp/listing/dmp-listing.component.ts +++ b/dmp-frontend/src/app/ui/dmp/listing/dmp-listing.component.ts @@ -1,23 +1,23 @@ -import {of as observableOf, Observable } from 'rxjs'; import { Component, OnInit, ViewChild } from '@angular/core'; import { MatDialog } from '@angular/material/dialog'; import { MatPaginator } from '@angular/material/paginator'; import { MatSort } from '@angular/material/sort'; import { ActivatedRoute, Router } from '@angular/router'; -import { takeUntil } from 'rxjs/operators'; -import { BaseComponent } from '../../../core/common/base/base.component'; -import { DataTableRequest } from '../../../core/model/data-table/data-table-request'; -import { DmpListingModel } from '../../../core/model/dmp/dmp-listing'; -import { GrantListingModel } from '../../../core/model/grant/grant-listing'; -import { DmpCriteria } from '../../../core/query/dmp/dmp-criteria'; -import { DmpService } from '../../../core/services/dmp/dmp.service'; -import { EnumUtils } from '../../../core/services/utilities/enum-utils.service'; -import { BreadcrumbItem } from '../../misc/breadcrumb/definition/breadcrumb-item'; -import { IBreadCrumbComponent } from '../../misc/breadcrumb/definition/IBreadCrumbComponent'; -import { DmpInvitationDialogComponent } from '../invitation/dmp-invitation.component'; -import { DmpCriteriaComponent } from './criteria/dmp-criteria.component'; +import { DataTableRequest } from '@app/core/model/data-table/data-table-request'; +import { DmpListingModel } from '@app/core/model/dmp/dmp-listing'; +import { GrantListingModel } from '@app/core/model/grant/grant-listing'; +import { DmpCriteria } from '@app/core/query/dmp/dmp-criteria'; +import { DmpService } from '@app/core/services/dmp/dmp.service'; +import { EnumUtils } from '@app/core/services/utilities/enum-utils.service'; +import { DmpInvitationDialogComponent } from '@app/ui/dmp/invitation/dmp-invitation.component'; +import { DmpCriteriaComponent } from '@app/ui/dmp/listing/criteria/dmp-criteria.component'; +import { BreadcrumbItem } from '@app/ui/misc/breadcrumb/definition/breadcrumb-item'; +import { IBreadCrumbComponent } from '@app/ui/misc/breadcrumb/definition/IBreadCrumbComponent'; +import { BaseComponent } from '@common/base/base.component'; import { TranslateService } from '@ngx-translate/core'; +import { Observable, of as observableOf } from 'rxjs'; +import { takeUntil } from 'rxjs/operators'; @Component({ selector: 'app-dmp-listing-component', diff --git a/dmp-frontend/src/app/ui/dmp/overview/dmp-overview.component.ts b/dmp-frontend/src/app/ui/dmp/overview/dmp-overview.component.ts index 39b5bc55f..8c6a92406 100644 --- a/dmp-frontend/src/app/ui/dmp/overview/dmp-overview.component.ts +++ b/dmp-frontend/src/app/ui/dmp/overview/dmp-overview.component.ts @@ -1,25 +1,25 @@ -import {of as observableOf, Observable } from 'rxjs'; import { Component, OnInit } from '@angular/core'; import { MatDialog } from '@angular/material/dialog'; import { ActivatedRoute, Params, Router } from '@angular/router'; +import { DatasetStatus } from '@app/core/common/enum/dataset-status'; +import { DmpStatus } from '@app/core/common/enum/dmp-status'; +import { Principal } from '@app/core/model/auth/Principal'; +import { DatasetOverviewModel } from '@app/core/model/dataset/dataset-overview'; +import { DatasetsToBeFinalized } from '@app/core/model/dataset/datasets-toBeFinalized'; +import { DmpOverviewModel } from '@app/core/model/dmp/dmp-overview'; +import { UserInfoListingModel } from '@app/core/model/user/user-info-listing'; +import { AuthService } from '@app/core/services/auth/auth.service'; +import { DmpService } from '@app/core/services/dmp/dmp.service'; +import { SnackBarNotificationLevel, UiNotificationService } from '@app/core/services/notification/ui-notification-service'; +import { ConfirmationDialogComponent } from '@common/modules/confirmation-dialog/confirmation-dialog.component'; +import { DmpFinalizeDialogComponent, DmpFinalizeDialogInput, DmpFinalizeDialogOutput } from '@app/ui/dmp/editor/dmp-finalize-dialog/dmp-finalize-dialog.component'; +import { BreadcrumbItem } from '@app/ui/misc/breadcrumb/definition/breadcrumb-item'; +import { BaseComponent } from '@common/base/base.component'; import { TranslateService } from '@ngx-translate/core'; import * as FileSaver from 'file-saver'; +import { Observable, of as observableOf } from 'rxjs'; import { takeUntil } from 'rxjs/operators'; -import { BaseComponent } from '../../../core/common/base/base.component'; -import { DatasetStatus } from '../../../core/common/enum/dataset-status'; -import { DmpStatus } from '../../../core/common/enum/dmp-status'; -import { Principal } from '../../../core/model/auth/Principal'; -import { DatasetOverviewModel } from '../../../core/model/dataset/dataset-overview'; -import { DmpOverviewModel } from '../../../core/model/dmp/dmp-overview'; -import { UserInfoListingModel } from '../../../core/model/user/user-info-listing'; -import { AuthService } from '../../../core/services/auth/auth.service'; -import { DmpService } from '../../../core/services/dmp/dmp.service'; -import { SnackBarNotificationLevel, UiNotificationService } from '../../../core/services/notification/ui-notification-service'; -import { ConfirmationDialogComponent } from '../../../library/confirmation-dialog/confirmation-dialog.component'; -import { BreadcrumbItem } from '../../misc/breadcrumb/definition/breadcrumb-item'; -import { DmpFinalizeDialogComponent, DmpFinalizeDialogInput, DmpFinalizeDialogOutput } from '../editor/dmp-finalize-dialog/dmp-finalize-dialog.component'; -import { DatasetsToBeFinalized } from '../../../core/model/dataset/datasets-toBeFinalized'; @Component({ selector: 'app-dmp-overview', diff --git a/dmp-frontend/src/app/ui/dmp/overview/dmp-overview.module.ts b/dmp-frontend/src/app/ui/dmp/overview/dmp-overview.module.ts index 5969e5e58..269c70146 100644 --- a/dmp-frontend/src/app/ui/dmp/overview/dmp-overview.module.ts +++ b/dmp-frontend/src/app/ui/dmp/overview/dmp-overview.module.ts @@ -1,12 +1,12 @@ import { NgModule } from '@angular/core'; -import { CommonFormsModule } from '../../../common/forms/common-forms.module'; -import { CommonUiModule } from '../../../common/ui/common-ui.module'; -import { FormattingModule } from '../../../core/formatting.module'; -import { AutoCompleteModule } from '../../../library/auto-complete/auto-complete.module'; -import { ConfirmationDialogModule } from '../../../library/confirmation-dialog/confirmation-dialog.module'; -import { UrlListingModule } from '../../../library/url-listing/url-listing.module'; -import { DmpOverviewComponent } from './dmp-overview.component'; -import { ExportMethodDialogModule } from '../../../library/export-method-dialog/export-method-dialog.module'; +import { FormattingModule } from '@app/core/formatting.module'; +import { AutoCompleteModule } from '@app/library/auto-complete/auto-complete.module'; +import { ConfirmationDialogModule } from '@common/modules/confirmation-dialog/confirmation-dialog.module'; +import { ExportMethodDialogModule } from '@app/library/export-method-dialog/export-method-dialog.module'; +import { UrlListingModule } from '@app/library/url-listing/url-listing.module'; +import { DmpOverviewComponent } from '@app/ui/dmp/overview/dmp-overview.component'; +import { CommonFormsModule } from '@common/forms/common-forms.module'; +import { CommonUiModule } from '@common/ui/common-ui.module'; @NgModule({ imports: [ diff --git a/dmp-frontend/src/app/ui/dmp/wizard/dmp-wizard-editor.model.ts b/dmp-frontend/src/app/ui/dmp/wizard/dmp-wizard-editor.model.ts index 1f42b1ab2..7b24cb3d6 100644 --- a/dmp-frontend/src/app/ui/dmp/wizard/dmp-wizard-editor.model.ts +++ b/dmp-frontend/src/app/ui/dmp/wizard/dmp-wizard-editor.model.ts @@ -1,20 +1,19 @@ import { FormBuilder, FormGroup, Validators } from "@angular/forms"; -import { BackendErrorValidator } from "../../../common/forms/validation/custom-validator"; -import { ValidationErrorModel } from "../../../common/forms/validation/error-model/validation-error-model"; -import { ValidationContext } from "../../../common/forms/validation/validation-context"; -import { Status } from "../../../core/common/enum/Status"; -import { DmpProfile, DmpProfileDefinition } from "../../../core/model/dmp-profile/dmp-profile"; -import { DmpModel } from "../../../core/model/dmp/dmp"; -import { DmpDynamicField } from "../../../core/model/dmp/dmp-dynamic-field"; -import { DmpDynamicFieldDependency } from "../../../core/model/dmp/dmp-dynamic-field-dependency"; -import { OrganizationModel } from "../../../core/model/organisation/organization"; -import { GrantListingModel } from "../../../core/model/grant/grant-listing"; -import { ResearcherModel } from "../../../core/model/researcher/researcher"; -import { UserModel } from "../../../core/model/user/user"; -import { ValidJsonValidator } from "../../../library/auto-complete/auto-complete-custom-validator"; -import { FunderFormModel } from "../editor/grant-tab/funder-form-model"; -import { ProjectFormModel } from "../editor/grant-tab/project-form-model"; -import { GrantTabModel } from "../editor/grant-tab/grant-tab-model"; +import { Status } from '@app/core/common/enum/Status'; +import { DmpProfile, DmpProfileDefinition } from '@app/core/model/dmp-profile/dmp-profile'; +import { DmpModel } from '@app/core/model/dmp/dmp'; +import { DmpDynamicField } from '@app/core/model/dmp/dmp-dynamic-field'; +import { DmpDynamicFieldDependency } from '@app/core/model/dmp/dmp-dynamic-field-dependency'; +import { OrganizationModel } from '@app/core/model/organisation/organization'; +import { ResearcherModel } from '@app/core/model/researcher/researcher'; +import { UserModel } from '@app/core/model/user/user'; +import { ValidJsonValidator } from '@app/library/auto-complete/auto-complete-custom-validator'; +import { FunderFormModel } from '@app/ui/dmp/editor/grant-tab/funder-form-model'; +import { GrantTabModel } from '@app/ui/dmp/editor/grant-tab/grant-tab-model'; +import { ProjectFormModel } from '@app/ui/dmp/editor/grant-tab/project-form-model'; +import { BackendErrorValidator } from '@common/forms/validation/custom-validator'; +import { ValidationErrorModel } from '@common/forms/validation/error-model/validation-error-model'; +import { ValidationContext } from '@common/forms/validation/validation-context'; export class DmpWizardEditorModel { public id: string; diff --git a/dmp-frontend/src/app/ui/dmp/wizard/dmp-wizard.component.ts b/dmp-frontend/src/app/ui/dmp/wizard/dmp-wizard.component.ts index 10d9901b8..83e8444a8 100644 --- a/dmp-frontend/src/app/ui/dmp/wizard/dmp-wizard.component.ts +++ b/dmp-frontend/src/app/ui/dmp/wizard/dmp-wizard.component.ts @@ -1,24 +1,23 @@ -import {of as observableOf, Observable } from 'rxjs'; - -import {map, takeUntil } from 'rxjs/operators'; +import { HttpErrorResponse } from '@angular/common/http'; import { Component, OnInit } from '@angular/core'; import { FormGroup } from '@angular/forms'; import { MatSnackBar } from '@angular/material/snack-bar'; import { ActivatedRoute, Params, Router } from '@angular/router'; +import { DmpModel } from '@app/core/model/dmp/dmp'; +import { DmpService } from '@app/core/services/dmp/dmp.service'; +import { SnackBarNotificationLevel, UiNotificationService } from '@app/core/services/notification/ui-notification-service'; +import { FunderFormModel } from '@app/ui/dmp/editor/grant-tab/funder-form-model'; +import { GrantTabModel } from '@app/ui/dmp/editor/grant-tab/grant-tab-model'; +import { ProjectFormModel } from '@app/ui/dmp/editor/grant-tab/project-form-model'; +import { DmpWizardEditorModel } from '@app/ui/dmp/wizard/dmp-wizard-editor.model'; +import { BreadcrumbItem } from '@app/ui/misc/breadcrumb/definition/breadcrumb-item'; +import { IBreadCrumbComponent } from '@app/ui/misc/breadcrumb/definition/IBreadCrumbComponent'; +import { BaseComponent } from '@common/base/base.component'; +import { ValidationErrorModel } from '@common/forms/validation/error-model/validation-error-model'; import { TranslateService } from '@ngx-translate/core'; -import { ValidationErrorModel } from '../../../common/forms/validation/error-model/validation-error-model'; -import { BaseComponent } from '../../../core/common/base/base.component'; -import { DmpModel } from '../../../core/model/dmp/dmp'; -import { DmpService } from '../../../core/services/dmp/dmp.service'; -import { BreadcrumbItem } from '../../misc/breadcrumb/definition/breadcrumb-item'; -import { IBreadCrumbComponent } from '../../misc/breadcrumb/definition/IBreadCrumbComponent'; -import { DmpWizardEditorModel } from './dmp-wizard-editor.model'; -import { SnackBarNotificationLevel, UiNotificationService } from '../../../core/services/notification/ui-notification-service'; -import { HttpErrorResponse } from '@angular/common/http'; -import { GrantTabModel } from '../editor/grant-tab/grant-tab-model'; -import { ProjectFormModel } from '../editor/grant-tab/project-form-model'; -import { FunderFormModel } from '../editor/grant-tab/funder-form-model'; +import { Observable, of as observableOf } from 'rxjs'; +import { map, takeUntil } from 'rxjs/operators'; @Component({ selector: 'app-dmp-wizard-component', 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 f62972f4e..90ba33cee 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 @@ -1,25 +1,25 @@ -import {map, takeUntil } from 'rxjs/operators'; import { Component, Input, OnInit } from '@angular/core'; import { FormGroup } from '@angular/forms'; import { MatSnackBar } from '@angular/material/snack-bar'; import { ActivatedRoute, Router } from '@angular/router'; +import { DatasetProfileModel } from '@app/core/model/dataset/dataset-profile'; +import { ExternalSourceItemModel } from '@app/core/model/external-sources/external-source-item'; +import { UserModel } from '@app/core/model/user/user'; +import { BaseCriteria } from '@app/core/query/base-criteria'; +import { DatasetProfileCriteria } from '@app/core/query/dataset-profile/dataset-profile-criteria'; +import { GrantCriteria } from '@app/core/query/grant/grant-criteria'; +import { RequestItem } from '@app/core/query/request-item'; +import { DmpService } from '@app/core/services/dmp/dmp.service'; +import { ExternalSourcesService } from '@app/core/services/external-sources/external-sources.service'; +import { GrantService } from '@app/core/services/grant/grant.service'; +import { SnackBarNotificationLevel, UiNotificationService } from '@app/core/services/notification/ui-notification-service'; +import { MultipleAutoCompleteConfiguration } from '@app/library/auto-complete/multiple/multiple-auto-complete-configuration'; +import { SingleAutoCompleteConfiguration } from '@app/library/auto-complete/single/single-auto-complete-configuration'; +import { BaseComponent } from '@common/base/base.component'; import { TranslateService } from '@ngx-translate/core'; import { Observable } from 'rxjs'; -import { BaseComponent } from '../../../../core/common/base/base.component'; -import { DatasetProfileModel } from '../../../../core/model/dataset/dataset-profile'; -import { ExternalSourceItemModel } from '../../../../core/model/external-sources/external-source-item'; -import { UserModel } from '../../../../core/model/user/user'; -import { BaseCriteria } from '../../../../core/query/base-criteria'; -import { DatasetProfileCriteria } from '../../../../core/query/dataset-profile/dataset-profile-criteria'; -import { GrantCriteria } from '../../../../core/query/grant/grant-criteria'; -import { RequestItem } from '../../../../core/query/request-item'; -import { DmpService } from '../../../../core/services/dmp/dmp.service'; -import { ExternalSourcesService } from '../../../../core/services/external-sources/external-sources.service'; -import { GrantService } from '../../../../core/services/grant/grant.service'; -import { MultipleAutoCompleteConfiguration } from '../../../../library/auto-complete/multiple/multiple-auto-complete-configuration'; -import { SingleAutoCompleteConfiguration } from '../../../../library/auto-complete/single/single-auto-complete-configuration'; -import { SnackBarNotificationLevel, UiNotificationService } from '../../../../core/services/notification/ui-notification-service'; +import { map, takeUntil } from 'rxjs/operators'; @Component({ selector: 'app-dmp-wizard-editor-component', @@ -73,21 +73,21 @@ export class DmpWizardEditorComponent extends BaseComponent implements OnInit { this.profilesAutoCompleteConfiguration = { filterFn: this.filterProfiles.bind(this), - initialItems: (excludedItems: any[]) => this.filterProfiles('').pipe(map(result => result.filter(resultItem => excludedItems.map(x => x.id).indexOf(resultItem.id) === -1))), + initialItems: (excludedItems: any[]) => this.filterProfiles('').pipe(map(result => result.filter(resultItem => (excludedItems || []).map(x => x.id).indexOf(resultItem.id) === -1))), displayFn: (item) => item['label'], titleFn: (item) => item['label'] }; this.organisationsAutoCompleteConfiguration = { filterFn: this.filterOrganisations.bind(this), - initialItems: (excludedItems: any[]) => this.filterOrganisations('').pipe(map(result => result.filter(resultItem => excludedItems.map(x => x.id).indexOf(resultItem.id) === -1))), + initialItems: (excludedItems: any[]) => this.filterOrganisations('').pipe(map(result => result.filter(resultItem => (excludedItems || []).map(x => x.id).indexOf(resultItem.id) === -1))), displayFn: (item) => item['name'], titleFn: (item) => item['name'] }; this.researchersAutoCompleteConfiguration = { filterFn: this.filterResearchers.bind(this), - initialItems: (excludedItems: any[]) => this.filterResearchers('').pipe(map(result => result.filter(resultItem => excludedItems.map(x => x.id).indexOf(resultItem.id) === -1))), + initialItems: (excludedItems: any[]) => this.filterResearchers('').pipe(map(result => result.filter(resultItem => (excludedItems || []).map(x => x.id).indexOf(resultItem.id) === -1))), displayFn: (item) => item['name'], titleFn: (item) => item['name'] }; @@ -137,9 +137,9 @@ export class DmpWizardEditorComponent extends BaseComponent implements OnInit { } - availableProfiles() {} + availableProfiles() { } - addResearcher() {} + addResearcher() { } public cancel(): void { this.router.navigate(['/plans']); diff --git a/dmp-frontend/src/app/ui/dmp/wizard/listing/dmp-wizard-dataset-listing.component.ts b/dmp-frontend/src/app/ui/dmp/wizard/listing/dmp-wizard-dataset-listing.component.ts index 5d1d7c131..210b7034b 100644 --- a/dmp-frontend/src/app/ui/dmp/wizard/listing/dmp-wizard-dataset-listing.component.ts +++ b/dmp-frontend/src/app/ui/dmp/wizard/listing/dmp-wizard-dataset-listing.component.ts @@ -5,15 +5,15 @@ import { MatPaginator } from '@angular/material/paginator'; import { MatSnackBar } from '@angular/material/snack-bar'; import { MatSort } from '@angular/material/sort'; import { ActivatedRoute, Params, Router } from '@angular/router'; +import { DataTableRequest } from '@app/core/model/data-table/data-table-request'; +import { DatasetListingModel } from '@app/core/model/dataset/dataset-listing'; +import { DatasetCriteria } from '@app/core/query/dataset/dataset-criteria'; +import { DatasetService } from '@app/core/services/dataset/dataset.service'; +import { DmpService } from '@app/core/services/dmp/dmp.service'; +import { DatasetCriteriaComponent } from '@app/ui/dataset/listing/criteria/dataset-criteria.component'; +import { BaseComponent } from '@common/base/base.component'; import { TranslateService } from '@ngx-translate/core'; 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 { DatasetCriteria } from '../../../../core/query/dataset/dataset-criteria'; -import { DatasetService } from '../../../../core/services/dataset/dataset.service'; -import { DmpService } from '../../../../core/services/dmp/dmp.service'; -import { DatasetCriteriaComponent } from '../../../dataset/listing/criteria/dataset-criteria.component'; @Component({ selector: 'app-dmp-wizard-dataset-listing-component', diff --git a/dmp-frontend/src/app/ui/explore-dataset/explore-dataset-listing.component.ts b/dmp-frontend/src/app/ui/explore-dataset/explore-dataset-listing.component.ts index cde24dce1..c3d83154b 100644 --- a/dmp-frontend/src/app/ui/explore-dataset/explore-dataset-listing.component.ts +++ b/dmp-frontend/src/app/ui/explore-dataset/explore-dataset-listing.component.ts @@ -1,18 +1,18 @@ -import {of as observableOf, Observable } from 'rxjs'; -import { Component, OnInit, ViewChild, ɵConsole } from '@angular/core'; +import { Component, OnInit, ViewChild } from '@angular/core'; import { MatPaginator } from '@angular/material/paginator'; import { MatSort } from '@angular/material/sort'; -import { Router, ActivatedRoute, Params } from '@angular/router'; -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 { ExploreDatasetCriteriaModel } from '../../core/query/explore-dataset/explore-dataset-criteria'; -import { DatasetService } from '../../core/services/dataset/dataset.service'; -import { IBreadCrumbComponent } from '../misc/breadcrumb/definition/IBreadCrumbComponent'; -import { BreadcrumbItem } from '../misc/breadcrumb/definition/breadcrumb-item'; +import { ActivatedRoute, Params, Router } from '@angular/router'; +import { DataTableRequest } from '@app/core/model/data-table/data-table-request'; +import { DatasetListingModel } from '@app/core/model/dataset/dataset-listing'; +import { ExploreDatasetCriteriaModel } from '@app/core/query/explore-dataset/explore-dataset-criteria'; +import { DatasetService } from '@app/core/services/dataset/dataset.service'; +import { DmpService } from '@app/core/services/dmp/dmp.service'; +import { BaseComponent } from '@common/base/base.component'; import { TranslateService } from '@ngx-translate/core'; -import { DmpService } from '../../core/services/dmp/dmp.service'; +import { Observable, of as observableOf } from 'rxjs'; +import { takeUntil } from 'rxjs/operators'; +import { BreadcrumbItem } from '../misc/breadcrumb/definition/breadcrumb-item'; +import { IBreadCrumbComponent } from '../misc/breadcrumb/definition/IBreadCrumbComponent'; @Component({ diff --git a/dmp-frontend/src/app/ui/explore-dataset/explore-dataset.module.ts b/dmp-frontend/src/app/ui/explore-dataset/explore-dataset.module.ts index d8598add3..b06554524 100644 --- a/dmp-frontend/src/app/ui/explore-dataset/explore-dataset.module.ts +++ b/dmp-frontend/src/app/ui/explore-dataset/explore-dataset.module.ts @@ -1,12 +1,12 @@ import { NgModule } from '@angular/core'; -import { CommonFormsModule } from '../../common/forms/common-forms.module'; -import { CommonUiModule } from '../../common/ui/common-ui.module'; -import { AutoCompleteModule } from '../../library/auto-complete/auto-complete.module'; -import { ExploreDatasetListingComponent } from './explore-dataset-listing.component'; -import { ExploreDatasetRoutingModule } from './explore-dataset.routing'; -import { ExploreDatasetFilterItemComponent } from './filters/explore-dataset-filter-item/explore-dataset-filter-item.component'; -import { ExploreDatasetFiltersComponent } from './filters/explore-dataset-filters.component'; -import { ExploreDatasetListingItemComponent } from './listing-item/explore-dataset-listing-item.component'; +import { AutoCompleteModule } from '@app/library/auto-complete/auto-complete.module'; +import { ExploreDatasetListingComponent } from '@app/ui/explore-dataset/explore-dataset-listing.component'; +import { ExploreDatasetRoutingModule } from '@app/ui/explore-dataset/explore-dataset.routing'; +import { ExploreDatasetFilterItemComponent } from '@app/ui/explore-dataset/filters/explore-dataset-filter-item/explore-dataset-filter-item.component'; +import { ExploreDatasetFiltersComponent } from '@app/ui/explore-dataset/filters/explore-dataset-filters.component'; +import { ExploreDatasetListingItemComponent } from '@app/ui/explore-dataset/listing-item/explore-dataset-listing-item.component'; +import { CommonFormsModule } from '@common/forms/common-forms.module'; +import { CommonUiModule } from '@common/ui/common-ui.module'; @NgModule({ imports: [ diff --git a/dmp-frontend/src/app/ui/explore-dataset/filters/explore-dataset-filter-item/explore-dataset-filter-item.component.ts b/dmp-frontend/src/app/ui/explore-dataset/filters/explore-dataset-filter-item/explore-dataset-filter-item.component.ts index 718f7baea..fddaa4b57 100644 --- a/dmp-frontend/src/app/ui/explore-dataset/filters/explore-dataset-filter-item/explore-dataset-filter-item.component.ts +++ b/dmp-frontend/src/app/ui/explore-dataset/filters/explore-dataset-filter-item/explore-dataset-filter-item.component.ts @@ -1,12 +1,12 @@ -import {of as observableOf, Observable } from 'rxjs'; - -import {distinctUntilChanged, debounceTime, takeUntil } from 'rxjs/operators'; import { SelectionModel } from '@angular/cdk/collections'; import { Component, EventEmitter, Input, OnInit, Output, ViewChild } from '@angular/core'; import { FormControl } from '@angular/forms'; import { MatListOption, MatSelectionList } from '@angular/material/list'; -import { BaseComponent } from '../../../../core/common/base/base.component'; +import { BaseComponent } from '@common/base/base.component'; +import { Observable, of as observableOf } from 'rxjs'; +import { debounceTime, distinctUntilChanged, takeUntil } from 'rxjs/operators'; + @Component({ selector: 'app-explore-dataset-filter-item-component', @@ -53,7 +53,7 @@ export class ExploreDatasetFilterItemComponent extends BaseComponent implements ngOnInit(): void { if (!this.multipleSelect) { this.selectionList.selectedOptions = new SelectionModel(this.multipleSelect); } this.optionSearchControl.valueChanges.pipe(debounceTime(this.requestDelay), - distinctUntilChanged(),) + distinctUntilChanged()) .pipe(takeUntil(this._destroyed)) .subscribe(x => { if (this.filterOptions) { this.options = this.filterOptions(x); } }); } diff --git a/dmp-frontend/src/app/ui/explore-dataset/filters/explore-dataset-filters.component.ts b/dmp-frontend/src/app/ui/explore-dataset/filters/explore-dataset-filters.component.ts index 2a2fd6880..1f3bc2f4f 100644 --- a/dmp-frontend/src/app/ui/explore-dataset/filters/explore-dataset-filters.component.ts +++ b/dmp-frontend/src/app/ui/explore-dataset/filters/explore-dataset-filters.component.ts @@ -1,34 +1,34 @@ -import { of as observableOf, Observable } from 'rxjs'; - -import { map } from 'rxjs/operators'; import { AfterViewInit, Component, EventEmitter, Input, OnInit, Output, ViewChild } from '@angular/core'; import { MatAccordion } from '@angular/material/expansion'; import { ActivatedRoute } from '@angular/router'; +import { GrantStateType } from '@app/core/common/enum/grant-state-type'; +import { DataTableData } from '@app/core/model/data-table/data-table-data'; +import { DataTableRequest } from '@app/core/model/data-table/data-table-request'; +import { DatasetProfileModel } from '@app/core/model/dataset/dataset-profile'; +import { DmpListingModel } from '@app/core/model/dmp/dmp-listing'; +import { ExternalSourceItemModel } from '@app/core/model/external-sources/external-source-item'; +import { GrantListingModel } from '@app/core/model/grant/grant-listing'; +import { OrganizationModel } from '@app/core/model/organisation/organization'; +import { DatasetProfileCriteria } from '@app/core/query/dataset-profile/dataset-profile-criteria'; +import { ExploreDatasetCriteriaModel } from '@app/core/query/explore-dataset/explore-dataset-criteria'; +import { ExploreDmpCriteriaModel } from '@app/core/query/explore-dmp/explore-dmp-criteria'; +import { GrantCriteria } from '@app/core/query/grant/grant-criteria'; +import { OrganisationCriteria } from '@app/core/query/organisation/organisation-criteria'; +import { RequestItem } from '@app/core/query/request-item'; +import { TagCriteria } from '@app/core/query/tag/tag-criteria'; +import { AuthService } from '@app/core/services/auth/auth.service'; +import { DatasetService } from '@app/core/services/dataset/dataset.service'; +import { DmpService } from '@app/core/services/dmp/dmp.service'; +import { ExternalSourcesService } from '@app/core/services/external-sources/external-sources.service'; +import { GrantService } from '@app/core/services/grant/grant.service'; +import { OrganisationService } from '@app/core/services/organisation/organisation.service'; +import { MultipleAutoCompleteConfiguration } from '@app/library/auto-complete/multiple/multiple-auto-complete-configuration'; +import { BaseComponent } from '@common/base/base.component'; import { TranslateService } from '@ngx-translate/core'; -import { BaseComponent } from '../../../core/common/base/base.component'; -import { GrantStateType } from '../../../core/common/enum/grant-state-type'; -import { DatasetProfileModel } from '../../../core/model/dataset/dataset-profile'; -import { ExternalSourceItemModel } from '../../../core/model/external-sources/external-source-item'; -import { GrantListingModel } from '../../../core/model/grant/grant-listing'; -import { ExploreDatasetCriteriaModel } from '../../../core/query/explore-dataset/explore-dataset-criteria'; -import { GrantCriteria } from '../../../core/query/grant/grant-criteria'; -import { TagCriteria } from '../../../core/query/tag/tag-criteria'; -import { DatasetService } from '../../../core/services/dataset/dataset.service'; -import { ExternalSourcesService } from '../../../core/services/external-sources/external-sources.service'; -import { GrantService } from '../../../core/services/grant/grant.service'; -import { RequestItem } from '../../../core/query/request-item'; -import { DataTableRequest } from '../../../core/model/data-table/data-table-request'; -import { MultipleAutoCompleteConfiguration } from '../../../library/auto-complete/multiple/multiple-auto-complete-configuration'; -import { DmpService } from '../../../core/services/dmp/dmp.service'; -import { OrganisationCriteria } from '../../../core/query/organisation/organisation-criteria'; -import { OrganisationService } from '../../../core/services/organisation/organisation.service'; -import { OrganizationModel } from '../../../core/model/organisation/organization'; -import { DataTableData } from '../../../core/model/data-table/data-table-data'; -import { DmpListingModel } from '../../../core/model/dmp/dmp-listing'; -import { ExploreDmpCriteriaModel } from '../../../core/query/explore-dmp/explore-dmp-criteria'; -import { DatasetProfileCriteria } from "../../../core/query/dataset-profile/dataset-profile-criteria"; -import { AuthService } from '../../../core/services/auth/auth.service'; +import { Observable, of as observableOf } from 'rxjs'; +import { map } from 'rxjs/operators'; + @Component({ selector: 'app-explore-dataset-filters-component', @@ -65,7 +65,7 @@ export class ExploreDatasetFiltersComponent extends BaseComponent implements OnI tagsAutoCompleteConfiguration = { filterFn: this.filterTags.bind(this), - initialItems: (excludedItems: any[]) => this.filterTags('').pipe(map(result => result.filter(resultItem => excludedItems.map(x => x.id).indexOf(resultItem.id) === -1))), + initialItems: (excludedItems: any[]) => this.filterTags('').pipe(map(result => result.filter(resultItem => (excludedItems || []).map(x => x.id).indexOf(resultItem.id) === -1))), displayFn: (item) => item['name'], titleFn: (item) => item['name'] }; @@ -81,7 +81,7 @@ export class ExploreDatasetFiltersComponent extends BaseComponent implements OnI filterFn: this.filterGrant.bind(this), initialItems: (excludedItems: any[]) => this.filterGrant('').pipe( - map(result => result.filter(resultItem => excludedItems.map(x => x.id).indexOf(resultItem.id) === -1))), + map(result => result.filter(resultItem => (excludedItems || []).map(x => x.id).indexOf(resultItem.id) === -1))), displayFn: (item) => item['label'], titleFn: (item) => item['label'] } @@ -90,7 +90,7 @@ export class ExploreDatasetFiltersComponent extends BaseComponent implements OnI filterFn: this.filterProfile.bind(this), initialItems: (excludedItems: any[]) => this.filterProfile('').pipe( - map(result => result.filter(resultItem => excludedItems.map(x => x.id).indexOf(resultItem.id) === -1))), + map(result => result.filter(resultItem => (excludedItems || []).map(x => x.id).indexOf(resultItem.id) === -1))), displayFn: (item) => item['label'], titleFn: (item) => item['label'] }; @@ -99,7 +99,7 @@ export class ExploreDatasetFiltersComponent extends BaseComponent implements OnI filterFn: this.filterOrganisation.bind(this), initialItems: (excludedItems: any[]) => this.getOrganisations().pipe( - map(result => result.filter(resultItem => excludedItems.map(x => x.id).indexOf(resultItem.id) === -1))), + map(result => result.filter(resultItem => (excludedItems || []).map(x => x.id).indexOf(resultItem.id) === -1))), displayFn: (item) => item['name'], titleFn: (item) => item['name'] } diff --git a/dmp-frontend/src/app/ui/explore-dmp/dmp-explore-filters/explore-dmp-filter-item/explore-dmp-filter-item.component.ts b/dmp-frontend/src/app/ui/explore-dmp/dmp-explore-filters/explore-dmp-filter-item/explore-dmp-filter-item.component.ts index 5b706d5e4..f18a44f34 100644 --- a/dmp-frontend/src/app/ui/explore-dmp/dmp-explore-filters/explore-dmp-filter-item/explore-dmp-filter-item.component.ts +++ b/dmp-frontend/src/app/ui/explore-dmp/dmp-explore-filters/explore-dmp-filter-item/explore-dmp-filter-item.component.ts @@ -1,12 +1,12 @@ -import {of as observableOf, Observable } from 'rxjs'; - -import {distinctUntilChanged, debounceTime, takeUntil } from 'rxjs/operators'; import { SelectionModel } from '@angular/cdk/collections'; import { Component, EventEmitter, Input, OnInit, Output, ViewChild } from '@angular/core'; import { FormControl } from '@angular/forms'; import { MatListOption, MatSelectionList } from '@angular/material/list'; -import { BaseComponent } from '../../../../core/common/base/base.component'; +import { BaseComponent } from '@common/base/base.component'; +import { Observable, of as observableOf } from 'rxjs'; +import { debounceTime, distinctUntilChanged, takeUntil } from 'rxjs/operators'; + @Component({ selector: 'app-explore-dmp-filter-item-component', @@ -44,7 +44,7 @@ export class ExploreDmpFilterItemComponent extends BaseComponent implements OnIn ngOnInit(): void { if (!this.multipleSelect) { this.selectionList.selectedOptions = new SelectionModel(this.multipleSelect); } this.optionSearchControl.valueChanges.pipe(debounceTime(this.requestDelay), - distinctUntilChanged(),) + distinctUntilChanged()) .pipe(takeUntil(this._destroyed)) .subscribe(x => { if (this.filterOptions) { this.options = this.filterOptions(x); } }); } diff --git a/dmp-frontend/src/app/ui/explore-dmp/dmp-explore-filters/explore-dmp-filters.component.ts b/dmp-frontend/src/app/ui/explore-dmp/dmp-explore-filters/explore-dmp-filters.component.ts index 73c4f8048..d65d47541 100644 --- a/dmp-frontend/src/app/ui/explore-dmp/dmp-explore-filters/explore-dmp-filters.component.ts +++ b/dmp-frontend/src/app/ui/explore-dmp/dmp-explore-filters/explore-dmp-filters.component.ts @@ -1,29 +1,29 @@ -import { of as observableOf, Observable } from 'rxjs'; - -import { map } from 'rxjs/operators'; import { AfterViewInit, Component, EventEmitter, Input, OnInit, Output, ViewChild } from "@angular/core"; import { MatAccordion } from "@angular/material/expansion"; import { ActivatedRoute } from "@angular/router"; +import { GrantStateType } from '@app/core/common/enum/grant-state-type'; +import { DataTableRequest } from '@app/core/model/data-table/data-table-request'; +import { DatasetProfileModel } from '@app/core/model/dataset/dataset-profile'; +import { GrantListingModel } from '@app/core/model/grant/grant-listing'; +import { OrganizationModel } from '@app/core/model/organisation/organization'; +import { DatasetProfileCriteria } from '@app/core/query/dataset-profile/dataset-profile-criteria'; +import { ExploreDmpCriteriaModel } from '@app/core/query/explore-dmp/explore-dmp-criteria'; +import { GrantCriteria } from '@app/core/query/grant/grant-criteria'; +import { OrganisationCriteria } from '@app/core/query/organisation/organisation-criteria'; +import { AuthService } from '@app/core/services/auth/auth.service'; +import { DatasetService } from '@app/core/services/dataset/dataset.service'; +import { DmpService } from '@app/core/services/dmp/dmp.service'; +import { ExternalSourcesService } from '@app/core/services/external-sources/external-sources.service'; +import { GrantService } from '@app/core/services/grant/grant.service'; +import { OrganisationService } from '@app/core/services/organisation/organisation.service'; +import { MultipleAutoCompleteConfiguration } from '@app/library/auto-complete/multiple/multiple-auto-complete-configuration'; +import { BaseCriteriaComponent } from '@app/ui/misc/criteria/base-criteria.component'; +import { ValidationErrorModel } from '@common/forms/validation/error-model/validation-error-model'; import { TranslateService } from "@ngx-translate/core"; -import { ValidationErrorModel } from "../../../common/forms/validation/error-model/validation-error-model"; -import { GrantStateType } from '../../../core/common/enum/grant-state-type'; -import { DataTableRequest } from "../../../core/model/data-table/data-table-request"; -import { DatasetProfileModel } from "../../../core/model/dataset/dataset-profile"; -import { GrantListingModel } from "../../../core/model/grant/grant-listing"; -import { ExploreDmpCriteriaModel } from "../../../core/query/explore-dmp/explore-dmp-criteria"; -import { GrantCriteria } from "../../../core/query/grant/grant-criteria"; -import { DatasetService } from "../../../core/services/dataset/dataset.service"; -import { DmpService } from "../../../core/services/dmp/dmp.service"; -import { ExternalSourcesService } from "../../../core/services/external-sources/external-sources.service"; -import { GrantService } from "../../../core/services/grant/grant.service"; -import { MultipleAutoCompleteConfiguration } from "../../../library/auto-complete/multiple/multiple-auto-complete-configuration"; -import { BaseCriteriaComponent } from "../../misc/criteria/base-criteria.component"; -import { OrganizationModel } from "../../../core/model/organisation/organization"; -import { OrganisationCriteria } from "../../../core/query/organisation/organisation-criteria"; -import { OrganisationService } from "../../../core/services/organisation/organisation.service"; -import { DatasetProfileCriteria } from "../../../core/query/dataset-profile/dataset-profile-criteria"; -import { AuthService } from '../../../core/services/auth/auth.service'; +import { Observable, of as observableOf } from 'rxjs'; +import { map } from 'rxjs/operators'; + @Component({ selector: 'app-explore-dmp-filters-component', @@ -69,7 +69,7 @@ export class ExploreDmpFiltersComponent extends BaseCriteriaComponent implements filterFn: this.filterProfile.bind(this), initialItems: (excludedItems: any[]) => this.filterProfile('').pipe( - map(result => result.filter(resultItem => excludedItems.map(x => x.id).indexOf(resultItem.id) === -1))), + map(result => result.filter(resultItem => (excludedItems || []).map(x => x.id).indexOf(resultItem.id) === -1))), displayFn: (item) => item['label'], titleFn: (item) => item['label'] }; @@ -78,7 +78,7 @@ export class ExploreDmpFiltersComponent extends BaseCriteriaComponent implements filterFn: this.filterOrganisation.bind(this), initialItems: (excludedItems: any[]) => this.getOrganisations().pipe( - map(result => result.filter(resultItem => excludedItems.map(x => x.id).indexOf(resultItem.id) === -1))), + map(result => result.filter(resultItem => (excludedItems || []).map(x => x.id).indexOf(resultItem.id) === -1))), displayFn: (item) => item['name'], titleFn: (item) => item['name'] } @@ -87,7 +87,7 @@ export class ExploreDmpFiltersComponent extends BaseCriteriaComponent implements filterFn: this.filterGrant.bind(this), initialItems: (excludedItems: any[]) => this.filterGrant('').pipe( - map(result => result.filter(resultItem => excludedItems.map(x => x.id).indexOf(resultItem.id) === -1))), + map(result => result.filter(resultItem => (excludedItems || []).map(x => x.id).indexOf(resultItem.id) === -1))), displayFn: (item) => item['label'], titleFn: (item) => item['label'] } diff --git a/dmp-frontend/src/app/ui/explore-dmp/explore-dmp-listing.component.ts b/dmp-frontend/src/app/ui/explore-dmp/explore-dmp-listing.component.ts index b9b735336..0ab48acfb 100644 --- a/dmp-frontend/src/app/ui/explore-dmp/explore-dmp-listing.component.ts +++ b/dmp-frontend/src/app/ui/explore-dmp/explore-dmp-listing.component.ts @@ -1,18 +1,18 @@ -import { of as observableOf, Observable } from 'rxjs'; import { Component, OnInit, ViewChild } from "@angular/core"; import { MatPaginator } from "@angular/material/paginator"; import { MatSort } from "@angular/material/sort"; -import { Router, ActivatedRoute } from "@angular/router"; -import { takeUntil } from "rxjs/operators"; -import { BaseComponent } from "../../core/common/base/base.component"; -import { DataTableRequest } from "../../core/model/data-table/data-table-request"; -import { DmpListingModel } from "../../core/model/dmp/dmp-listing"; -import { ExploreDmpCriteriaModel } from "../../core/query/explore-dmp/explore-dmp-criteria"; -import { DmpService } from "../../core/services/dmp/dmp.service"; -import { IBreadCrumbComponent } from "../misc/breadcrumb/definition/IBreadCrumbComponent"; -import { BreadcrumbItem } from "../misc/breadcrumb/definition/breadcrumb-item"; -import { TranslateService } from "@ngx-translate/core"; +import { ActivatedRoute, Router } from "@angular/router"; +import { DataTableRequest } from '@app/core/model/data-table/data-table-request'; +import { DmpListingModel } from '@app/core/model/dmp/dmp-listing'; +import { ExploreDmpCriteriaModel } from '@app/core/query/explore-dmp/explore-dmp-criteria'; +import { DmpService } from '@app/core/services/dmp/dmp.service'; +import { BreadcrumbItem } from '@app/ui/misc/breadcrumb/definition/breadcrumb-item'; +import { IBreadCrumbComponent } from '@app/ui/misc/breadcrumb/definition/IBreadCrumbComponent'; +import { BaseComponent } from '@common/base/base.component'; +import { TranslateService } from '@ngx-translate/core'; +import { Observable, of as observableOf } from 'rxjs'; +import { takeUntil } from 'rxjs/operators'; @Component({ selector: 'app-explore-dmp-listing-component', diff --git a/dmp-frontend/src/app/ui/explore-dmp/explore-dmp.module.ts b/dmp-frontend/src/app/ui/explore-dmp/explore-dmp.module.ts index d5b211fd8..51046c470 100644 --- a/dmp-frontend/src/app/ui/explore-dmp/explore-dmp.module.ts +++ b/dmp-frontend/src/app/ui/explore-dmp/explore-dmp.module.ts @@ -1,13 +1,13 @@ import { NgModule } from "@angular/core"; -import { CommonFormsModule } from "../../common/forms/common-forms.module"; -import { CommonUiModule } from "../../common/ui/common-ui.module"; -import { AutoCompleteModule } from "../../library/auto-complete/auto-complete.module"; -import { ExploreDmpFilterItemComponent } from "./dmp-explore-filters/explore-dmp-filter-item/explore-dmp-filter-item.component"; -import { ExploreDmpFiltersComponent } from "./dmp-explore-filters/explore-dmp-filters.component"; -import { ExploreDmpListingComponent } from "./explore-dmp-listing.component"; -import { ExploreDmpRoutingModule } from "./explore-dmp.routing"; -import { ExploreDmpListingItemComponent } from "./listing-item/explore-dmp-listing-item.component"; -import { DmpOverviewModule } from "../dmp/overview/dmp-overview.module"; +import { AutoCompleteModule } from '@app/library/auto-complete/auto-complete.module'; +import { DmpOverviewModule } from '@app/ui/dmp/overview/dmp-overview.module'; +import { ExploreDmpFilterItemComponent } from '@app/ui/explore-dmp/dmp-explore-filters/explore-dmp-filter-item/explore-dmp-filter-item.component'; +import { ExploreDmpFiltersComponent } from '@app/ui/explore-dmp/dmp-explore-filters/explore-dmp-filters.component'; +import { ExploreDmpListingComponent } from '@app/ui/explore-dmp/explore-dmp-listing.component'; +import { ExploreDmpRoutingModule } from '@app/ui/explore-dmp/explore-dmp.routing'; +import { ExploreDmpListingItemComponent } from '@app/ui/explore-dmp/listing-item/explore-dmp-listing-item.component'; +import { CommonFormsModule } from '@common/forms/common-forms.module'; +import { CommonUiModule } from '@common/ui/common-ui.module'; @NgModule({ imports: [ diff --git a/dmp-frontend/src/app/ui/faq/faq.module.ts b/dmp-frontend/src/app/ui/faq/faq.module.ts index 654c43b93..71b795ed3 100644 --- a/dmp-frontend/src/app/ui/faq/faq.module.ts +++ b/dmp-frontend/src/app/ui/faq/faq.module.ts @@ -1,8 +1,8 @@ import { NgModule } from '@angular/core'; -import { CommonUiModule } from '../../common/ui/common-ui.module'; -import { FaqRoutingModule } from './faq.routing'; +import { CommonUiModule } from '@common/ui/common-ui.module'; import { FaqDialogComponent } from './dialog/faq-dialog.component'; import { FaqContentComponent } from './faq-content/faq-content.component'; +import { FaqRoutingModule } from './faq.routing'; @NgModule({ imports: [ diff --git a/dmp-frontend/src/app/ui/glossary/glossary.module.ts b/dmp-frontend/src/app/ui/glossary/glossary.module.ts index 07cf5d1a6..c84ed0310 100644 --- a/dmp-frontend/src/app/ui/glossary/glossary.module.ts +++ b/dmp-frontend/src/app/ui/glossary/glossary.module.ts @@ -1,8 +1,8 @@ import { NgModule } from '@angular/core'; -import { GlossaryRoutingModule } from './glossary.routing'; -import { GlossaryContentComponent } from './glossary-content/glossary-content.component'; +import { CommonUiModule } from '@common/ui/common-ui.module'; import { GlossaryDialogComponent } from './dialog/glossary-dialog.component'; -import { CommonUiModule } from '../../common/ui/common-ui.module'; +import { GlossaryContentComponent } from './glossary-content/glossary-content.component'; +import { GlossaryRoutingModule } from './glossary.routing'; @NgModule({ imports: [ diff --git a/dmp-frontend/src/app/ui/grant/editor/grant-editor.component.ts b/dmp-frontend/src/app/ui/grant/editor/grant-editor.component.ts index 6011e48a9..6310ae2da 100644 --- a/dmp-frontend/src/app/ui/grant/editor/grant-editor.component.ts +++ b/dmp-frontend/src/app/ui/grant/editor/grant-editor.component.ts @@ -1,25 +1,25 @@ -import {of as observableOf, Observable } from 'rxjs'; - -import {map, takeUntil } from 'rxjs/operators'; import { Component, OnInit } from '@angular/core'; import { AbstractControl, FormArray, FormControl, FormGroup } from '@angular/forms'; import { MatDialog } from '@angular/material/dialog'; import { MatSnackBar } from '@angular/material/snack-bar'; import { ActivatedRoute, Params, Router } from '@angular/router'; +import { GrantType } from '@app/core/common/enum/grant-type'; +import { GrantListingModel } from '@app/core/model/grant/grant-listing'; +import { GrantFileUploadService } from '@app/core/services/grant/grant-file-upload.service'; +import { GrantService } from '@app/core/services/grant/grant.service'; +import { SnackBarNotificationLevel, UiNotificationService } from '@app/core/services/notification/ui-notification-service'; +import { ConfirmationDialogComponent } from '@common/modules/confirmation-dialog/confirmation-dialog.component'; +import { GrantEditorModel } from '@app/ui/grant/editor/grant-editor.model'; +import { BreadcrumbItem } from '@app/ui/misc/breadcrumb/definition/breadcrumb-item'; +import { IBreadCrumbComponent } from '@app/ui/misc/breadcrumb/definition/IBreadCrumbComponent'; +import { BaseComponent } from '@common/base/base.component'; +import { ValidationErrorModel } from '@common/forms/validation/error-model/validation-error-model'; import { TranslateService } from '@ngx-translate/core'; -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 { GrantType } from '../../../core/common/enum/grant-type'; -import { GrantListingModel } from '../../../core/model/grant/grant-listing'; -import { GrantFileUploadService } from '../../../core/services/grant/grant-file-upload.service'; -import { GrantService } from '../../../core/services/grant/grant.service'; -import { ConfirmationDialogComponent } from '../../../library/confirmation-dialog/confirmation-dialog.component'; -import { BreadcrumbItem } from '../../misc/breadcrumb/definition/breadcrumb-item'; -import { IBreadCrumbComponent } from '../../misc/breadcrumb/definition/IBreadCrumbComponent'; -import { GrantEditorModel } from './grant-editor.model'; -import { SnackBarNotificationLevel, UiNotificationService } from '../../../core/services/notification/ui-notification-service'; +import { environment } from 'environments/environment'; +import { Observable, of as observableOf } from 'rxjs'; +import { map, takeUntil } from 'rxjs/operators'; + @Component({ selector: 'app-grant-editor-component', diff --git a/dmp-frontend/src/app/ui/grant/editor/grant-editor.model.ts b/dmp-frontend/src/app/ui/grant/editor/grant-editor.model.ts index 13128fb8f..8b783111c 100644 --- a/dmp-frontend/src/app/ui/grant/editor/grant-editor.model.ts +++ b/dmp-frontend/src/app/ui/grant/editor/grant-editor.model.ts @@ -1,7 +1,7 @@ -import { FormBuilder, FormGroup, Validators, AbstractControl } from '@angular/forms'; -import { BackendErrorValidator } from '../../../common/forms/validation/custom-validator'; -import { ValidationErrorModel } from '../../../common/forms/validation/error-model/validation-error-model'; -import { ValidationContext } from '../../../common/forms/validation/validation-context'; +import { FormBuilder, FormGroup, Validators } from '@angular/forms'; +import { BackendErrorValidator } from '@common/forms/validation/custom-validator'; +import { ValidationErrorModel } from '@common/forms/validation/error-model/validation-error-model'; +import { ValidationContext } from '@common/forms/validation/validation-context'; import { GrantType } from '../../../core/common/enum/grant-type'; import { Status } from '../../../core/common/enum/Status'; import { ContentFile, GrantListingModel } from '../../../core/model/grant/grant-listing'; @@ -51,7 +51,7 @@ export class GrantEditorModel { startDate: [{ value: this.startDate, disabled: disabled }, context.getValidation('startDate').validators], endDate: [{ value: this.endDate, disabled: disabled }, context.getValidation('endDate').validators], files: [{ value: this.files, disabled: disabled }, context.getValidation('files').validators] - },{ validator: startEndValidator }); + }, { validator: startEndValidator }); return formGroup; } @@ -76,9 +76,8 @@ export class GrantEditorModel { export function startEndValidator(formGroup: FormGroup) { const start = formGroup.get('startDate').value; const end = formGroup.get('endDate').value; - if(start!=null && end != null && end { - if (x) { this.onItemChange.emit(x); } + if (x) { + this.onItemChange.emit(x); + this.formControl.reset(); + } }); } diff --git a/dmp-frontend/src/app/ui/misc/help-content/help-content.component.ts b/dmp-frontend/src/app/ui/misc/help-content/help-content.component.ts index fa4aa9f41..5ca816123 100644 --- a/dmp-frontend/src/app/ui/misc/help-content/help-content.component.ts +++ b/dmp-frontend/src/app/ui/misc/help-content/help-content.component.ts @@ -3,10 +3,10 @@ */ import { Component, Input, OnInit } from '@angular/core'; import { ActivatedRoute, NavigationStart, Router } from '@angular/router'; +import { PageHelpContent } from '@app/core/model/help-content/page-help-content'; +import { HelpContentService } from '@app/core/services/help-content/help-content.service'; +import { BaseComponent } from '@common/base/base.component'; import { takeUntil } from 'rxjs/operators'; -import { BaseComponent } from '../../../core/common/base/base.component'; -import { PageHelpContent } from '../../../core/model/help-content/page-help-content'; -import { HelpContentService } from '../../../core/services/help-content/help-content.service'; @Component({ selector: 'app-help-content', diff --git a/dmp-frontend/src/app/ui/misc/help-content/help-content.module.ts b/dmp-frontend/src/app/ui/misc/help-content/help-content.module.ts index ae67f9f8b..de7863976 100644 --- a/dmp-frontend/src/app/ui/misc/help-content/help-content.module.ts +++ b/dmp-frontend/src/app/ui/misc/help-content/help-content.module.ts @@ -1,6 +1,6 @@ import { NgModule } from '@angular/core'; -import { CommonUiModule } from '../../../common/ui/common-ui.module'; -import { HelpContentComponent } from './help-content.component'; +import { HelpContentComponent } from '@app/ui/misc/help-content/help-content.component'; +import { CommonUiModule } from '@common/ui/common-ui.module'; @NgModule({ imports: [ diff --git a/dmp-frontend/src/app/ui/misc/navigation/navigation.component.ts b/dmp-frontend/src/app/ui/misc/navigation/navigation.component.ts index b16e560ce..60daecb04 100644 --- a/dmp-frontend/src/app/ui/misc/navigation/navigation.component.ts +++ b/dmp-frontend/src/app/ui/misc/navigation/navigation.component.ts @@ -1,21 +1,21 @@ -import {mergeMap, distinctUntilChanged, debounceTime, takeUntil } from 'rxjs/operators'; import { Component, OnInit } from '@angular/core'; import { FormControl } from '@angular/forms'; import { MatDialog } from '@angular/material/dialog'; import { Router } from '@angular/router'; +import { AppRole } from '@app/core/common/enum/app-role'; +import { SearchBarItem } from '@app/core/model/dashboard/search-bar-item'; +import { GrantCriteria } from '@app/core/query/grant/grant-criteria'; +import { RequestItem } from '@app/core/query/request-item'; +import { AuthService } from '@app/core/services/auth/auth.service'; +import { GrantService } from '@app/core/services/grant/grant.service'; +import { ProgressIndicationService } from '@app/core/services/progress-indication/progress-indication-service'; +import { SearchBarService } from '@app/core/services/search-bar/search-bar.service'; +import { SingleAutoCompleteConfiguration } from '@app/library/auto-complete/single/single-auto-complete-configuration'; +import { UserDialogComponent } from '@app/ui/misc/navigation/user-dialog/user-dialog.component'; +import { BaseComponent } from '@common/base/base.component'; import { Observable } from 'rxjs'; -import { BaseComponent } from '../../../core/common/base/base.component'; -import { AppRole } from '../../../core/common/enum/app-role'; -import { SearchBarItem } from '../../../core/model/dashboard/search-bar-item'; -import { GrantCriteria } from '../../../core/query/grant/grant-criteria'; -import { RequestItem } from '../../../core/query/request-item'; -import { AuthService } from '../../../core/services/auth/auth.service'; -import { ProgressIndicationService } from '../../../core/services/progress-indication/progress-indication-service'; -import { GrantService } from '../../../core/services/grant/grant.service'; -import { SearchBarService } from '../../../core/services/search-bar/search-bar.service'; -import { SingleAutoCompleteConfiguration } from '../../../library/auto-complete/single/single-auto-complete-configuration'; -import { UserDialogComponent } from './user-dialog/user-dialog.component'; +import { debounceTime, distinctUntilChanged, mergeMap, takeUntil } from 'rxjs/operators'; export enum SearchBarType { Dataset = 0, @@ -60,9 +60,9 @@ export class NavigationComponent extends BaseComponent implements OnInit { titleFn: (item) => item['label'] }; - this.filteredOptions = this.searchControl.valueChanges.pipe(debounceTime(500),distinctUntilChanged(),mergeMap(x => { + this.filteredOptions = this.searchControl.valueChanges.pipe(debounceTime(500), distinctUntilChanged(), mergeMap(x => { return this.searchBarService.search(x); - }),); + })); } searchGrant(query: string) { diff --git a/dmp-frontend/src/app/ui/misc/navigation/navigation.module.ts b/dmp-frontend/src/app/ui/misc/navigation/navigation.module.ts index 3cfef3c81..c7e8099af 100644 --- a/dmp-frontend/src/app/ui/misc/navigation/navigation.module.ts +++ b/dmp-frontend/src/app/ui/misc/navigation/navigation.module.ts @@ -1,10 +1,9 @@ import { NgModule } from '@angular/core'; import { RouterModule } from '@angular/router'; -import { CommonFormsModule } from '../../../common/forms/common-forms.module'; -import { CommonUiModule } from '../../../common/ui/common-ui.module'; -import { NavigationComponent } from './navigation.component'; -import { UserDialogComponent } from './user-dialog/user-dialog.component'; -import { SearchComponent } from '../search/search.component'; +import { NavigationComponent } from '@app/ui/misc/navigation/navigation.component'; +import { UserDialogComponent } from '@app/ui/misc/navigation/user-dialog/user-dialog.component'; +import { CommonFormsModule } from '@common/forms/common-forms.module'; +import { CommonUiModule } from '@common/ui/common-ui.module'; @NgModule({ imports: [ diff --git a/dmp-frontend/src/app/ui/misc/unauthorized/unauthorized.component.ts b/dmp-frontend/src/app/ui/misc/unauthorized/unauthorized.component.ts index 22233f4ef..7102be364 100644 --- a/dmp-frontend/src/app/ui/misc/unauthorized/unauthorized.component.ts +++ b/dmp-frontend/src/app/ui/misc/unauthorized/unauthorized.component.ts @@ -1,8 +1,8 @@ import { AfterViewInit, Component, Input } from '@angular/core'; import { ActivatedRoute, Router } from '@angular/router'; +import { AuthService } from '@app/core/services/auth/auth.service'; +import { BaseComponent } from '@common/base/base.component'; import { takeUntil } from 'rxjs/operators'; -import { BaseComponent } from '../../../core/common/base/base.component'; -import { AuthService } from '../../../core/services/auth/auth.service'; @Component({ selector: 'app-unauthorized-component', diff --git a/dmp-frontend/src/app/ui/misc/unauthorized/unauthorized.module.ts b/dmp-frontend/src/app/ui/misc/unauthorized/unauthorized.module.ts index c25f31acd..3970bc105 100644 --- a/dmp-frontend/src/app/ui/misc/unauthorized/unauthorized.module.ts +++ b/dmp-frontend/src/app/ui/misc/unauthorized/unauthorized.module.ts @@ -1,7 +1,7 @@ import { NgModule } from "@angular/core"; -import { CommonUiModule } from "../../../common/ui/common-ui.module"; -import { UnauthorizedComponent } from "./unauthorized.component"; -import { UnauthorizedRoutingModule } from "./unauthorized.routes"; +import { UnauthorizedComponent } from '@app/ui/misc/unauthorized/unauthorized.component'; +import { UnauthorizedRoutingModule } from '@app/ui/misc/unauthorized/unauthorized.routes'; +import { CommonUiModule } from '@common/ui/common-ui.module'; @NgModule({ imports: [ diff --git a/dmp-frontend/src/app/ui/navbar/navbar.component.ts b/dmp-frontend/src/app/ui/navbar/navbar.component.ts index fad635899..d9105405a 100644 --- a/dmp-frontend/src/app/ui/navbar/navbar.component.ts +++ b/dmp-frontend/src/app/ui/navbar/navbar.component.ts @@ -1,15 +1,14 @@ -import { Component, OnInit, ElementRef } from '@angular/core'; -import { GENERAL_ROUTES, DMP_ROUTES, DATASETS_ROUTES } from '../sidebar/sidebar.component'; -// import { HISTORY_ROUTES } from '../sidebar/sidebar.component'; -import { Location, LocationStrategy, PathLocationStrategy } from '@angular/common'; +import { Location } from '@angular/common'; +import { Component, ElementRef, OnInit } from '@angular/core'; +import { MatDialog } from '@angular/material'; import { Router } from '@angular/router'; -import { AuthService } from '../../core/services/auth/auth.service'; -import { MatDialog } from '@angular/material/dialog'; -import { UserDialogComponent } from '../misc/navigation/user-dialog/user-dialog.component'; -import { AppRole } from '../../core/common/enum/app-role'; -import { ProgressIndicationService } from '../../core/services/progress-indication/progress-indication-service'; -import { BaseComponent } from '../../core/common/base/base.component'; +import { AppRole } from '@app/core/common/enum/app-role'; +import { AuthService } from '@app/core/services/auth/auth.service'; +import { ProgressIndicationService } from '@app/core/services/progress-indication/progress-indication-service'; +import { BaseComponent } from '@common/base/base.component'; import { takeUntil } from 'rxjs/operators'; +import { UserDialogComponent } from '../misc/navigation/user-dialog/user-dialog.component'; +import { DATASETS_ROUTES, DMP_ROUTES, GENERAL_ROUTES } from '../sidebar/sidebar.component'; @Component({ selector: 'app-navbar', diff --git a/dmp-frontend/src/app/ui/navbar/navbar.module.ts b/dmp-frontend/src/app/ui/navbar/navbar.module.ts index 54420be4f..4d89a8027 100644 --- a/dmp-frontend/src/app/ui/navbar/navbar.module.ts +++ b/dmp-frontend/src/app/ui/navbar/navbar.module.ts @@ -1,10 +1,10 @@ import { NgModule } from '@angular/core'; import { RouterModule } from '@angular/router'; -import { CommonFormsModule } from '../../common/forms/common-forms.module'; -import { CommonUiModule } from '../../common/ui/common-ui.module'; -import { NavbarComponent } from './navbar.component'; -import { SearchComponent } from '../misc/search/search.component'; -import { BreadcrumbModule } from '../misc/breadcrumb/breadcrumb.module'; +import { BreadcrumbModule } from '@app/ui/misc/breadcrumb/breadcrumb.module'; +import { SearchComponent } from '@app/ui/misc/search/search.component'; +import { NavbarComponent } from '@app/ui/navbar/navbar.component'; +import { CommonFormsModule } from '@common/forms/common-forms.module'; +import { CommonUiModule } from '@common/ui/common-ui.module'; @NgModule({ imports: [ diff --git a/dmp-frontend/src/app/ui/quick-wizard/dataset-editor/dataset-editor-wizard-model.ts b/dmp-frontend/src/app/ui/quick-wizard/dataset-editor/dataset-editor-wizard-model.ts index 84710c8a4..c681b72f5 100644 --- a/dmp-frontend/src/app/ui/quick-wizard/dataset-editor/dataset-editor-wizard-model.ts +++ b/dmp-frontend/src/app/ui/quick-wizard/dataset-editor/dataset-editor-wizard-model.ts @@ -1,17 +1,16 @@ -import { FormBuilder, FormGroup, Validators } from "@angular/forms"; -import { BackendErrorValidator } from "../../../common/forms/validation/custom-validator"; -import { ValidationErrorModel } from "../../../common/forms/validation/error-model/validation-error-model"; -import { ValidationContext } from "../../../common/forms/validation/validation-context"; -import { BaseFormModel } from "../../../core/model/base-form-model"; -import { DatasetWizardEditorModel } from "../../dataset/dataset-wizard/dataset-wizard-editor.model"; -import { QuickWizardDatasetDescriptionModel } from "./quick-wizard-dataset-description-model"; - +import { FormBuilder, FormGroup } from "@angular/forms"; +import { BaseFormModel } from '@app/core/model/base-form-model'; +import { DatasetWizardEditorModel } from '@app/ui/dataset/dataset-wizard/dataset-wizard-editor.model'; +import { QuickWizardDatasetDescriptionModel } from '@app/ui/quick-wizard/dataset-editor/quick-wizard-dataset-description-model'; +import { BackendErrorValidator } from '@common/forms/validation/custom-validator'; +import { ValidationErrorModel } from '@common/forms/validation/error-model/validation-error-model'; +import { ValidationContext } from '@common/forms/validation/validation-context'; export class DatasetEditorWizardModel extends BaseFormModel { public datasetsList: Array = []; - public validationErrorModel: ValidationErrorModel = new ValidationErrorModel(); - public viewOnly: boolean; + public validationErrorModel: ValidationErrorModel = new ValidationErrorModel(); + public viewOnly: boolean; fromModel(item: DatasetWizardEditorModel[]): DatasetEditorWizardModel { @@ -20,7 +19,7 @@ export class DatasetEditorWizardModel extends BaseFormModel { buildForm(context: ValidationContext = null): FormGroup { if (context == null) { context = this.createValidationContext(); } - const formGroup = new FormBuilder().group({},context.getValidation('datasetsList').validators); + const formGroup = new FormBuilder().group({}, context.getValidation('datasetsList').validators); const formArray = new Array(); this.datasetsList.forEach(item => { const form: FormGroup = item.buildForm(); @@ -32,7 +31,7 @@ export class DatasetEditorWizardModel extends BaseFormModel { createValidationContext(): ValidationContext { const baseContext: ValidationContext = new ValidationContext(); - baseContext.validation.push({ key: 'datasetsList', validators:[BackendErrorValidator(this.validationErrorModel, 'datasetsList')] }); + baseContext.validation.push({ key: 'datasetsList', validators: [BackendErrorValidator(this.validationErrorModel, 'datasetsList')] }); return baseContext; } diff --git a/dmp-frontend/src/app/ui/quick-wizard/dataset-editor/dataset-editor-wizard.component.ts b/dmp-frontend/src/app/ui/quick-wizard/dataset-editor/dataset-editor-wizard.component.ts index 72f746bb5..a32b77b64 100644 --- a/dmp-frontend/src/app/ui/quick-wizard/dataset-editor/dataset-editor-wizard.component.ts +++ b/dmp-frontend/src/app/ui/quick-wizard/dataset-editor/dataset-editor-wizard.component.ts @@ -1,14 +1,14 @@ import { Component, Input, OnInit } from "@angular/core"; import { FormArray, FormGroup } from "@angular/forms"; +import { DatasetWizardService } from '@app/core/services/dataset-wizard/dataset-wizard.service'; +import { BreadcrumbItem } from '@app/ui/misc/breadcrumb/definition/breadcrumb-item'; +import { IBreadCrumbComponent } from '@app/ui/misc/breadcrumb/definition/IBreadCrumbComponent'; +import { DatasetDescriptionFormEditorModel } from '@app/ui/misc/dataset-description-form/dataset-description-form.model'; +import { QuickWizardDatasetDescriptionModel } from '@app/ui/quick-wizard/dataset-editor/quick-wizard-dataset-description-model'; +import { BaseComponent } from '@common/base/base.component'; import { TranslateService } from "@ngx-translate/core"; import { Observable } from "rxjs"; import { takeUntil } from "rxjs/operators"; -import { BaseComponent } from "../../../core/common/base/base.component"; -import { DatasetWizardService } from "../../../core/services/dataset-wizard/dataset-wizard.service"; -import { BreadcrumbItem } from "../../misc/breadcrumb/definition/breadcrumb-item"; -import { IBreadCrumbComponent } from "../../misc/breadcrumb/definition/IBreadCrumbComponent"; -import { DatasetDescriptionFormEditorModel } from "../../misc/dataset-description-form/dataset-description-form.model"; -import { QuickWizardDatasetDescriptionModel } from "./quick-wizard-dataset-description-model"; @Component({ selector: 'app-dataset-editor-wizard-component', diff --git a/dmp-frontend/src/app/ui/quick-wizard/dmp-editor/dmp-editor-wizard-model.ts b/dmp-frontend/src/app/ui/quick-wizard/dmp-editor/dmp-editor-wizard-model.ts index 8da1d888f..0ec5bf74c 100644 --- a/dmp-frontend/src/app/ui/quick-wizard/dmp-editor/dmp-editor-wizard-model.ts +++ b/dmp-frontend/src/app/ui/quick-wizard/dmp-editor/dmp-editor-wizard-model.ts @@ -1,12 +1,12 @@ -import { Status } from "../../../core/common/enum/Status"; -import { DmpProfile, DmpProfileDefinition } from "../../../core/model/dmp-profile/dmp-profile"; -import { ValidationErrorModel } from "../../../common/forms/validation/error-model/validation-error-model"; -import { DmpModel } from "../../../core/model/dmp/dmp"; -import { ValidationContext } from "../../../common/forms/validation/validation-context"; -import { FormBuilder, FormGroup, Validators } from "@angular/forms"; -import { BackendErrorValidator } from "../../../common/forms/validation/custom-validator"; -import { ValidJsonValidator } from "../../../library/auto-complete/auto-complete-custom-validator"; -import { DatasetProfileModel } from "../../../core/model/dataset/dataset-profile"; +import { FormBuilder, FormGroup, Validators } from '@angular/forms'; +import { Status } from '@app/core/common/enum/Status'; +import { DatasetProfileModel } from '@app/core/model/dataset/dataset-profile'; +import { DmpProfileDefinition } from '@app/core/model/dmp-profile/dmp-profile'; +import { DmpModel } from '@app/core/model/dmp/dmp'; +import { ValidJsonValidator } from '@app/library/auto-complete/auto-complete-custom-validator'; +import { BackendErrorValidator } from '@common/forms/validation/custom-validator'; +import { ValidationErrorModel } from '@common/forms/validation/error-model/validation-error-model'; +import { ValidationContext } from '@common/forms/validation/validation-context'; export class DmpEditorWizardModel { public id: string; diff --git a/dmp-frontend/src/app/ui/quick-wizard/dmp-editor/dmp-editor-wizard.component.ts b/dmp-frontend/src/app/ui/quick-wizard/dmp-editor/dmp-editor-wizard.component.ts index 7f4fbea97..4674857d6 100644 --- a/dmp-frontend/src/app/ui/quick-wizard/dmp-editor/dmp-editor-wizard.component.ts +++ b/dmp-frontend/src/app/ui/quick-wizard/dmp-editor/dmp-editor-wizard.component.ts @@ -1,20 +1,20 @@ -import {of as observableOf, Observable } from 'rxjs'; import { Component, Input, OnInit } from '@angular/core'; import { AbstractControl, FormArray, FormControl, FormGroup } from '@angular/forms'; import { MatSnackBar } from '@angular/material/snack-bar'; import { ActivatedRoute, Router } from '@angular/router'; +import { DatasetProfileModel } from '@app/core/model/dataset/dataset-profile'; +import { DatasetProfileCriteria } from '@app/core/query/dataset-profile/dataset-profile-criteria'; +import { RequestItem } from '@app/core/query/request-item'; +import { DmpService } from '@app/core/services/dmp/dmp.service'; +import { SnackBarNotificationLevel, UiNotificationService } from '@app/core/services/notification/ui-notification-service'; +import { SingleAutoCompleteConfiguration } from '@app/library/auto-complete/single/single-auto-complete-configuration'; +import { BreadcrumbItem } from '@app/ui/misc/breadcrumb/definition/breadcrumb-item'; +import { IBreadCrumbComponent } from '@app/ui/misc/breadcrumb/definition/IBreadCrumbComponent'; +import { BaseComponent } from '@common/base/base.component'; +import { ValidationErrorModel } from '@common/forms/validation/error-model/validation-error-model'; import { TranslateService } from '@ngx-translate/core'; -import { ValidationErrorModel } from '../../../common/forms/validation/error-model/validation-error-model'; -import { BaseComponent } from "../../../core/common/base/base.component"; -import { DatasetProfileModel } from '../../../core/model/dataset/dataset-profile'; -import { DatasetProfileCriteria } from '../../../core/query/dataset-profile/dataset-profile-criteria'; -import { RequestItem } from '../../../core/query/request-item'; -import { DmpService } from '../../../core/services/dmp/dmp.service'; -import { SnackBarNotificationLevel, UiNotificationService } from '../../../core/services/notification/ui-notification-service'; -import { SingleAutoCompleteConfiguration } from '../../../library/auto-complete/single/single-auto-complete-configuration'; -import { BreadcrumbItem } from '../../misc/breadcrumb/definition/breadcrumb-item'; -import { IBreadCrumbComponent } from '../../misc/breadcrumb/definition/IBreadCrumbComponent'; +import { Observable, of as observableOf } from 'rxjs'; import { DmpEditorWizardModel } from './dmp-editor-wizard-model'; diff --git a/dmp-frontend/src/app/ui/quick-wizard/grant-editor/grant-editor-wizard-model.ts b/dmp-frontend/src/app/ui/quick-wizard/grant-editor/grant-editor-wizard-model.ts index 8468d48a1..b8f30cc6e 100644 --- a/dmp-frontend/src/app/ui/quick-wizard/grant-editor/grant-editor-wizard-model.ts +++ b/dmp-frontend/src/app/ui/quick-wizard/grant-editor/grant-editor-wizard-model.ts @@ -1,10 +1,10 @@ -import { Status } from "../../../core/common/enum/Status"; -import { GrantListingModel } from "../../../core/model/grant/grant-listing"; -import { ValidationContext } from "../../../common/forms/validation/validation-context"; -import { FormGroup, FormBuilder, Validators } from "@angular/forms"; -import { BackendErrorValidator } from "../../../common/forms/validation/custom-validator"; -import { ValidationErrorModel } from "../../../common/forms/validation/error-model/validation-error-model"; -import { ValidJsonValidator } from "../../../library/auto-complete/auto-complete-custom-validator"; +import { FormBuilder, FormGroup, Validators } from "@angular/forms"; +import { Status } from '@app/core/common/enum/Status'; +import { GrantListingModel } from '@app/core/model/grant/grant-listing'; +import { ValidJsonValidator } from '@app/library/auto-complete/auto-complete-custom-validator'; +import { BackendErrorValidator } from '@common/forms/validation/custom-validator'; +import { ValidationErrorModel } from '@common/forms/validation/error-model/validation-error-model'; +import { ValidationContext } from '@common/forms/validation/validation-context'; export class GrantEditorWizardModel { public id: string; diff --git a/dmp-frontend/src/app/ui/quick-wizard/grant-editor/grant-editor-wizard.component.ts b/dmp-frontend/src/app/ui/quick-wizard/grant-editor/grant-editor-wizard.component.ts index 47f1c730a..c1a605c8a 100644 --- a/dmp-frontend/src/app/ui/quick-wizard/grant-editor/grant-editor-wizard.component.ts +++ b/dmp-frontend/src/app/ui/quick-wizard/grant-editor/grant-editor-wizard.component.ts @@ -1,20 +1,20 @@ -import { of as observableOf, Observable } from 'rxjs'; import { Component, Input, OnInit } from '@angular/core'; import { AbstractControl, FormArray, FormControl, FormGroup } from '@angular/forms'; import { MatSnackBar } from '@angular/material/snack-bar'; -import { ActivatedRoute, Router } from '@angular/router'; +import { Router } from '@angular/router'; +import { GrantCriteria } from '@app/core/query/grant/grant-criteria'; +import { RequestItem } from '@app/core/query/request-item'; +import { GrantService } from '@app/core/services/grant/grant.service'; +import { SnackBarNotificationLevel, UiNotificationService } from '@app/core/services/notification/ui-notification-service'; +import { SingleAutoCompleteConfiguration } from '@app/library/auto-complete/single/single-auto-complete-configuration'; +import { BreadcrumbItem } from '@app/ui/misc/breadcrumb/definition/breadcrumb-item'; +import { IBreadCrumbComponent } from '@app/ui/misc/breadcrumb/definition/IBreadCrumbComponent'; +import { GrantEditorWizardModel } from '@app/ui/quick-wizard/grant-editor/grant-editor-wizard-model'; +import { BaseComponent } from '@common/base/base.component'; +import { ValidationErrorModel } from '@common/forms/validation/error-model/validation-error-model'; import { TranslateService } from '@ngx-translate/core'; -import { ValidationErrorModel } from '../../../common/forms/validation/error-model/validation-error-model'; -import { BaseComponent } from "../../../core/common/base/base.component"; -import { GrantCriteria } from '../../../core/query/grant/grant-criteria'; -import { RequestItem } from '../../../core/query/request-item'; -import { SnackBarNotificationLevel, UiNotificationService } from '../../../core/services/notification/ui-notification-service'; -import { GrantService } from '../../../core/services/grant/grant.service'; -import { SingleAutoCompleteConfiguration } from '../../../library/auto-complete/single/single-auto-complete-configuration'; -import { BreadcrumbItem } from '../../misc/breadcrumb/definition/breadcrumb-item'; -import { IBreadCrumbComponent } from '../../misc/breadcrumb/definition/IBreadCrumbComponent'; -import { GrantEditorWizardModel } from './grant-editor-wizard-model'; +import { Observable, of as observableOf } from 'rxjs'; @Component({ selector: 'app-quick-wizard-grant-editor-component', diff --git a/dmp-frontend/src/app/ui/quick-wizard/quick-wizard-editor/quick-wizard-editor.component.ts b/dmp-frontend/src/app/ui/quick-wizard/quick-wizard-editor/quick-wizard-editor.component.ts index 9345b7ea1..2867109dc 100644 --- a/dmp-frontend/src/app/ui/quick-wizard/quick-wizard-editor/quick-wizard-editor.component.ts +++ b/dmp-frontend/src/app/ui/quick-wizard/quick-wizard-editor/quick-wizard-editor.component.ts @@ -1,29 +1,29 @@ -import { of as observableOf, Observable } from 'rxjs'; -import { Component, OnInit, ViewChild, HostListener } from '@angular/core'; +import { Component, OnInit, ViewChild } from '@angular/core'; import { AbstractControl, FormArray, FormControl, FormGroup } from '@angular/forms'; import { MatDialog } from '@angular/material/dialog'; import { MatSnackBar } from '@angular/material/snack-bar'; import { MatStepper } from '@angular/material/stepper'; -import { ActivatedRoute, Router } from '@angular/router'; +import { Router } from '@angular/router'; +import { DatasetStatus } from '@app/core/common/enum/dataset-status'; +import { DmpStatus } from '@app/core/common/enum/dmp-status'; +import { DatasetService } from '@app/core/services/dataset/dataset.service'; +import { SnackBarNotificationLevel, UiNotificationService } from '@app/core/services/notification/ui-notification-service'; +import { QuickWizardService } from '@app/core/services/quick-wizard/quick-wizard.service'; +import { ConfirmationDialogComponent } from '@common/modules/confirmation-dialog/confirmation-dialog.component'; +import { CheckDeactivateBaseComponent } from '@app/library/deactivate/deactivate.component'; +import { DmpFinalizeDialogComponent, DmpFinalizeDialogDataset, DmpFinalizeDialogInput } from '@app/ui/dmp/editor/dmp-finalize-dialog/dmp-finalize-dialog.component'; +import { FunderFormModel } from '@app/ui/dmp/editor/grant-tab/funder-form-model'; +import { ProjectFormModel } from '@app/ui/dmp/editor/grant-tab/project-form-model'; +import { BreadcrumbItem } from '@app/ui/misc/breadcrumb/definition/breadcrumb-item'; +import { IBreadCrumbComponent } from '@app/ui/misc/breadcrumb/definition/IBreadCrumbComponent'; +import { DatasetEditorWizardComponent } from '@app/ui/quick-wizard/dataset-editor/dataset-editor-wizard.component'; +import { GrantEditorWizardModel } from '@app/ui/quick-wizard/grant-editor/grant-editor-wizard-model'; +import { QuickWizardEditorWizardModel } from '@app/ui/quick-wizard/quick-wizard-editor/quick-wizard-editor.model'; +import { ValidationErrorModel } from '@common/forms/validation/error-model/validation-error-model'; import { TranslateService } from '@ngx-translate/core'; +import { Observable, of as observableOf } from 'rxjs'; import { takeUntil } from 'rxjs/operators'; -import { ValidationErrorModel } from '../../../common/forms/validation/error-model/validation-error-model'; -import { DatasetStatus } from '../../../core/common/enum/dataset-status'; -import { DmpStatus } from '../../../core/common/enum/dmp-status'; -import { DatasetService } from '../../../core/services/dataset/dataset.service'; -import { SnackBarNotificationLevel, UiNotificationService, PopupNotification } from '../../../core/services/notification/ui-notification-service'; -import { QuickWizardService } from '../../../core/services/quick-wizard/quick-wizard.service'; -import { ConfirmationDialogComponent } from '../../../library/confirmation-dialog/confirmation-dialog.component'; -import { DmpFinalizeDialogComponent, DmpFinalizeDialogDataset, DmpFinalizeDialogInput } from '../../dmp/editor/dmp-finalize-dialog/dmp-finalize-dialog.component'; -import { BreadcrumbItem } from '../../misc/breadcrumb/definition/breadcrumb-item'; -import { IBreadCrumbComponent } from '../../misc/breadcrumb/definition/IBreadCrumbComponent'; -import { DatasetEditorWizardComponent } from '../dataset-editor/dataset-editor-wizard.component'; -import { GrantEditorWizardModel } from '../grant-editor/grant-editor-wizard-model'; -import { QuickWizardEditorWizardModel } from './quick-wizard-editor.model'; -import { FunderFormModel } from '../../dmp/editor/grant-tab/funder-form-model'; -import { ProjectFormModel } from '../../dmp/editor/grant-tab/project-form-model'; -import { CheckDeactivateBaseComponent } from '../../../library/deactivate/deactivate.component'; @Component({ selector: 'app-quick-wizard-editor-component', diff --git a/dmp-frontend/src/app/ui/quick-wizard/quick-wizard-editor/quick-wizard-editor.model.ts b/dmp-frontend/src/app/ui/quick-wizard/quick-wizard-editor/quick-wizard-editor.model.ts index 617c68ade..c707da664 100644 --- a/dmp-frontend/src/app/ui/quick-wizard/quick-wizard-editor/quick-wizard-editor.model.ts +++ b/dmp-frontend/src/app/ui/quick-wizard/quick-wizard-editor/quick-wizard-editor.model.ts @@ -1,23 +1,22 @@ -import { GrantEditorWizardModel } from "../grant-editor/grant-editor-wizard-model"; -import { DmpEditorWizardModel } from "../dmp-editor/dmp-editor-wizard-model"; -import { DmpModel } from "../../../core/model/dmp/dmp"; -import { GrantListingModel } from "../../../core/model/grant/grant-listing"; -import { DatasetModel } from "../../../core/model/dataset/dataset"; -import { ValidationContext } from "../../../common/forms/validation/validation-context"; -import { FormGroup, FormBuilder, Validators } from "@angular/forms"; -import { BackendErrorValidator } from "../../../common/forms/validation/custom-validator"; -import { ValidationErrorModel } from "../../../common/forms/validation/error-model/validation-error-model"; -import { DatasetEditorWizardModel } from "../dataset-editor/dataset-editor-wizard-model"; -import { DatasetWizardEditorModel } from "../../dataset/dataset-wizard/dataset-wizard-editor.model"; -import { FunderModel } from "../../../core/model/funder/funder"; -import { FunderFormModel } from "../../dmp/editor/grant-tab/funder-form-model"; -import { ProjectFormModel } from "../../dmp/editor/grant-tab/project-form-model"; -import { ProjectModel } from "../../../core/model/project/project"; +import { FormBuilder, FormGroup } from '@angular/forms'; +import { DmpModel } from '@app/core/model/dmp/dmp'; +import { FunderModel } from '@app/core/model/funder/funder'; +import { GrantListingModel } from '@app/core/model/grant/grant-listing'; +import { ProjectModel } from '@app/core/model/project/project'; +import { DatasetWizardEditorModel } from '@app/ui/dataset/dataset-wizard/dataset-wizard-editor.model'; +import { FunderFormModel } from '@app/ui/dmp/editor/grant-tab/funder-form-model'; +import { ProjectFormModel } from '@app/ui/dmp/editor/grant-tab/project-form-model'; +import { ValidationErrorModel } from '@common/forms/validation/error-model/validation-error-model'; +import { ValidationContext } from '@common/forms/validation/validation-context'; +import { DatasetEditorWizardModel } from '../dataset-editor/dataset-editor-wizard-model'; +import { DmpEditorWizardModel } from '../dmp-editor/dmp-editor-wizard-model'; +import { GrantEditorWizardModel } from '../grant-editor/grant-editor-wizard-model'; + export class QuickWizardEditorWizardModel { - public grant: GrantEditorWizardModel; - public funder: FunderFormModel; - public project: ProjectFormModel; + public grant: GrantEditorWizardModel; + public funder: FunderFormModel; + public project: ProjectFormModel; public dmp: DmpEditorWizardModel; public datasets: DatasetEditorWizardModel; public validationErrorModel: ValidationErrorModel = new ValidationErrorModel(); @@ -25,17 +24,17 @@ export class QuickWizardEditorWizardModel { fromModelGrant(item: GrantListingModel): QuickWizardEditorWizardModel { this.grant.fromModel(item); return this; - } + } - fromModelFunder(item: FunderModel): QuickWizardEditorWizardModel { - this.funder.fromModel(item); - return this; - } + fromModelFunder(item: FunderModel): QuickWizardEditorWizardModel { + this.funder.fromModel(item); + return this; + } - fromModelProject(item: ProjectModel): QuickWizardEditorWizardModel { - this.project.fromModel(item); - return this; - } + fromModelProject(item: ProjectModel): QuickWizardEditorWizardModel { + this.project.fromModel(item); + return this; + } fromModelDmp(item: DmpModel): QuickWizardEditorWizardModel { this.dmp.fromModel(item); @@ -45,14 +44,14 @@ export class QuickWizardEditorWizardModel { fromModelDataset(item: DatasetWizardEditorModel[]): QuickWizardEditorWizardModel { this.datasets.fromModel(item); return this; - } + } buildForm(context: ValidationContext = null): FormGroup { // if (context == null) { context = this.createValidationContext(); } const formGroup = new FormBuilder().group({ - grant: new GrantEditorWizardModel().buildForm(), - funder: new FunderFormModel().buildForm(), - project: new ProjectFormModel().buildForm(), + grant: new GrantEditorWizardModel().buildForm(), + funder: new FunderFormModel().buildForm(), + project: new ProjectFormModel().buildForm(), dmp: new DmpEditorWizardModel().buildForm(), datasets: new DatasetEditorWizardModel().buildForm() diff --git a/dmp-frontend/src/app/ui/quick-wizard/quick-wizard.module.ts b/dmp-frontend/src/app/ui/quick-wizard/quick-wizard.module.ts index d0f5980af..99bdfc6e5 100644 --- a/dmp-frontend/src/app/ui/quick-wizard/quick-wizard.module.ts +++ b/dmp-frontend/src/app/ui/quick-wizard/quick-wizard.module.ts @@ -1,19 +1,19 @@ import { NgModule } from '@angular/core'; -import { CommonFormsModule } from '../../common/forms/common-forms.module'; -import { CommonUiModule } from '../../common/ui/common-ui.module'; -import { ConfirmationDialogModule } from '../../library/confirmation-dialog/confirmation-dialog.module'; -import { UrlListingModule } from '../../library/url-listing/url-listing.module'; -import { QuickWizardRoutingModule } from './quick-wizard.routing'; -import { GrantEditorWizardComponent } from './grant-editor/grant-editor-wizard.component'; -import { DmpEditorWizardComponent } from './dmp-editor/dmp-editor-wizard.component'; -import { QuickWizardEditorComponent } from './quick-wizard-editor/quick-wizard-editor.component'; -import { AutoCompleteModule } from '../../library/auto-complete/auto-complete.module'; -import { DatasetEditorWizardComponent } from './dataset-editor/dataset-editor-wizard.component'; -import { DatasetDescriptionFormModule } from '../misc/dataset-description-form/dataset-description-form.module'; -import { DmpModule } from '../dmp/dmp.module'; -import { FunderEditorWizardComponent } from './funder-editor/funder-editor-wizard.component'; -import { ProjectEditorWizardComponent } from './project-editor/project-editor-wizard.component'; -import { CanDeactivateGuard } from '../../library/deactivate/can-deactivate.guard'; +import { AutoCompleteModule } from '@app/library/auto-complete/auto-complete.module'; +import { ConfirmationDialogModule } from '@common/modules/confirmation-dialog/confirmation-dialog.module'; +import { CanDeactivateGuard } from '@app/library/deactivate/can-deactivate.guard'; +import { UrlListingModule } from '@app/library/url-listing/url-listing.module'; +import { DmpModule } from '@app/ui/dmp/dmp.module'; +import { DatasetDescriptionFormModule } from '@app/ui/misc/dataset-description-form/dataset-description-form.module'; +import { DatasetEditorWizardComponent } from '@app/ui/quick-wizard/dataset-editor/dataset-editor-wizard.component'; +import { DmpEditorWizardComponent } from '@app/ui/quick-wizard/dmp-editor/dmp-editor-wizard.component'; +import { FunderEditorWizardComponent } from '@app/ui/quick-wizard/funder-editor/funder-editor-wizard.component'; +import { GrantEditorWizardComponent } from '@app/ui/quick-wizard/grant-editor/grant-editor-wizard.component'; +import { ProjectEditorWizardComponent } from '@app/ui/quick-wizard/project-editor/project-editor-wizard.component'; +import { QuickWizardEditorComponent } from '@app/ui/quick-wizard/quick-wizard-editor/quick-wizard-editor.component'; +import { QuickWizardRoutingModule } from '@app/ui/quick-wizard/quick-wizard.routing'; +import { CommonFormsModule } from '@common/forms/common-forms.module'; +import { CommonUiModule } from '@common/ui/common-ui.module'; @NgModule({ imports: [ diff --git a/dmp-frontend/src/app/ui/sidebar/sidebar-footer/privacy/privacy.module.ts b/dmp-frontend/src/app/ui/sidebar/sidebar-footer/privacy/privacy.module.ts index 37921fc36..8c303fe91 100644 --- a/dmp-frontend/src/app/ui/sidebar/sidebar-footer/privacy/privacy.module.ts +++ b/dmp-frontend/src/app/ui/sidebar/sidebar-footer/privacy/privacy.module.ts @@ -1,15 +1,15 @@ import { NgModule } from '@angular/core'; -import { PrivacyComponent } from './privacy.component'; -import { PrivacyRoutingModule } from './privacy.routing'; -import { CommonUiModule } from '../../../../common/ui/common-ui.module'; +import { PrivacyComponent } from '@app/ui/sidebar/sidebar-footer/privacy/privacy.component'; +import { PrivacyRoutingModule } from '@app/ui/sidebar/sidebar-footer/privacy/privacy.routing'; +import { CommonUiModule } from '@common/ui/common-ui.module'; @NgModule({ imports: [ - CommonUiModule, - PrivacyRoutingModule + CommonUiModule, + PrivacyRoutingModule ], declarations: [ - PrivacyComponent + PrivacyComponent ] }) export class PrivacyModule { } diff --git a/dmp-frontend/src/app/ui/sidebar/sidebar-footer/sidebar-footer.component.ts b/dmp-frontend/src/app/ui/sidebar/sidebar-footer/sidebar-footer.component.ts index c03321df9..ac594671b 100644 --- a/dmp-frontend/src/app/ui/sidebar/sidebar-footer/sidebar-footer.component.ts +++ b/dmp-frontend/src/app/ui/sidebar/sidebar-footer/sidebar-footer.component.ts @@ -1,17 +1,17 @@ import { Component, OnInit } from '@angular/core'; import { AbstractControl, FormArray, FormControl, FormGroup } from '@angular/forms'; import { MatDialog } from '@angular/material/dialog'; +import { Router } from '@angular/router'; +import { ContactEmailFormModel } from '@app/core/model/contact/contact-email-form-model'; +import { ContactSupportService } from '@app/core/services/contact-support/contact-support.service'; +import { SnackBarNotificationLevel, UiNotificationService } from '@app/core/services/notification/ui-notification-service'; +import { ContactDialogComponent } from '@app/ui/contact/contact-dialog/contact-dialog.component'; +import { FaqDialogComponent } from '@app/ui/faq/dialog/faq-dialog.component'; +import { GlossaryDialogComponent } from '@app/ui/glossary/dialog/glossary-dialog.component'; +import { BaseComponent } from '@common/base/base.component'; +import { ValidationErrorModel } from '@common/forms/validation/error-model/validation-error-model'; import { TranslateService } from '@ngx-translate/core'; import { takeUntil } from 'rxjs/operators'; -import { ValidationErrorModel } from '../../../common/forms/validation/error-model/validation-error-model'; -import { BaseComponent } from '../../../core/common/base/base.component'; -import { ContactEmailFormModel } from '../../../core/model/contact/contact-email-form-model'; -import { ContactSupportService } from '../../../core/services/contact-support/contact-support.service'; -import { SnackBarNotificationLevel, UiNotificationService } from '../../../core/services/notification/ui-notification-service'; -import { GlossaryDialogComponent } from '../../glossary/dialog/glossary-dialog.component'; -import { Router } from '@angular/router'; -import { FaqDialogComponent } from '../../faq/dialog/faq-dialog.component'; -import { ContactDialogComponent } from '../../contact/contact-dialog/contact-dialog.component'; @Component({ selector: 'app-sidebar-footer', diff --git a/dmp-frontend/src/app/ui/sidebar/sidebar-footer/terms/terms.module.ts b/dmp-frontend/src/app/ui/sidebar/sidebar-footer/terms/terms.module.ts index d9c62dcc5..86c5c4a3a 100644 --- a/dmp-frontend/src/app/ui/sidebar/sidebar-footer/terms/terms.module.ts +++ b/dmp-frontend/src/app/ui/sidebar/sidebar-footer/terms/terms.module.ts @@ -1,7 +1,7 @@ import { NgModule } from '@angular/core'; -import { TermsComponent } from './terms.component'; -import { TermsRoutingModule } from './terms.routing'; -import { CommonUiModule } from '../../../../common/ui/common-ui.module'; +import { TermsComponent } from '@app/ui/sidebar/sidebar-footer/terms/terms.component'; +import { TermsRoutingModule } from '@app/ui/sidebar/sidebar-footer/terms/terms.routing'; +import { CommonUiModule } from '@common/ui/common-ui.module'; @NgModule({ imports: [ diff --git a/dmp-frontend/src/app/ui/sidebar/sidebar.module.ts b/dmp-frontend/src/app/ui/sidebar/sidebar.module.ts index a42c97328..9a05ddb09 100644 --- a/dmp-frontend/src/app/ui/sidebar/sidebar.module.ts +++ b/dmp-frontend/src/app/ui/sidebar/sidebar.module.ts @@ -1,12 +1,12 @@ import { NgModule } from '@angular/core'; import { RouterModule } from '@angular/router'; -import { CommonFormsModule } from '../../common/forms/common-forms.module'; -import { CommonUiModule } from '../../common/ui/common-ui.module'; +import { CommonFormsModule } from '@common/forms/common-forms.module'; +import { CommonUiModule } from '@common/ui/common-ui.module'; +import { ContactModule } from '../contact/contact.module'; +import { FaqModule } from '../faq/faq.module'; +import { GlossaryModule } from '../glossary/glossary.module'; import { SidebarFooterComponent } from './sidebar-footer/sidebar-footer.component'; import { SidebarComponent } from './sidebar.component'; -import { GlossaryModule } from '../glossary/glossary.module'; -import { FaqModule } from '../faq/faq.module'; -import { ContactModule } from '../contact/contact.module'; @NgModule({ imports: [ diff --git a/dmp-frontend/src/app/ui/user-profile/user-profile.component.ts b/dmp-frontend/src/app/ui/user-profile/user-profile.component.ts index a5e847417..2438df81b 100644 --- a/dmp-frontend/src/app/ui/user-profile/user-profile.component.ts +++ b/dmp-frontend/src/app/ui/user-profile/user-profile.component.ts @@ -1,17 +1,17 @@ import { Component, OnDestroy, OnInit } from '@angular/core'; import { FormBuilder, FormControl, FormGroup, Validators } from '@angular/forms'; import { ActivatedRoute, Params, Router } from '@angular/router'; +import { CultureInfo } from '@app/core/model/culture-info'; +import { DmpModel } from '@app/core/model/dmp/dmp'; +import { UserListingModel } from '@app/core/model/user/user-listing'; +import { AuthService } from '@app/core/services/auth/auth.service'; +import { CultureService } from '@app/core/services/culture/culture-service'; +import { UserService } from '@app/core/services/user/user.service'; +import { BaseComponent } from '@common/base/base.component'; import { TranslateService } from '@ngx-translate/core'; import * as moment from 'moment-timezone'; import { Observable, of } from 'rxjs'; import { map, takeUntil } from 'rxjs/operators'; -import { BaseComponent } from '../../core/common/base/base.component'; -import { CultureInfo } from '../../core/model/culture-info'; -import { DmpModel } from '../../core/model/dmp/dmp'; -import { UserListingModel } from '../../core/model/user/user-listing'; -import { AuthService } from '../../core/services/auth/auth.service'; -import { CultureService } from '../../core/services/culture/culture-service'; -import { UserService } from '../../core/services/user/user.service'; const availableLanguages: any[] = require('../../../assets/resources/language.json'); diff --git a/dmp-frontend/src/app/ui/user-profile/user-profile.module.ts b/dmp-frontend/src/app/ui/user-profile/user-profile.module.ts index be8e300a4..29f166199 100644 --- a/dmp-frontend/src/app/ui/user-profile/user-profile.module.ts +++ b/dmp-frontend/src/app/ui/user-profile/user-profile.module.ts @@ -1,7 +1,7 @@ import { NgModule } from '@angular/core'; -import { CommonFormsModule } from '../../common/forms/common-forms.module'; -import { CommonUiModule } from '../../common/ui/common-ui.module'; -import { FormattingModule } from '../../core/formatting.module'; +import { FormattingModule } from '@app/core/formatting.module'; +import { CommonFormsModule } from '@common/forms/common-forms.module'; +import { CommonUiModule } from '@common/ui/common-ui.module'; import { UserProfileComponent } from './user-profile.component'; import { UserProfileRoutingModule } from './user-profile.routing'; diff --git a/dmp-frontend/src/assets/i18n/en.json b/dmp-frontend/src/assets/i18n/en.json index d0c9ba3a8..03a240d41 100644 --- a/dmp-frontend/src/assets/i18n/en.json +++ b/dmp-frontend/src/assets/i18n/en.json @@ -34,6 +34,18 @@ "EDIT": "Edited", "FINALISED": "Finalized" }, + "FORM-VALIDATION-DISPLAY-DIALOG": { + "WARNING": "Warning!", + "THIS-FIELD": "Field", + "HAS-ERROR": "has error", + "REQUIRED": "Required", + "EMAIL": "Invalid e-mail", + "MIN-VALUE": "Minimum value should be {{min}}", + "MAX-VALUE": "Maximum value should be {{max}}", + "ACTIONS": { + "CANCEL": "Close" + } + }, "CONFIRMATION-DIALOG": { "DELETE-ITEM": "Delete this item?", "DELETE-USER": "Remove this collaborator?", @@ -342,7 +354,7 @@ "TITLE": "Grants", "SUBTITLE": "Grant Subtitle", "ACTIONS": { - "NEW":"New Grant" + "NEW": "New Grant" } }, "DMP-LISTING": { @@ -510,7 +522,7 @@ "MAKE-IT-PUBLIC": "Make it public", "VIEW": "View", "NEW": "New Dataset Description", - "CREATE-NEW":"Create new Dataset Description" + "CREATE-NEW": "Create new Dataset Description" }, "TOOLTIP": { "DATASET-STATUS": { @@ -574,8 +586,8 @@ "SELECT": "Select Dataset Description Template" }, "SNACK-BAR": { - "SUCCESSFUL-CREATION" : "Imported Successfully", - "UNSUCCESSFUL" : "Something went wrong" + "SUCCESSFUL-CREATION": "Imported Successfully", + "UNSUCCESSFUL": "Something went wrong" } }, "DMP-PROFILE-EDITOR": { @@ -856,7 +868,7 @@ "DMP-VISIBILITY": { "VISIBILITY": "Visibility", "PUBLIC": "Published", - "FINALIZED": "Finalized" , + "FINALIZED": "Finalized", "DRAFT": "Draft", "ANY": "Any" }, diff --git a/dmp-frontend/src/common/base/base-enum-utils.service.ts b/dmp-frontend/src/common/base/base-enum-utils.service.ts new file mode 100644 index 000000000..0d5654137 --- /dev/null +++ b/dmp-frontend/src/common/base/base-enum-utils.service.ts @@ -0,0 +1,17 @@ +import { BaseService } from '@common/base/base.service'; + +export abstract class BaseEnumUtilsService extends BaseService { + + public getEnumValues(T): Array { + + //getting all numeric values + const numericValues: T[] = Object.keys(T).map(key => T[key]).filter(value => typeof (value) === 'number'); + if (numericValues.length > 0) { return numericValues; } + + //getting all string values + const stringValues: T[] = Object.keys(T).map(key => T[key]).filter(value => typeof (value) === 'string'); + if (stringValues.length > 0) { return stringValues; } + + return []; + } +} diff --git a/dmp-frontend/src/common/base/base-form-editor-model.ts b/dmp-frontend/src/common/base/base-form-editor-model.ts new file mode 100644 index 000000000..4f414abd5 --- /dev/null +++ b/dmp-frontend/src/common/base/base-form-editor-model.ts @@ -0,0 +1,8 @@ +import { FormBuilder } from '@angular/forms'; +import { ValidationErrorModel } from '@common/forms/validation/error-model/validation-error-model'; + +export abstract class BaseFormEditorModel { + + public validationErrorModel: ValidationErrorModel = new ValidationErrorModel(); + protected formBuilder: FormBuilder = new FormBuilder(); +} diff --git a/dmp-frontend/src/common/base/base-form-editor.ts b/dmp-frontend/src/common/base/base-form-editor.ts new file mode 100644 index 000000000..9ef8bbc80 --- /dev/null +++ b/dmp-frontend/src/common/base/base-form-editor.ts @@ -0,0 +1,111 @@ +import { HttpErrorResponse } from '@angular/common/http'; +import { FormGroup } from '@angular/forms'; +import { MatDialog } from '@angular/material'; +import { ActivatedRoute, Router } from '@angular/router'; +import { BaseFormEditorModel } from '@common/base/base-form-editor-model'; +import { BasePendingChangesComponent } from '@common/base/base-pending-changes.component'; +import { FormService } from '@common/forms/form-service'; +import { ConfirmationDialogComponent } from '@common/modules/confirmation-dialog/confirmation-dialog.component'; +import { HttpError, HttpErrorHandlingService } from '@common/modules/errors/error-handling/http-error-handling.service'; +import { SnackBarNotificationLevel, UiNotificationService } from '@common/modules/notification/ui-notification-service'; +import { Guid } from '@common/types/guid'; +import { TranslateService } from '@ngx-translate/core'; +import { Observable } from 'rxjs'; +import { takeUntil } from 'rxjs/operators'; + +export abstract class BaseFormEditor extends BasePendingChangesComponent { + + isNew = true; + isDeleted = false; + editorModel: EditorModelType; + serverData: FormModel; //To be used only for presentation purposes + formGroup: FormGroup = null; + + abstract deleteItem(id: Guid); + abstract refreshData(): void; + abstract persistForm(onSuccess?: (response) => void): void; + abstract buildForm(): void; + + constructor( + protected dialog: MatDialog, + protected language: TranslateService, + protected formService: FormService, + protected router: Router, + protected route: ActivatedRoute, + protected uiNotificationService: UiNotificationService, + protected httpErrorHandlingService: HttpErrorHandlingService, + ) { super(); } + + public isFormValid() { + return this.formGroup.valid; + } + + public delete() { + const value = this.formGroup.value; + if (value.id) { + const dialogRef = this.dialog.open(ConfirmationDialogComponent, { + maxWidth: '300px', + data: { + message: this.language.instant('COMMONS.CONFIRMATION-DIALOG.DELETE-ITEM'), + confirmButton: this.language.instant('COMMONS.CONFIRMATION-DIALOG.ACTIONS.CONFIRM'), + cancelButton: this.language.instant('COMMONS.CONFIRMATION-DIALOG.ACTIONS.CANCEL') + } + }); + dialogRef.afterClosed().pipe(takeUntil(this._destroyed)).subscribe(result => { + if (result) { + this.deleteItem(value.id); + } + }); + } + } + + public cancel(): void { + this.router.navigate(['/folders']); + } + + onCallbackSuccess(data?: any): void { + this.uiNotificationService.snackBarNotification(this.isNew ? this.language.instant('GENERAL.SNACK-BAR.SUCCESSFUL-CREATION') : this.language.instant('GENERAL.SNACK-BAR.SUCCESSFUL-UPDATE'), SnackBarNotificationLevel.Success); + this.refreshOnNavigateToData(data.id); + } + + onCallbackError(errorResponse: HttpErrorResponse) { + const error: HttpError = this.httpErrorHandlingService.getError(errorResponse); + if (error.statusCode === 400) { + this.editorModel.validationErrorModel.fromJSONObject(errorResponse.error); + this.formService.validateAllFormFields(this.formGroup); + } else { + this.uiNotificationService.snackBarNotification(error.getMessagesString(), SnackBarNotificationLevel.Warning); + } + } + + canDeactivate(): boolean | Observable { + return this.formGroup ? !this.formGroup.dirty : true; + } + + formSubmit(): void { + this.formService.removeAllBackEndErrors(this.formGroup); + this.formService.touchAllFormFields(this.formGroup); + if (!this.isFormValid()) { + return; + } + + this.persistForm(complete => { + this.refreshOnNavigateToData(complete.id); + }); + } + + private refreshOnNavigateToData(id: Guid): void { + if (this.isNew) { + this.formGroup.markAsPristine(); + this.router.navigate(['../' + (id)], { relativeTo: this.route }); + } else { this.internalRefreshData(); } + } + + private internalRefreshData(): void { + setTimeout(() => { + this.formGroup = null; + this.editorModel = null; + }); + this.refreshData(); + } +} diff --git a/dmp-frontend/src/common/base/base-http.service.ts b/dmp-frontend/src/common/base/base-http.service.ts new file mode 100644 index 000000000..7ac3735fe --- /dev/null +++ b/dmp-frontend/src/common/base/base-http.service.ts @@ -0,0 +1,39 @@ +import { HttpClient } from '@angular/common/http'; +import { Injectable } from '@angular/core'; +import { Observable } from 'rxjs'; + +@Injectable() +export class BaseHttpService { + constructor( + protected http: HttpClient + ) { + } + + get(url: string, options?: Object): Observable { + return this.http.get(url, options); + } + + post(url: string, body: any, options?: Object): Observable { + return this.http.post(url, body, options); + } + + put(url: string, body: any, options?: Object): Observable { + return this.http.put(url, body, options); + } + + delete(url: string, options?: Object): Observable { + return this.http.delete(url, options); + } + + patch(url: string, body: any, options?: Object): Observable { + return this.http.patch(url, body, options); + } + + head(url: string, options?: Object): Observable { + return this.http.head(url, options); + } + + options(url: string, options?: Object): Observable { + return this.http.options(url, options); + } +} diff --git a/dmp-frontend/src/common/base/base-pending-changes.component.ts b/dmp-frontend/src/common/base/base-pending-changes.component.ts new file mode 100644 index 000000000..fbf4a98ea --- /dev/null +++ b/dmp-frontend/src/common/base/base-pending-changes.component.ts @@ -0,0 +1,17 @@ +import { HostListener } from '@angular/core'; +import { BaseComponent } from '@common/base/base.component'; +import { Observable } from 'rxjs'; + +export abstract class BasePendingChangesComponent extends BaseComponent { + + protected constructor() { super(); } + + abstract canDeactivate(): boolean | Observable; + + @HostListener('window:beforeunload', ['$event']) + unloadNotification($event: any) { + if (!this.canDeactivate()) { + $event.returnValue = true; + } + } +} diff --git a/dmp-frontend/src/app/core/common/base/base.component.ts b/dmp-frontend/src/common/base/base.component.ts similarity index 100% rename from dmp-frontend/src/app/core/common/base/base.component.ts rename to dmp-frontend/src/common/base/base.component.ts diff --git a/dmp-frontend/src/common/base/base.guard.ts b/dmp-frontend/src/common/base/base.guard.ts new file mode 100644 index 000000000..a4809b6f3 --- /dev/null +++ b/dmp-frontend/src/common/base/base.guard.ts @@ -0,0 +1,14 @@ +import { OnDestroy } from '@angular/core'; +import { Subject } from 'rxjs'; + +export abstract class BaseGuard implements OnDestroy { + + protected _destroyed: Subject = new Subject(); + + protected constructor() { } + + ngOnDestroy(): void { + this._destroyed.next(true); + this._destroyed.complete(); + } +} diff --git a/dmp-frontend/src/common/base/base.pipe.ts b/dmp-frontend/src/common/base/base.pipe.ts new file mode 100644 index 000000000..a36b43efb --- /dev/null +++ b/dmp-frontend/src/common/base/base.pipe.ts @@ -0,0 +1,14 @@ +import { OnDestroy } from '@angular/core'; +import { Subject } from 'rxjs'; + +export abstract class BasePipe implements OnDestroy { + + protected _destroyed: Subject = new Subject(); + + protected constructor() { } + + ngOnDestroy(): void { + this._destroyed.next(true); + this._destroyed.complete(); + } +} diff --git a/dmp-frontend/src/app/core/common/base/base.service.ts b/dmp-frontend/src/common/base/base.service.ts similarity index 100% rename from dmp-frontend/src/app/core/common/base/base.service.ts rename to dmp-frontend/src/common/base/base.service.ts diff --git a/dmp-frontend/src/common/base/tenant-configuration-editor.component.ts b/dmp-frontend/src/common/base/tenant-configuration-editor.component.ts new file mode 100644 index 000000000..46c632d1b --- /dev/null +++ b/dmp-frontend/src/common/base/tenant-configuration-editor.component.ts @@ -0,0 +1,20 @@ +import { FormControl } from '@angular/forms'; +import { BaseComponent } from '@common/base/base.component'; + +export abstract class TenantConfigurationBaseComponent extends BaseComponent { + + readonly secretValue: string = '1784E159-C809-4F3F-AC8F-90F98B04B01D'; + shouldShowEditSecret: Map = new Map(); + + protected constructor() { super(); } + + editSecret(formControl: FormControl, formControlName: string) { + this.shouldShowEditSecret.set(formControlName, true); + formControl.setValue(undefined); + } + + cancelEditSecret(formControl: FormControl, formControlName: string) { + this.shouldShowEditSecret.delete(formControlName); + formControl.setValue(this.secretValue); + } +} diff --git a/dmp-frontend/src/app/common/date/moment-utc-date-adapter.ts b/dmp-frontend/src/common/date/moment-utc-date-adapter.ts similarity index 93% rename from dmp-frontend/src/app/common/date/moment-utc-date-adapter.ts rename to dmp-frontend/src/common/date/moment-utc-date-adapter.ts index 659926878..0b3ca383d 100644 --- a/dmp-frontend/src/app/common/date/moment-utc-date-adapter.ts +++ b/dmp-frontend/src/common/date/moment-utc-date-adapter.ts @@ -36,7 +36,8 @@ export class MomentUtcDateAdapter extends MomentDateAdapter { // manually writing on the textbox parse(value: any, parseFormat: string | string[]): Moment | null { const initialParse = super.parse(value, parseFormat); - if (initialParse === null || !initialParse.isValid()) { return initialParse; } + if (initialParse == null) { return null }; + if (!initialParse.isValid()) { return initialParse; } const result = moment.utc({ year: initialParse.year(), month: initialParse.month(), date: initialParse.date() }).locale(this.locale); return result; diff --git a/dmp-frontend/src/app/common/forms/common-forms.module.ts b/dmp-frontend/src/common/forms/common-forms.module.ts similarity index 55% rename from dmp-frontend/src/app/common/forms/common-forms.module.ts rename to dmp-frontend/src/common/forms/common-forms.module.ts index 13f128841..cea6b2aab 100644 --- a/dmp-frontend/src/app/common/forms/common-forms.module.ts +++ b/dmp-frontend/src/common/forms/common-forms.module.ts @@ -1,5 +1,7 @@ import { NgModule } from '@angular/core'; import { FormsModule, ReactiveFormsModule } from '@angular/forms'; +import { PendingChangesGuard } from '@common/forms/pending-form-changes/pending-form-changes-guard.service'; +import { FormService } from './form-service'; @NgModule({ imports: [ @@ -9,6 +11,10 @@ import { FormsModule, ReactiveFormsModule } from '@angular/forms'; exports: [ FormsModule, ReactiveFormsModule, + ], + providers: [ + FormService, + PendingChangesGuard ] }) export class CommonFormsModule { } diff --git a/dmp-frontend/src/common/forms/form-service.ts b/dmp-frontend/src/common/forms/form-service.ts new file mode 100644 index 000000000..3bb75fa85 --- /dev/null +++ b/dmp-frontend/src/common/forms/form-service.ts @@ -0,0 +1,81 @@ +import { Injectable } from '@angular/core'; +import { AbstractControl, FormArray, FormControl, FormGroup } from '@angular/forms'; + +@Injectable() +export class FormService { + + constructor() { + } + + 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); + }); + } + } + + public removeAllBackEndErrors(formControl: AbstractControl) { + if (formControl instanceof FormControl) { + this.removeError(formControl, 'backendError'); + } else if (formControl instanceof FormGroup) { + Object.keys(formControl.controls).forEach(item => { + const control = formControl.get(item); + this.removeAllBackEndErrors(control); + }); + } else if (formControl instanceof FormArray) { + formControl.controls.forEach(item => { + this.removeAllBackEndErrors(item); + }); + } + } + + public removeError(control: FormControl, error: string) { + const err = control.errors; + if (err && err[error]) { + delete err[error]; + if (!Object.keys(err).length) { + control.setErrors(null); // Make control Valid again + } else { + control.setErrors(err); // if there are others errors left attach them back to the control + } + } + } + + public getValue(control: AbstractControl) { + return JSON.parse(JSON.stringify(control.value)); //Used to deep copy formGroup. + } + + // TODO + // public reapplyValidators(array: FormArray, validationContext: ValidationContext) { + // if (!Array.isArray(array.controls)) { return; } + // array.controls.forEach((element, index) => { + // const formGroup = element as FormGroup; + // Object.keys(formGroup.controls).forEach(key => { + // formGroup.get(key).setValidators(validationContext.getValidation(key).validators); + // }); + // }); + // } +} diff --git a/dmp-frontend/src/common/forms/form-validation-errors-dialog/form-validation-errors-dialog.component.html b/dmp-frontend/src/common/forms/form-validation-errors-dialog/form-validation-errors-dialog.component.html new file mode 100644 index 000000000..1126efc31 --- /dev/null +++ b/dmp-frontend/src/common/forms/form-validation-errors-dialog/form-validation-errors-dialog.component.html @@ -0,0 +1,11 @@ +
+

{{'GENERAL.FORM-VALIDATION-DISPLAY-DIALOG.WARNING' | translate}}

+
+
    +
  • {{error}}
  • +
+
+
+ +
+
diff --git a/dmp-frontend/src/common/forms/form-validation-errors-dialog/form-validation-errors-dialog.component.scss b/dmp-frontend/src/common/forms/form-validation-errors-dialog/form-validation-errors-dialog.component.scss new file mode 100644 index 000000000..66c7f2cf2 --- /dev/null +++ b/dmp-frontend/src/common/forms/form-validation-errors-dialog/form-validation-errors-dialog.component.scss @@ -0,0 +1,5 @@ +#warningText { + color: red; + text-decoration: underline; + text-decoration-color: red; +} \ No newline at end of file diff --git a/dmp-frontend/src/common/forms/form-validation-errors-dialog/form-validation-errors-dialog.component.ts b/dmp-frontend/src/common/forms/form-validation-errors-dialog/form-validation-errors-dialog.component.ts new file mode 100644 index 000000000..2e2b31be6 --- /dev/null +++ b/dmp-frontend/src/common/forms/form-validation-errors-dialog/form-validation-errors-dialog.component.ts @@ -0,0 +1,78 @@ +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, + @Inject(MAT_DIALOG_DATA) public data: any, + private language: TranslateService + ) { + this.formGroup = data.formGroup; + this.errorMessages = this.getErrors(this.formGroup); + } + + 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('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'); + // } + + 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; + } +} diff --git a/dmp-frontend/src/common/forms/form-validation-errors-dialog/form-validation-errors-dialog.module.ts b/dmp-frontend/src/common/forms/form-validation-errors-dialog/form-validation-errors-dialog.module.ts new file mode 100644 index 000000000..fad8c4028 --- /dev/null +++ b/dmp-frontend/src/common/forms/form-validation-errors-dialog/form-validation-errors-dialog.module.ts @@ -0,0 +1,25 @@ +import { NgModule } from '@angular/core'; +import { FormValidationErrorsDialogComponent } from '@common/forms/form-validation-errors-dialog/form-validation-errors-dialog.component'; +import { FormValidationErrorsDirective } from '@common/forms/form-validation-errors-dialog/form-validation-errors-directive'; +import { CommonUiModule } from '@common/ui/common-ui.module'; + +@NgModule({ + imports: [ + CommonUiModule, + ], + exports: [ + FormValidationErrorsDialogComponent, + FormValidationErrorsDirective + ], + declarations: [ + FormValidationErrorsDialogComponent, + FormValidationErrorsDirective + ], + entryComponents: [ + FormValidationErrorsDialogComponent + ], + providers: [ + FormValidationErrorsDirective + ] +}) +export class FormValidationErrorsDialogModule { } diff --git a/dmp-frontend/src/common/forms/form-validation-errors-dialog/form-validation-errors-directive.ts b/dmp-frontend/src/common/forms/form-validation-errors-dialog/form-validation-errors-directive.ts new file mode 100644 index 000000000..60724499a --- /dev/null +++ b/dmp-frontend/src/common/forms/form-validation-errors-dialog/form-validation-errors-directive.ts @@ -0,0 +1,20 @@ +import { Directive, ElementRef, OnInit } from '@angular/core'; +import { NgControl } from '@angular/forms'; + +@Directive({ + selector: '[formControl], [formControlName]' +}) +export class FormValidationErrorsDirective implements OnInit { + get control() { + return this.controlDir.control; + } + + constructor( + private controlDir: NgControl, + private host: ElementRef) { + } + + ngOnInit() { + (this.controlDir.control as any).nativeElement = this.host.nativeElement; + } +} diff --git a/dmp-frontend/src/common/forms/pending-form-changes/pending-form-changes-guard.service.ts b/dmp-frontend/src/common/forms/pending-form-changes/pending-form-changes-guard.service.ts new file mode 100644 index 000000000..c8a5166d9 --- /dev/null +++ b/dmp-frontend/src/common/forms/pending-form-changes/pending-form-changes-guard.service.ts @@ -0,0 +1,34 @@ +import { Injectable } from '@angular/core'; +import { MatDialog } from '@angular/material/dialog'; +import { CanDeactivate } from '@angular/router'; +import { BasePendingChangesComponent } from '@common/base/base-pending-changes.component'; +import { ConfirmationDialogComponent } from '@common/modules/confirmation-dialog/confirmation-dialog.component'; +import { TranslateService } from '@ngx-translate/core'; +import { from, Observable } from 'rxjs'; +import { map } from 'rxjs/operators'; + +@Injectable() +export class PendingChangesGuard implements CanDeactivate { + + constructor( + private dialog: MatDialog, + private language: TranslateService + ) { + } + + canDeactivate(component: BasePendingChangesComponent): boolean | Observable { + if (component.canDeactivate()) { + return from([true]); + } else { + const dialogRef = this.dialog.open(ConfirmationDialogComponent, { + maxWidth: '300px', + data: { + message: this.language.instant('COMMONS.PENDING-FORM-CHANGES-DIALOG.MESSAGE'), + cancelButton: this.language.instant('COMMONS.PENDING-FORM-CHANGES-DIALOG.ACTIONS.NO'), + confirmButton: this.language.instant('COMMONS.PENDING-FORM-CHANGES-DIALOG.ACTIONS.YES') + } + }); + return dialogRef.afterClosed().pipe(map(x => x ? true : false)); + } + } +} diff --git a/dmp-frontend/src/common/forms/validation/custom-validator.ts b/dmp-frontend/src/common/forms/validation/custom-validator.ts new file mode 100644 index 000000000..9854d1d4d --- /dev/null +++ b/dmp-frontend/src/common/forms/validation/custom-validator.ts @@ -0,0 +1,100 @@ +import { AbstractControl, ValidatorFn, Validators } from '@angular/forms'; +import { ValidationErrorModel } from '@common/forms/validation/error-model/validation-error-model'; +import { isNullOrUndefined } from 'util'; + +export function BackendErrorValidator(errorModel: ValidationErrorModel, propertyName: string): ValidatorFn { + return (control: AbstractControl): { [key: string]: any } => { + const error: string = errorModel.getError(propertyName); + return error ? { 'backendError': { message: error } } : null; + }; +} + +export function E164PhoneValidator(): ValidatorFn { + return Validators.pattern('^\\+?[1-9]\\d{1,14}$'); +} + +// Getter is required because the index of each element is not fixed (array does not always follow LIFO) +export function BackendArrayErrorValidator(errorModel: ValidationErrorModel, propertyNameGetter: () => string): ValidatorFn { + return (control: AbstractControl): { [key: string]: any } => { + const error: string = errorModel.getError(propertyNameGetter()); + return error ? { 'backendError': { message: error } } : null; + }; +} + +export function CustomErrorValidator(errorModel: ValidationErrorModel, propertyNames: string[]): ValidatorFn { + return (control: AbstractControl): { [key: string]: any } => { + const error: string = errorModel.getErrors(propertyNames); + return error ? { 'customError': { message: error } } : null; + }; +} + +export function DateValidator(): ValidatorFn { + return (control: AbstractControl): { [key: string]: any } => { + if (control.value) { + const dateString: string[] = control.value.split('-'); + const yearString = dateString.length > 0 ? dateString[0].replace(/_/g, '') : null; + const monthString = dateString.length > 1 ? dateString[1].replace(/_/g, '') : null; + const dayString = dateString.length > 2 ? dateString[2].replace(/_/g, '') : null; + let yearParsed: number = null; + let monthParsed: number = null; + let dayParsed: number = null; + + if (!isNullOrUndefined(yearString) && yearString.length === 4 && Number(yearString) !== NaN) { + yearParsed = Number(yearString); + } + if (!isNullOrUndefined(monthString) && monthString.length > 0 && Number(monthString) !== NaN) { + monthParsed = Number(monthString); + } + if (!isNullOrUndefined(dayString) && dayString.length > 0 && Number(dayString) !== NaN) { + dayParsed = Number(dayString); + } + + if ((dayParsed && (!monthParsed || !yearParsed)) || (monthParsed && !yearParsed) || !yearParsed) { + return { 'invalidDate': true }; + } + + const current_date = new Date(); + yearParsed = yearParsed ? yearParsed : current_date.getFullYear(); + monthParsed = monthParsed ? monthParsed - 1 : current_date.getMonth(); + dayParsed = dayParsed ? dayParsed : 1; + + //due to autocorrection of Date objects + const d = new Date(yearParsed, monthParsed, dayParsed); + if (d.getFullYear() === yearParsed && d.getMonth() === monthParsed && d.getDate() === dayParsed) { + return null; + } + return { 'invalidDate': true }; + } + return null; + }; +} + +export function DateFromToValidator(): ValidatorFn { + return (control: AbstractControl): { [key: string]: any } => { + if (control.get('fromTime').value && control.get('toTime').value) { + const fromDate = new Date(control.get('fromTime').value); + const toDate = new Date(control.get('toTime').value); + if (fromDate <= toDate) { return null; } + return { 'invalidFromToDate': true }; + } + return null; + }; +} + +export function EmailMatchValidator(): ValidatorFn { + return (control: AbstractControl): { [key: string]: any } => { + return control.get('email').value === control.get('emailConfirm').value ? null : { 'emailMismatch': true }; + }; +} + +export function PasswordMatchValidator(passwordControlName: string, repeatPasswordControlName: string): ValidatorFn { + return (control: AbstractControl): { [key: string]: any } => { + const passwordControl = control.get(passwordControlName); + const passwordRepeatControl = control.get(repeatPasswordControlName); + + if (passwordControl && passwordControl.value && passwordRepeatControl && passwordRepeatControl.value && passwordControl.value !== passwordRepeatControl.value) { + return { 'passwordMismatch': true }; + } + return null; + }; +} diff --git a/dmp-frontend/src/app/common/forms/validation/error-model/validation-error-model.ts b/dmp-frontend/src/common/forms/validation/error-model/validation-error-model.ts similarity index 97% rename from dmp-frontend/src/app/common/forms/validation/error-model/validation-error-model.ts rename to dmp-frontend/src/common/forms/validation/error-model/validation-error-model.ts index 21eec2772..86dca530e 100644 --- a/dmp-frontend/src/app/common/forms/validation/error-model/validation-error-model.ts +++ b/dmp-frontend/src/common/forms/validation/error-model/validation-error-model.ts @@ -1,4 +1,4 @@ -import { Serializable } from '../../../types/json/serializable'; +import { Serializable } from '@common/types/json/serializable'; export class ValidationErrorModel implements Serializable { public error: string; diff --git a/dmp-frontend/src/app/common/forms/validation/validation-context.ts b/dmp-frontend/src/common/forms/validation/validation-context.ts similarity index 100% rename from dmp-frontend/src/app/common/forms/validation/validation-context.ts rename to dmp-frontend/src/common/forms/validation/validation-context.ts diff --git a/dmp-frontend/src/app/common/http/base-http-params.ts b/dmp-frontend/src/common/http/base-http-params.ts similarity index 100% rename from dmp-frontend/src/app/common/http/base-http-params.ts rename to dmp-frontend/src/common/http/base-http-params.ts diff --git a/dmp-frontend/src/app/common/http/common-http.module.ts b/dmp-frontend/src/common/http/common-http.module.ts similarity index 100% rename from dmp-frontend/src/app/common/http/common-http.module.ts rename to dmp-frontend/src/common/http/common-http.module.ts diff --git a/dmp-frontend/src/common/http/image/secure-image.pipe.ts b/dmp-frontend/src/common/http/image/secure-image.pipe.ts new file mode 100644 index 000000000..61052fdc7 --- /dev/null +++ b/dmp-frontend/src/common/http/image/secure-image.pipe.ts @@ -0,0 +1,16 @@ +import { HttpClient } from '@angular/common/http'; +import { Pipe, PipeTransform } from '@angular/core'; +import { DomSanitizer, SafeUrl } from '@angular/platform-browser'; +import { BasePipe } from '@common/base/base.pipe'; +import { Observable } from 'rxjs'; +import { map, takeUntil } from 'rxjs/operators'; + +@Pipe({ name: 'secureImage' }) +export class SecureImagePipe extends BasePipe implements PipeTransform { + + constructor(private http: HttpClient, private sanitizer: DomSanitizer) { super(); } + + transform(url): Observable { + return this.http.get(url, { responseType: 'blob' }).pipe(takeUntil(this._destroyed), map(val => this.sanitizer.bypassSecurityTrustUrl(URL.createObjectURL(val)))); + } +} diff --git a/dmp-frontend/src/app/common/http/interceptor-context.ts b/dmp-frontend/src/common/http/interceptor-context.ts similarity index 100% rename from dmp-frontend/src/app/common/http/interceptor-context.ts rename to dmp-frontend/src/common/http/interceptor-context.ts diff --git a/dmp-frontend/src/app/common/http/interceptors/auth-token.interceptor.ts b/dmp-frontend/src/common/http/interceptors/auth-token.interceptor.ts similarity index 91% rename from dmp-frontend/src/app/common/http/interceptors/auth-token.interceptor.ts rename to dmp-frontend/src/common/http/interceptors/auth-token.interceptor.ts index 3f37fd4ba..41b5443b9 100644 --- a/dmp-frontend/src/app/common/http/interceptors/auth-token.interceptor.ts +++ b/dmp-frontend/src/common/http/interceptors/auth-token.interceptor.ts @@ -3,7 +3,7 @@ import { Injectable } from '@angular/core'; import { Observable } from 'rxjs'; import { BaseInterceptor } from './base.interceptor'; import { InterceptorType } from './interceptor-type'; -import { AuthService } from '../../../core/services/auth/auth.service'; +import { AuthService } from '../../../app/core/services/auth/auth.service'; @Injectable() export class AuthTokenInterceptor extends BaseInterceptor { diff --git a/dmp-frontend/src/app/common/http/interceptors/base.interceptor.ts b/dmp-frontend/src/common/http/interceptors/base.interceptor.ts similarity index 94% rename from dmp-frontend/src/app/common/http/interceptors/base.interceptor.ts rename to dmp-frontend/src/common/http/interceptors/base.interceptor.ts index 7918c5f0a..13374a21f 100644 --- a/dmp-frontend/src/app/common/http/interceptors/base.interceptor.ts +++ b/dmp-frontend/src/common/http/interceptors/base.interceptor.ts @@ -2,7 +2,7 @@ import { HttpEvent, HttpHandler, HttpInterceptor, HttpRequest } from '@angular/c import { Observable } from 'rxjs'; import { BaseHttpParams } from '../base-http-params'; import { InterceptorType } from './interceptor-type'; -import { environment } from '../../../../environments/environment'; +import { environment } from '../../../environments/environment'; export abstract class BaseInterceptor implements HttpInterceptor { diff --git a/dmp-frontend/src/app/common/http/interceptors/interceptor-type.ts b/dmp-frontend/src/common/http/interceptors/interceptor-type.ts similarity index 100% rename from dmp-frontend/src/app/common/http/interceptors/interceptor-type.ts rename to dmp-frontend/src/common/http/interceptors/interceptor-type.ts diff --git a/dmp-frontend/src/app/common/http/interceptors/json.interceptor.ts b/dmp-frontend/src/common/http/interceptors/json.interceptor.ts similarity index 100% rename from dmp-frontend/src/app/common/http/interceptors/json.interceptor.ts rename to dmp-frontend/src/common/http/interceptors/json.interceptor.ts diff --git a/dmp-frontend/src/app/common/http/interceptors/locale.interceptor.ts b/dmp-frontend/src/common/http/interceptors/locale.interceptor.ts similarity index 100% rename from dmp-frontend/src/app/common/http/interceptors/locale.interceptor.ts rename to dmp-frontend/src/common/http/interceptors/locale.interceptor.ts diff --git a/dmp-frontend/src/app/common/http/interceptors/progress-indication.interceptor.ts b/dmp-frontend/src/common/http/interceptors/progress-indication.interceptor.ts similarity index 87% rename from dmp-frontend/src/app/common/http/interceptors/progress-indication.interceptor.ts rename to dmp-frontend/src/common/http/interceptors/progress-indication.interceptor.ts index c472b1e12..939d25f41 100644 --- a/dmp-frontend/src/app/common/http/interceptors/progress-indication.interceptor.ts +++ b/dmp-frontend/src/common/http/interceptors/progress-indication.interceptor.ts @@ -2,7 +2,7 @@ import { HttpEvent, HttpHandler, HttpRequest } from '@angular/common/http'; import { Injectable } from '@angular/core'; import { Observable } from 'rxjs'; import { finalize } from 'rxjs/operators'; -import { ProgressIndicationService } from '../../../core/services/progress-indication/progress-indication-service'; +import { ProgressIndicationService } from '../../../app/core/services/progress-indication/progress-indication-service'; import { BaseInterceptor } from './base.interceptor'; import { InterceptorType } from './interceptor-type'; diff --git a/dmp-frontend/src/app/common/http/interceptors/request-timing.interceptor.ts b/dmp-frontend/src/common/http/interceptors/request-timing.interceptor.ts similarity index 92% rename from dmp-frontend/src/app/common/http/interceptors/request-timing.interceptor.ts rename to dmp-frontend/src/common/http/interceptors/request-timing.interceptor.ts index 869674c69..295701614 100644 --- a/dmp-frontend/src/app/common/http/interceptors/request-timing.interceptor.ts +++ b/dmp-frontend/src/common/http/interceptors/request-timing.interceptor.ts @@ -2,7 +2,7 @@ import { HttpEvent, HttpHandler, HttpRequest, HttpResponse } from '@angular/comm import { Injectable } from '@angular/core'; import { Observable } from 'rxjs'; import { tap } from 'rxjs/operators'; -import { LoggingService } from '../../../core/services/logging/logging-service'; +import { LoggingService } from '../../../app/core/services/logging/logging-service'; import { BaseInterceptor } from './base.interceptor'; import { InterceptorType } from './interceptor-type'; diff --git a/dmp-frontend/src/app/common/http/interceptors/response-payload.interceptor.ts b/dmp-frontend/src/common/http/interceptors/response-payload.interceptor.ts similarity index 100% rename from dmp-frontend/src/app/common/http/interceptors/response-payload.interceptor.ts rename to dmp-frontend/src/common/http/interceptors/response-payload.interceptor.ts diff --git a/dmp-frontend/src/app/common/http/interceptors/status-code.interceptor.ts b/dmp-frontend/src/common/http/interceptors/status-code.interceptor.ts similarity index 100% rename from dmp-frontend/src/app/common/http/interceptors/status-code.interceptor.ts rename to dmp-frontend/src/common/http/interceptors/status-code.interceptor.ts diff --git a/dmp-frontend/src/app/common/http/interceptors/unauthorized-response.interceptor.ts b/dmp-frontend/src/common/http/interceptors/unauthorized-response.interceptor.ts similarity index 97% rename from dmp-frontend/src/app/common/http/interceptors/unauthorized-response.interceptor.ts rename to dmp-frontend/src/common/http/interceptors/unauthorized-response.interceptor.ts index 2417f00dd..542df6dac 100644 --- a/dmp-frontend/src/app/common/http/interceptors/unauthorized-response.interceptor.ts +++ b/dmp-frontend/src/common/http/interceptors/unauthorized-response.interceptor.ts @@ -3,7 +3,7 @@ import { Injectable } from '@angular/core'; import { Router } from '@angular/router'; import { Observable, throwError } from 'rxjs'; import { catchError, mergeMap, tap } from 'rxjs/operators'; -import { AuthService } from '../../../core/services/auth/auth.service'; +import { AuthService } from '../../../app/core/services/auth/auth.service'; import { BaseInterceptor } from './base.interceptor'; import { InterceptorType } from './interceptor-type'; diff --git a/dmp-frontend/src/app/common/material/material.module.ts b/dmp-frontend/src/common/material/material.module.ts similarity index 100% rename from dmp-frontend/src/app/common/material/material.module.ts rename to dmp-frontend/src/common/material/material.module.ts diff --git a/dmp-frontend/src/app/library/confirmation-dialog/confirmation-dialog.component.html b/dmp-frontend/src/common/modules/confirmation-dialog/confirmation-dialog.component.html similarity index 100% rename from dmp-frontend/src/app/library/confirmation-dialog/confirmation-dialog.component.html rename to dmp-frontend/src/common/modules/confirmation-dialog/confirmation-dialog.component.html diff --git a/dmp-frontend/src/common/modules/confirmation-dialog/confirmation-dialog.component.scss b/dmp-frontend/src/common/modules/confirmation-dialog/confirmation-dialog.component.scss new file mode 100644 index 000000000..a0856d4a9 --- /dev/null +++ b/dmp-frontend/src/common/modules/confirmation-dialog/confirmation-dialog.component.scss @@ -0,0 +1,45 @@ +.confirmation-dialog { + .confirmation { + padding-bottom: 20px; + } + + .privacy-policy-names { + font-weight: 700; + padding: 1em; + } + + .close-btn { + margin-left: auto; + cursor: pointer; + } + + .warn-text { + color: #f44336; + } + + .cancel { + background-color: #aaaaaa; + color: #ffffff; + } + + .confirm { + background-color: #2cba6c; + color: #ffffff; + } + + .delete { + background-color: #ba2c2c; + color: #ffffff; + } + + .checkbox-privacy { + padding: 0em 1em; + } + + .required-policy { + padding: 0em 1.2em 1em; + font-size: smaller; + color: #f44336; + } + } + \ No newline at end of file diff --git a/dmp-frontend/src/app/library/confirmation-dialog/confirmation-dialog.component.ts b/dmp-frontend/src/common/modules/confirmation-dialog/confirmation-dialog.component.ts similarity index 100% rename from dmp-frontend/src/app/library/confirmation-dialog/confirmation-dialog.component.ts rename to dmp-frontend/src/common/modules/confirmation-dialog/confirmation-dialog.component.ts diff --git a/dmp-frontend/src/common/modules/confirmation-dialog/confirmation-dialog.module.ts b/dmp-frontend/src/common/modules/confirmation-dialog/confirmation-dialog.module.ts new file mode 100644 index 000000000..124fea2f1 --- /dev/null +++ b/dmp-frontend/src/common/modules/confirmation-dialog/confirmation-dialog.module.ts @@ -0,0 +1,14 @@ +import { NgModule } from '@angular/core'; +import { FormsModule } from '@angular/forms'; +import { ConfirmationDialogComponent } from '@common/modules/confirmation-dialog/confirmation-dialog.component'; +import { CommonUiModule } from '@common/ui/common-ui.module'; + +@NgModule({ + imports: [CommonUiModule, FormsModule], + declarations: [ConfirmationDialogComponent], + exports: [ConfirmationDialogComponent], + entryComponents: [ConfirmationDialogComponent] +}) +export class ConfirmationDialogModule { + constructor() { } +} diff --git a/dmp-frontend/src/common/modules/errors/error-handling/http-error-handling.service.ts b/dmp-frontend/src/common/modules/errors/error-handling/http-error-handling.service.ts new file mode 100644 index 000000000..754a6a8c9 --- /dev/null +++ b/dmp-frontend/src/common/modules/errors/error-handling/http-error-handling.service.ts @@ -0,0 +1,67 @@ +import { HttpErrorResponse } from '@angular/common/http'; +import { Injectable } from '@angular/core'; +import { TranslateService } from '@ngx-translate/core'; + +@Injectable() +export class HttpErrorHandlingService { + constructor( + protected language: TranslateService + ) { + } + + getError(errorResponse: HttpErrorResponse): HttpError { + const error: HttpError = new HttpError(); + error.statusCode = errorResponse.status; + error.messages = this.parseMessages(error.statusCode, errorResponse); + + // if (error && error.error && error.error.error) { + // errorMsg = error.error.error; + // // } else if (error && error.message) { + // // errorMsg = error.message; + // // } else if (error) { + // // errorMsg = error; + // } else { + // errorMsg = language.instant('COMMONS.ERRORS.DEFAULT'); + // } + return error; + } + + private parseMessages(httpStatusCode: number, errorPayload: any): string[] { + const result: string[] = []; + switch (httpStatusCode) { + case 400: // Bad Request, Used for validation errors. + if (errorPayload && errorPayload.error && errorPayload.error.error_description) { result.push(errorPayload.error.error_description); } + else if (errorPayload && errorPayload.error && errorPayload.error.error) { result.push(errorPayload.error.error); } + else if (errorPayload && errorPayload.message) { result.push(errorPayload.message); } + break; + case 404: // Not Found + if (errorPayload && errorPayload.error && errorPayload.error.error_description) { result.push(errorPayload.error.error_description); } + else if (errorPayload && errorPayload.error && errorPayload.error.error) { result.push(errorPayload.error.error); } + else if (errorPayload && errorPayload.message) { result.push(errorPayload.message); } + break; + case 500: // Bad Request, Used for validation errors. + if (errorPayload && errorPayload.error && errorPayload.error.error_description) { result.push(errorPayload.error.error_description); } + else if (errorPayload && errorPayload.error && errorPayload.error.error) { result.push(errorPayload.error.error); } + else if (errorPayload && errorPayload.message) { result.push(errorPayload.message); } + break; + default: + if (errorPayload && errorPayload.error && errorPayload.error.error_description) { result.push(errorPayload.error.error_description); } + else if (errorPayload && errorPayload.error && errorPayload.error.error) { result.push(errorPayload.error.error); } + else if (errorPayload && errorPayload.message) { result.push(errorPayload.message); } + break; + } + + if (result.length === 0) { result.push(this.language.instant('COMMONS.ERRORS.DEFAULT')); } + + return result; + } +} + +export class HttpError { + statusCode: number; + messages: string[]; + + getMessagesString(): string { + return this.messages ? this.messages.join(', ') : null; + } +} diff --git a/dmp-frontend/src/common/modules/errors/errors-component/errors.component.html b/dmp-frontend/src/common/modules/errors/errors-component/errors.component.html new file mode 100644 index 000000000..02396e756 --- /dev/null +++ b/dmp-frontend/src/common/modules/errors/errors-component/errors.component.html @@ -0,0 +1,34 @@ +
+
+
+
+

ERROR {{ data?.error}}

+
Not found :(
+ +
Go Home
+
+
+ +
+ +

ERROR {{ routeParams?.status }}


+

{{ routeParams?.message }}


+

Error in {{ routeParams?.url }} page, sorry :(

+

This error has been reported to the Administrator with the ID:
{{ routeParams?.id}}

+ +
Go Back to {{routeParams?.url}}
+
+ +
Go Back to home
+
+
+ +
+

Unknown error, sorry :(

+ +
Go Home
+
+
+
+
+
diff --git a/dmp-frontend/src/common/modules/errors/errors-component/errors.component.scss b/dmp-frontend/src/common/modules/errors/errors-component/errors.component.scss new file mode 100644 index 000000000..b4f6062e5 --- /dev/null +++ b/dmp-frontend/src/common/modules/errors/errors-component/errors.component.scss @@ -0,0 +1,14 @@ +h1, +h3, +h4, +h5 { + margin-bottom: 0; + margin-top: 10px; +} + +.error-container { + margin-top: auto; + margin-bottom: auto; + text-align: center; + overflow-wrap: break-word; +} diff --git a/dmp-frontend/src/common/modules/errors/errors-component/errors.component.ts b/dmp-frontend/src/common/modules/errors/errors-component/errors.component.ts new file mode 100644 index 000000000..7b6fc0155 --- /dev/null +++ b/dmp-frontend/src/common/modules/errors/errors-component/errors.component.ts @@ -0,0 +1,21 @@ +import { Component, OnInit } from '@angular/core'; +import { ActivatedRoute } from '@angular/router'; + +@Component({ + selector: 'app-error', + templateUrl: './errors.component.html', + styleUrls: ['./errors.component.scss'] +}) +export class ErrorsComponent implements OnInit { + routeParams; + data; + + constructor( + private activatedRoute: ActivatedRoute, + ) { } + + ngOnInit() { + this.routeParams = this.activatedRoute.snapshot.queryParams; + this.data = this.activatedRoute.snapshot.data; + } +} diff --git a/dmp-frontend/src/common/modules/errors/errors-handler/errors-handler.ts b/dmp-frontend/src/common/modules/errors/errors-handler/errors-handler.ts new file mode 100644 index 000000000..77b954a4f --- /dev/null +++ b/dmp-frontend/src/common/modules/errors/errors-handler/errors-handler.ts @@ -0,0 +1,51 @@ + +import { HttpErrorResponse } from '@angular/common/http'; +import { ErrorHandler, Injectable, Injector } from '@angular/core'; +import { Router } from '@angular/router'; +import { SnackBarNotificationLevel, UiNotificationService } from '@common/modules/notification/ui-notification-service'; +import { TranslateService } from '@ngx-translate/core'; + +@Injectable() +export class ErrorsHandler implements ErrorHandler { + + private _notificationService; + // private _errorService; + private _router; + private _language; + + constructor( + private injector: Injector, + ) { + + } + + handleError(error: Error | HttpErrorResponse) { + this._notificationService = this.injector.get(UiNotificationService); + // this._errorService = this.injector.get(ErrorService); + this._router = this.injector.get(Router); + this._language = this.injector.get(TranslateService); + + if (error instanceof HttpErrorResponse) { + // Server error happened + if (!navigator.onLine) { + // No Internet connection + return this._notificationService.snackBarNotification(this._language.instant('ERROR-HANDLER.GLOBAL.NO-INTERNET'), SnackBarNotificationLevel.Error); + } + // Http Error + // Send the error to the server + // this._errorService.log(error).subscribe(); + // Show notification to the user + return this._notificationService.snackBarNotification(`${error.status} - ${error.message}`, SnackBarNotificationLevel.Error); + } else { + // Client Error Happend + // Send the error to the server and then + // redirect the user to the page with all the info + // this._errorService + // .log(error) + // .subscribe(errorWithContextInfo => { + // this._router.navigate(['/error'], { queryParams: errorWithContextInfo }); + // }); + } + } +} + diff --git a/dmp-frontend/src/common/modules/errors/errors-routing/errors-routing.module.ts b/dmp-frontend/src/common/modules/errors/errors-routing/errors-routing.module.ts new file mode 100644 index 000000000..c95dd35c7 --- /dev/null +++ b/dmp-frontend/src/common/modules/errors/errors-routing/errors-routing.module.ts @@ -0,0 +1,14 @@ +import { NgModule } from '@angular/core'; +import { RouterModule, Routes } from '@angular/router'; +import { ErrorsComponent } from '@common/modules/errors/errors-component/errors.component'; + +const routes: Routes = [ + { path: 'error', component: ErrorsComponent }, + { path: '**', loadChildren: () => import('@common/modules/page-not-found/page-not-found.module').then(m => m.PageNotFoundModule) }, +]; + +@NgModule({ + imports: [RouterModule.forChild(routes)], + exports: [RouterModule] +}) +export class ErrorRoutingModule { } diff --git a/dmp-frontend/src/common/modules/errors/errors.module.ts b/dmp-frontend/src/common/modules/errors/errors.module.ts new file mode 100644 index 000000000..d630e7a17 --- /dev/null +++ b/dmp-frontend/src/common/modules/errors/errors.module.ts @@ -0,0 +1,34 @@ +import { CommonModule } from '@angular/common'; +import { HTTP_INTERCEPTORS } from '@angular/common/http'; +import { ErrorHandler, NgModule } from '@angular/core'; +import { RouterModule } from '@angular/router'; +// import { ExternalTracingService } from '@app/core/services/http/external-tracing.service'; +import { ErrorsComponent } from '@common/modules/errors/errors-component/errors.component'; +import { ErrorsHandler } from '@common/modules/errors/errors-handler/errors-handler'; +import { ErrorRoutingModule } from '@common/modules/errors/errors-routing/errors-routing.module'; +import { ServerErrorsInterceptor } from '@common/modules/errors/server-errors-interceptor/server-errors.interceptor'; + +@NgModule({ + imports: [ + CommonModule, + RouterModule, + ErrorRoutingModule, + ], + declarations: [ + ErrorsComponent + ], + providers: [ + // ErrorService, + // ExternalTracingService, + { + provide: ErrorHandler, + useClass: ErrorsHandler, + }, + { + provide: HTTP_INTERCEPTORS, + useClass: ServerErrorsInterceptor, + multi: true + }, + ] +}) +export class ErrorsModule { } diff --git a/dmp-frontend/src/common/modules/errors/external-tracing/external-trace-entry.ts b/dmp-frontend/src/common/modules/errors/external-tracing/external-trace-entry.ts new file mode 100644 index 000000000..8af4afb37 --- /dev/null +++ b/dmp-frontend/src/common/modules/errors/external-tracing/external-trace-entry.ts @@ -0,0 +1,20 @@ +export interface ExternalTraceEntry { + eventId: EventId; + level: ExternalTraceLogLevel; + message: string; + data: any; +} + +export interface EventId { + id: number; +} + +export enum ExternalTraceLogLevel { + Trace = 0, + Debug = 1, + Information = 2, + Warning = 3, + Error = 4, + Critical = 5, + None = 6 +} diff --git a/dmp-frontend/src/common/modules/errors/server-errors-interceptor/server-errors.interceptor.ts b/dmp-frontend/src/common/modules/errors/server-errors-interceptor/server-errors.interceptor.ts new file mode 100644 index 000000000..c652d028e --- /dev/null +++ b/dmp-frontend/src/common/modules/errors/server-errors-interceptor/server-errors.interceptor.ts @@ -0,0 +1,13 @@ +import { HttpEvent, HttpHandler, HttpInterceptor, HttpRequest } from '@angular/common/http'; +import { Injectable } from '@angular/core'; +import { Observable } from 'rxjs'; +import { retry } from 'rxjs/operators'; + +@Injectable() +export class ServerErrorsInterceptor implements HttpInterceptor { + constructor() { } + intercept(request: HttpRequest, next: HttpHandler): Observable> { + + return next.handle(request); //TODO: possibly we want to retry here using: .pipe(retry(5)); + } +} diff --git a/dmp-frontend/src/common/modules/notification/popup/popup-notification.component.html b/dmp-frontend/src/common/modules/notification/popup/popup-notification.component.html new file mode 100644 index 000000000..a06d796e6 --- /dev/null +++ b/dmp-frontend/src/common/modules/notification/popup/popup-notification.component.html @@ -0,0 +1,5 @@ +

{{notification.title}}

+{{notification.message}} + + + diff --git a/dmp-frontend/src/common/modules/notification/popup/popup-notification.component.ts b/dmp-frontend/src/common/modules/notification/popup/popup-notification.component.ts new file mode 100644 index 000000000..04622b096 --- /dev/null +++ b/dmp-frontend/src/common/modules/notification/popup/popup-notification.component.ts @@ -0,0 +1,16 @@ +import { Component, Inject } from '@angular/core'; +import { MatDialogRef, MAT_DIALOG_DATA } from '@angular/material/dialog'; +import { PopupNotification } from '@common/modules/notification/ui-notification-service'; + +@Component({ + selector: 'app-popup-notification-dialog', + templateUrl: './popup-notification.component.html' +}) +export class PopupNotificationDialogComponent { + + constructor( + public dialogRef: MatDialogRef, + @Inject(MAT_DIALOG_DATA) public notification: PopupNotification + ) { + } +} diff --git a/dmp-frontend/src/common/modules/notification/snack-bar/snack-bar-notification.component.html b/dmp-frontend/src/common/modules/notification/snack-bar/snack-bar-notification.component.html new file mode 100644 index 000000000..75af56131 --- /dev/null +++ b/dmp-frontend/src/common/modules/notification/snack-bar/snack-bar-notification.component.html @@ -0,0 +1 @@ +{{message}} diff --git a/dmp-frontend/src/common/modules/notification/snack-bar/snack-bar-notification.component.ts b/dmp-frontend/src/common/modules/notification/snack-bar/snack-bar-notification.component.ts new file mode 100644 index 000000000..55db60951 --- /dev/null +++ b/dmp-frontend/src/common/modules/notification/snack-bar/snack-bar-notification.component.ts @@ -0,0 +1,15 @@ +import { Component, Inject } from '@angular/core'; +import { MAT_SNACK_BAR_DATA } from '@angular/material/snack-bar'; +import { SnackBarNotification } from '@common/modules/notification/ui-notification-service'; + +@Component({ + selector: 'app-snack-bar-notification', + templateUrl: './snack-bar-notification.component.html' +}) + +export class SnackBarNotificationComponent { + message: string; + constructor(@Inject(MAT_SNACK_BAR_DATA) public data: SnackBarNotification) { + this.message = data.message; + } +} diff --git a/dmp-frontend/src/common/modules/notification/ui-notification-service.ts b/dmp-frontend/src/common/modules/notification/ui-notification-service.ts new file mode 100644 index 000000000..3219daa45 --- /dev/null +++ b/dmp-frontend/src/common/modules/notification/ui-notification-service.ts @@ -0,0 +1,60 @@ +import { Injectable } from '@angular/core'; +import { Observable, Subject } from 'rxjs'; + +@Injectable() +export class UiNotificationService { + + private notificationSubject = new Subject(); + + constructor() { + } + + public snackBarNotification(message: string, level: SnackBarNotificationLevel, duration: number = 5000) { + const notification: SnackBarNotification = new SnackBarNotification(); + notification.level = level; + notification.message = message; + notification.duration = duration; + this.notificationSubject.next(notification); + } + + public popupNotification(title: string, message: string) { + const notification: PopupNotification = new PopupNotification(); + notification.title = title; + notification.message = message; + this.notificationSubject.next(notification); + } + + public getNotificationObservable(): Observable { + return this.notificationSubject.asObservable(); + } +} + +export enum UiNotificationType { + SnackBar = 0, + Popup = 1 +} + +export interface UiNotification { + type: UiNotificationType; + +} + +export enum SnackBarNotificationLevel { + Info = 0, + Warning = 1, + Success = 2, + Error = 3 +} + +export class SnackBarNotification implements UiNotification { + type: UiNotificationType = UiNotificationType.SnackBar; + message: string; + level: SnackBarNotificationLevel; + duration: number; +} + +export class PopupNotification implements UiNotification { + type: UiNotificationType = UiNotificationType.Popup; + message: string; + title: string; +} diff --git a/dmp-frontend/src/common/modules/notification/ui-notification.component.html b/dmp-frontend/src/common/modules/notification/ui-notification.component.html new file mode 100644 index 000000000..8b1378917 --- /dev/null +++ b/dmp-frontend/src/common/modules/notification/ui-notification.component.html @@ -0,0 +1 @@ + diff --git a/dmp-frontend/src/common/modules/notification/ui-notification.component.scss b/dmp-frontend/src/common/modules/notification/ui-notification.component.scss new file mode 100644 index 000000000..1203c5d5a --- /dev/null +++ b/dmp-frontend/src/common/modules/notification/ui-notification.component.scss @@ -0,0 +1,15 @@ +.snack-bar-notification--success { + background-color: #4CAF50 !important; +} + +.snack-bar-notification--error { + background-color: #B13636 !important; +} + +.snack-bar-notification--warning { + background-color: #B13636 !important; +} + +.snack-bar-notification--info { + background-color: #B13636 !important; +} diff --git a/dmp-frontend/src/common/modules/notification/ui-notification.component.ts b/dmp-frontend/src/common/modules/notification/ui-notification.component.ts new file mode 100644 index 000000000..f4bf6ee0a --- /dev/null +++ b/dmp-frontend/src/common/modules/notification/ui-notification.component.ts @@ -0,0 +1,55 @@ +import { Component, OnInit } from '@angular/core'; +import { MatDialog } from '@angular/material/dialog'; +import { MatSnackBar } from '@angular/material/snack-bar'; +import { BaseComponent } from '@common/base/base.component'; +import { PopupNotificationDialogComponent } from '@common/modules/notification/popup/popup-notification.component'; +import { SnackBarNotificationComponent } from '@common/modules/notification/snack-bar/snack-bar-notification.component'; +import { PopupNotification, SnackBarNotification, SnackBarNotificationLevel, UiNotificationService, UiNotificationType } from '@common/modules/notification/ui-notification-service'; +import { takeUntil } from 'rxjs/operators'; + +@Component({ + selector: 'app-ui-notification', + templateUrl: './ui-notification.component.html', + styleUrls: ['./ui-notification.component.scss'] +}) +export class UiNotificationComponent extends BaseComponent implements OnInit { + + constructor( + private snackBar: MatSnackBar, + public dialog: MatDialog, + private uiNotificationService: UiNotificationService + ) { + super(); + } + + ngOnInit() { + this.uiNotificationService.getNotificationObservable().pipe(takeUntil(this._destroyed)).subscribe(notification => { + switch (notification.type) { + case UiNotificationType.SnackBar: + const snackBarNotification: SnackBarNotification = notification as SnackBarNotification; + this.snackBar.openFromComponent(SnackBarNotificationComponent, { + data: snackBarNotification, + duration: snackBarNotification.duration, + panelClass: [this.getSnackBarLevelClass(snackBarNotification.level)] + }); + break; + case UiNotificationType.Popup: + const popupNotification: PopupNotification = notification as PopupNotification; + this.dialog.open(PopupNotificationDialogComponent, { + data: popupNotification + }); + break; + } + }); + } + + private getSnackBarLevelClass(level: SnackBarNotificationLevel): string { + switch (level) { + case SnackBarNotificationLevel.Warning: return 'snack-bar-notification--warning'; + case SnackBarNotificationLevel.Error: return 'snack-bar-notification--error'; + case SnackBarNotificationLevel.Success: return 'snack-bar-notification--success'; + default: return 'snack-bar-notification--info'; + } + + } +} diff --git a/dmp-frontend/src/common/modules/notification/ui-notification.module.ts b/dmp-frontend/src/common/modules/notification/ui-notification.module.ts new file mode 100644 index 000000000..3e57b18bc --- /dev/null +++ b/dmp-frontend/src/common/modules/notification/ui-notification.module.ts @@ -0,0 +1,26 @@ +import { NgModule } from '@angular/core'; +import { PopupNotificationDialogComponent } from '@common/modules/notification/popup/popup-notification.component'; +import { SnackBarNotificationComponent } from '@common/modules/notification/snack-bar/snack-bar-notification.component'; +import { UiNotificationComponent } from '@common/modules/notification/ui-notification.component'; +import { CommonUiModule } from '@common/ui/common-ui.module'; + +@NgModule({ + imports: [ + CommonUiModule + ], + declarations: [ + UiNotificationComponent, + SnackBarNotificationComponent, + PopupNotificationDialogComponent, + ], + exports: [ + UiNotificationComponent + ], + entryComponents: [ + SnackBarNotificationComponent, + PopupNotificationDialogComponent, + ] +}) +export class UiNotificationModule { + constructor() { } +} diff --git a/dmp-frontend/src/common/modules/page-not-found/page-not-found.component.html b/dmp-frontend/src/common/modules/page-not-found/page-not-found.component.html new file mode 100644 index 000000000..5727cb897 --- /dev/null +++ b/dmp-frontend/src/common/modules/page-not-found/page-not-found.component.html @@ -0,0 +1 @@ +

Page not found

diff --git a/dmp-frontend/src/common/modules/page-not-found/page-not-found.component.ts b/dmp-frontend/src/common/modules/page-not-found/page-not-found.component.ts new file mode 100644 index 000000000..ea7c6f5f9 --- /dev/null +++ b/dmp-frontend/src/common/modules/page-not-found/page-not-found.component.ts @@ -0,0 +1,13 @@ +import { Component, OnInit } from '@angular/core'; + +@Component({ + templateUrl: './page-not-found.component.html' +}) +export class PageNotFoundComponent implements OnInit { + + constructor() { } + + ngOnInit() { + } + +} diff --git a/dmp-frontend/src/common/modules/page-not-found/page-not-found.module.ts b/dmp-frontend/src/common/modules/page-not-found/page-not-found.module.ts new file mode 100644 index 000000000..0a362cb9b --- /dev/null +++ b/dmp-frontend/src/common/modules/page-not-found/page-not-found.module.ts @@ -0,0 +1,12 @@ +import { NgModule } from '@angular/core'; +import { PageNotFoundComponent } from '@common/modules/page-not-found/page-not-found.component'; + +@NgModule({ + imports: [ + ], + declarations: [ + PageNotFoundComponent + ], + entryComponents: [] +}) +export class PageNotFoundModule { } diff --git a/dmp-frontend/src/app/common/types/guid.ts b/dmp-frontend/src/common/types/guid.ts similarity index 100% rename from dmp-frontend/src/app/common/types/guid.ts rename to dmp-frontend/src/common/types/guid.ts diff --git a/dmp-frontend/src/app/common/types/json/json-serializer.ts b/dmp-frontend/src/common/types/json/json-serializer.ts similarity index 82% rename from dmp-frontend/src/app/common/types/json/json-serializer.ts rename to dmp-frontend/src/common/types/json/json-serializer.ts index 775a9c2de..96d4ef8ed 100644 --- a/dmp-frontend/src/app/common/types/json/json-serializer.ts +++ b/dmp-frontend/src/common/types/json/json-serializer.ts @@ -1,4 +1,4 @@ -import { Serializable } from './serializable'; +import { Serializable } from '@common/types/json/serializable'; export class JsonSerializer> { constructor(private constructorOfT: { new(): T }) { diff --git a/dmp-frontend/src/app/common/types/json/serializable.ts b/dmp-frontend/src/common/types/json/serializable.ts similarity index 100% rename from dmp-frontend/src/app/common/types/json/serializable.ts rename to dmp-frontend/src/common/types/json/serializable.ts diff --git a/dmp-frontend/src/app/common/types/pair.ts b/dmp-frontend/src/common/types/pair.ts similarity index 100% rename from dmp-frontend/src/app/common/types/pair.ts rename to dmp-frontend/src/common/types/pair.ts diff --git a/dmp-frontend/src/app/common/ui/common-ui.module.ts b/dmp-frontend/src/common/ui/common-ui.module.ts similarity index 62% rename from dmp-frontend/src/app/common/ui/common-ui.module.ts rename to dmp-frontend/src/common/ui/common-ui.module.ts index fe8455d39..5c16efc7b 100644 --- a/dmp-frontend/src/app/common/ui/common-ui.module.ts +++ b/dmp-frontend/src/common/ui/common-ui.module.ts @@ -1,21 +1,23 @@ import { CommonModule } from '@angular/common'; import { NgModule } from '@angular/core'; +import { SecureImagePipe } from '@common/http/image/secure-image.pipe'; +import { MaterialModule } from '@common/material/material.module'; import { TranslateModule } from '@ngx-translate/core'; -import { MaterialModule } from '../material/material.module'; -import { FormsModule } from '@angular/forms'; @NgModule({ imports: [ CommonModule, MaterialModule, TranslateModule, - FormsModule + ], + declarations: [ + SecureImagePipe ], exports: [ CommonModule, MaterialModule, TranslateModule, - FormsModule + SecureImagePipe ] }) export class CommonUiModule { } diff --git a/dmp-frontend/tsconfig.json b/dmp-frontend/tsconfig.json index bfd2e9604..5d5ba689a 100644 --- a/dmp-frontend/tsconfig.json +++ b/dmp-frontend/tsconfig.json @@ -1,15 +1,30 @@ { + "compileOnSave": false, "compilerOptions": { - "downlevelIteration": true, - "importHelpers": true, - "target": "es2015", + "baseUrl": "./src", + "outDir": "./dist/out-tsc", + "sourceMap": true, + "declaration": false, "module": "esnext", "moduleResolution": "node", - "sourceMap": true, "emitDecoratorMetadata": true, "experimentalDecorators": true, - "lib": ["es2017", "dom"], - "noImplicitAny": false, - "suppressImplicitAnyIndexErrors": true + "importHelpers": true, + "target": "es2015", + "typeRoots": [ + "node_modules/@types" + ], + "lib": [ + "es2018", + "dom" + ], + "paths": { + "@app/*": [ + "./app/*" + ], + "@common/*": [ + "./common/*" + ] + } } -} +} \ No newline at end of file