diff --git a/dmp-frontend/src/app/app-routing.module.ts b/dmp-frontend/src/app/app-routing.module.ts index e97a1720b..a9662d742 100644 --- a/dmp-frontend/src/app/app-routing.module.ts +++ b/dmp-frontend/src/app/app-routing.module.ts @@ -2,42 +2,17 @@ import { InvitationAcceptedComponent } from './invitation-accepted/invitation-ac import { UnauthorizedComponent } from './unauthorized/unauthorized.component'; import { NgModule } from '@angular/core'; import { RouterModule, Routes } from '@angular/router'; -import { PageNotFoundComponent } from './not-found.component'; import { HomepageComponent } from './homepage/homepage.component'; -import { DynamicFormComponent } from './form/dynamic-form.component'; import { AuthGuard } from './guards/auth.guard'; -import { AppComponent } from './app.component'; -import { ProjectListingModel } from './models/projects/ProjectListingModel'; -import { ProjectListingComponent } from './projects/project-listing.component'; -import { DataManagementPlanListingComponent } from './dmps/dmp-listing.component'; -import { ProjectEditorComponent } from './projects/editor/project-editor.component'; -import { DataManagementPlanEditorComponent } from './dmps/editor/dmp-editor.component'; -import { DatasetEditorComponent } from './datasets/editor/dataset-editor.component'; -import { DatasetListingComponent } from './datasets/dataset-listing.component'; -import { DatasetWizardComponent } from './dataset-wizard/dataset-wizard.component'; import { LoginComponent } from './user-management/login/login.component'; const appRoutes: Routes = [ - - { path: 'dynamic-form/:id', component: DynamicFormComponent, canActivate: [AuthGuard] }, - { path: 'projects', component: ProjectListingComponent, canActivate: [AuthGuard] }, - { path: 'project/:id', component: ProjectEditorComponent, canActivate: [AuthGuard] }, - { path: 'projects/new', component: ProjectEditorComponent, canActivate: [AuthGuard] }, - { path: 'dmps', component: DataManagementPlanListingComponent, canActivate: [AuthGuard] }, - { path: 'dmp/:id', component: DataManagementPlanEditorComponent,canActivate: [AuthGuard] }, - { path: 'dmp/:id/new_version', component: DataManagementPlanEditorComponent, canActivate: [AuthGuard], data:{clone:"clone"} }, - { path: 'dmps/new', component: DataManagementPlanEditorComponent, canActivate: [AuthGuard] }, - { path: 'datasets', component: DatasetListingComponent, canActivate: [AuthGuard] }, - //{ path: 'dataset/new', component: DatasetWizardComponent, canActivate: [AuthGuard] }, - { path: 'dataset/new/:dmpId', component: DatasetWizardComponent, canActivate: [AuthGuard] }, - { path: 'dataset/:id', component: DatasetWizardComponent, canActivate: [AuthGuard] }, - { path: 'datasets/new', component: DatasetWizardComponent, canActivate: [AuthGuard] }, - { path: 'datasets/:dmpId', component: DatasetListingComponent, canActivate: [AuthGuard] }, - { path: 'invitation/:id', component: InvitationAcceptedComponent}, - { path: 'login', loadChildren: './user-management/login.module#LoginModule' }, - { path: "unauthorized", loadChildren: './unauthorized/unauthorized.module#UnauthorizedModule' }, + { path: 'datasets', loadChildren: './datasets/dataset.module#DatasetModule' ,canActivate: [AuthGuard]}, + { path: 'projects', loadChildren: './projects/projects.module#ProjectsModule',canActivate: [AuthGuard] }, + { path: "dmps", loadChildren: './dmps/dmps.module#DataManagementPlanModule',canActivate: [AuthGuard] }, { path: 'welcome', component: HomepageComponent, canActivate: [AuthGuard] }, { path: '', redirectTo: '/welcome', pathMatch: 'full' }, + { path: "unauthorized", loadChildren: './unauthorized/unauthorized.module#UnauthorizedModule' } ]; @@ -47,7 +22,6 @@ const appRoutes: Routes = [ appRoutes , { useHash: false - //,enableTracing: true <-- debugging purposes only } ) ], @@ -55,6 +29,7 @@ const appRoutes: Routes = [ RouterModule ], providers: [ + AuthGuard ] }) export class AppRoutingModule { } diff --git a/dmp-frontend/src/app/app.constants.ts b/dmp-frontend/src/app/app.constants.ts index 4c7754b2c..fa65cdd9b 100644 --- a/dmp-frontend/src/app/app.constants.ts +++ b/dmp-frontend/src/app/app.constants.ts @@ -1,6 +1,6 @@ export const HostConfiguration = { Server: 'http://localhost:8080/', - App: 'http://localhost:8080/' + App: 'http://localhost:8080' //CASHost: 'https://login-devel.uoa.gr/login', //Service: 'http://elkefinman/login' } \ No newline at end of file diff --git a/dmp-frontend/src/app/app.module.ts b/dmp-frontend/src/app/app.module.ts index b0a2872aa..cda55cf95 100644 --- a/dmp-frontend/src/app/app.module.ts +++ b/dmp-frontend/src/app/app.module.ts @@ -1,96 +1,42 @@ - +import { TranslateHttpLoader } from '@ngx-translate/http-loader'; +import { BaseHttpService } from './utilities/cite-http-service-module/base-http.service'; +import { DashboardService } from './services/dashboard/dashboard.service'; +import { DatasetService } from './services/dataset/dataset.service'; +import { AuthService } from './services/auth/auth.service'; +import { AuthGuard } from './guards/auth.guard'; +import { PaginationService } from './services/pagination.service'; +import { VisibilityRulesService } from './visibility-rules/visibility-rules.service'; +import { MaterialModule } from './shared/material/material.module'; +import { TranslateLoader, TranslateModule } from '@ngx-translate/core'; +import { BrowserAnimationsModule } from '@angular/platform-browser/animations'; +import { AppRoutingModule } from './app-routing.module'; +import { CommonModule } from '@angular/common'; +import { HttpClient, HttpClientModule } from '@angular/common/http'; +import { HttpModule } from '@angular/http'; import { HostConfiguration } from './app.constants'; import { LoginOptions } from './user-management/utilties/LoginOptions'; import { LoginModule } from './user-management/login.module'; +import { DataManagementPlanModule } from './dmps/dmps.module'; +import { DynamicFormModule } from './form/dynamic-form.module'; +import { DatasetModule } from './datasets/dataset.module'; +import { ProjectsModule } from './projects/projects.module'; +import { SharedModule } from './shared/shared.module'; +import { FormsModule, ReactiveFormsModule } from '@angular/forms'; +import { BrowserModule } from '@angular/platform-browser'; +import { FigurecardComponent } from './shared/components/figurecard/figurecard.component'; import { InvitationAcceptedComponent } from './invitation-accepted/invitation-accepted.component'; import { InvitationComponent } from './invitation/invitation.component'; -import { UnauthorizedComponent } from './unauthorized/unauthorized.component'; -import { PaginationService } from './form/pagination/pagination-service'; -import { TableOfContentsFieldComponent } from './form/tableOfContents/table-of-content-field/table-of-content-field.component'; -import { ProgressBarComponent } from './form/pprogress-bar/progress-bar.component'; -import { TableOfContentsSectionComponent } from './form/tableOfContents/table-of-content-section/table-of-content-section.component'; -import { TableOfContentsGroupComponent } from './form/tableOfContents/table-of-content-group/table-of-content-group.component'; -import { TableOfContentsFieldSetComponent } from './form/tableOfContents/table-of-content-fieldset/table-of-content-fieldset.component'; -import { TableOfContentsComponent } from './form/tableOfContents/table-of-contents.component'; -import { DynamicFieldRadioBoxComponent } from './form/dynamic-fields/dynamic-field-radiobox/dynamic-field-radiobox.component'; -import { DynamicFieldBooleanDecisionComponent } from './form/dynamic-fields/dynamic-field-boolean-decision/dynamic-field-boolean-decision.component'; -import { AutocompleteRemoteComponent } from './form/dynamic-fields/dynamic-field-autocomplete/autocomplete-remote.component'; -import { DynamicFieldDropdownComponent } from './form/dynamic-fields/dynamic-field-dropdown/dynamic-field-dropdown'; -import { DynamicFieldCheckBoxComponent } from './form/dynamic-fields/dynamic-field-checkbox/dynamic-field-checkbox'; -import { VisibilityRulesService } from './visibility-rules/visibility-rules.service'; -import { DynamicFormSectionComponent } from './form/dynamic-form-section/dynamic-form-section'; -import { DynamicFormCompositeFieldComponent } from './form/dynamic-form-composite-field/dynamic-form-composite-field'; -import { BrowserModule } from '@angular/platform-browser'; -import { NgModule, forwardRef } from '@angular/core'; -import { FormsModule, ReactiveFormsModule, NG_VALUE_ACCESSOR } from '@angular/forms'; -import { HttpClientModule, HttpClient } from '@angular/common/http'; -import { HttpModule } from '@angular/http'; -import { RouterModule, Routes, Router } from '@angular/router'; -import { AppComponent } from './app.component'; -import { DynamicFormComponent } from './form/dynamic-form.component'; -import { DynamicFormFieldComponent } from './form/dynamic-fields/dynamic-form-field.component'; -import { DynamicFormGroupComponent } from './form/dynamic-form-group/dynamic-form-group.component'; -import { AppRoutingModule } from './app-routing.module'; -import { AuthGuard } from './guards/auth.guard'; -import { PageNotFoundComponent } from './not-found.component'; import { HomepageComponent } from './homepage/homepage.component'; -import { HTTP_INTERCEPTORS } from '@angular/common/http'; -import { CommonModule } from '@angular/common'; - -import { TranslateModule } from '@ngx-translate/core'; -import { TranslateLoader } from '@ngx-translate/core'; -import { TranslateHttpLoader } from '@ngx-translate/http-loader'; -import { BrowserAnimationsModule } from '@angular/platform-browser/animations'; -import { SharedModule } from './shared/shared.module'; -import { MaterialModule } from './shared/material/material.module'; -import { AuthService } from './services/auth/auth.service'; -import { ProjectListingComponent } from './projects/project-listing.component'; -import { DashboardService } from './services/dashboard/dashboard.service'; -import { DatasetService } from './services/dataset/dataset.service'; -import { BaseHttpService } from './utilities/cite-http-service-module/base-http.service'; -import { DataManagementPlanListingComponent } from './dmps/dmp-listing.component'; -import { ProjectEditorComponent } from './projects/editor/project-editor.component'; -import { DataManagementPlanEditorComponent } from './dmps/editor/dmp-editor.component'; -import { FigurecardComponent } from './shared/components/figurecard/figurecard.component'; -import { DatasetListingComponent } from './datasets/dataset-listing.component'; -import { DatasetEditorComponent } from './datasets/editor/dataset-editor.component'; -import { DatasetWizardComponent } from './dataset-wizard/dataset-wizard.component'; -import { AutocompleteComponent } from './shared/components/autocomplete/autocomplete.component'; - +import { PageNotFoundComponent } from './not-found.component'; +import { AppComponent } from './app.component'; +import { NgModule } from "@angular/core"; @NgModule({ declarations: [ AppComponent, - DynamicFormComponent, - DynamicFormFieldComponent, - DynamicFormGroupComponent, - DynamicFormCompositeFieldComponent, - DynamicFieldBooleanDecisionComponent, - DynamicFieldRadioBoxComponent, - TableOfContentsComponent, - TableOfContentsFieldSetComponent, - TableOfContentsGroupComponent, - TableOfContentsSectionComponent, PageNotFoundComponent, - HomepageComponent, - ProjectListingComponent, - DatasetListingComponent, - DataManagementPlanListingComponent, - AutocompleteRemoteComponent, - DynamicFieldDropdownComponent, - DynamicFormSectionComponent, - TableOfContentsFieldComponent, - ProgressBarComponent, - DynamicFieldCheckBoxComponent, - ProjectEditorComponent, - DataManagementPlanEditorComponent, - InvitationComponent, - InvitationAcceptedComponent, - DatasetWizardComponent, - FigurecardComponent, - DatasetEditorComponent, - AutocompleteComponent + HomepageComponent ], imports: [ BrowserModule, @@ -132,17 +78,10 @@ import { AutocompleteComponent } from './shared/components/autocomplete/autocomp MaterialModule ], providers: [ - VisibilityRulesService, - PaginationService, - AuthGuard, AuthService, DashboardService, - DatasetService, BaseHttpService ], - entryComponents: [ - InvitationComponent, - ], bootstrap: [AppComponent] }) export class AppModule { diff --git a/dmp-frontend/src/app/dataset-wizard/dataset-wizard.component.html b/dmp-frontend/src/app/datasets/dataset-wizard/dataset-wizard.component.html similarity index 96% rename from dmp-frontend/src/app/dataset-wizard/dataset-wizard.component.html rename to dmp-frontend/src/app/datasets/dataset-wizard/dataset-wizard.component.html index 4bd33e0f8..77a27ee92 100644 --- a/dmp-frontend/src/app/dataset-wizard/dataset-wizard.component.html +++ b/dmp-frontend/src/app/datasets/dataset-wizard/dataset-wizard.component.html @@ -6,7 +6,6 @@ -
@@ -93,7 +92,7 @@ {{'DATASET-WIZARD.THIRD-STEP.TITLE' | translate}} - + diff --git a/dmp-frontend/src/app/dataset-wizard/dataset-wizard.component.scss b/dmp-frontend/src/app/datasets/dataset-wizard/dataset-wizard.component.scss similarity index 100% rename from dmp-frontend/src/app/dataset-wizard/dataset-wizard.component.scss rename to dmp-frontend/src/app/datasets/dataset-wizard/dataset-wizard.component.scss diff --git a/dmp-frontend/src/app/dataset-wizard/dataset-wizard.component.ts b/dmp-frontend/src/app/datasets/dataset-wizard/dataset-wizard.component.ts similarity index 79% rename from dmp-frontend/src/app/dataset-wizard/dataset-wizard.component.ts rename to dmp-frontend/src/app/datasets/dataset-wizard/dataset-wizard.component.ts index e3a0225b9..991e99f75 100644 --- a/dmp-frontend/src/app/dataset-wizard/dataset-wizard.component.ts +++ b/dmp-frontend/src/app/datasets/dataset-wizard/dataset-wizard.component.ts @@ -1,24 +1,23 @@ -import { DatasetProfileDefinitionModel } from '../models/DatasetProfileDefinitionModel'; +import { BaseErrorModel } from '../../models/error/BaseErrorModel'; +import { SnackBarNotificationComponent } from '../../shared/components/notificaiton/snack-bar-notification.component'; +import { DatasetProfileCriteria } from '../../models/criteria/dataset-profile/DatasetProfileCriteria'; +import { DataManagementPlanModel } from '../../models/data-managemnt-plans/DataManagementPlanModel'; +import { JsonSerializer } from '../../utilities/JsonSerializer'; +import { DataManagementPlanCriteria } from '../../models/criteria/data-management-plan/DataManagementPlanCriteria'; +import { RequestItem } from '../../models/criteria/RequestItem'; +import { DatasetService } from '../../services/dataset/dataset.service'; +import { ExternalSourcesItemModel } from '../../models/external-sources/ExternalSourcesItemModel'; +import { DatasetProfileModel } from '../../models/datasetprofile/DatasetProfileModel'; +import { DatasetProfileDefinitionModel } from '../../models/DatasetProfileDefinitionModel'; +import { DatasetWizardModel } from '../../models/datasets/DatasetWizardModel'; +import { DataManagementPlanService } from '../../services/data-management-plan/data-management-plan.service'; +import { ExternalSourcesService } from '../../services/external-sources/external-sources.service'; +import { DatasetWizardService } from '../../services/dataset-wizard/dataset-wizard.service'; import { TranslateService } from '@ngx-translate/core'; -import { BaseErrorModel } from '../models/error/BaseErrorModel'; import { ActivatedRoute, Router, Params } from '@angular/router'; -import { DatasetService } from '../services/dataset/dataset.service'; -import { DatasetWizardModel } from '../models/datasets/DatasetWizardModel'; -import { DatasetProfileCriteria } from '../models/criteria/dataset-profile/DatasetProfileCriteria'; import { Component, ViewChild, OnInit, AfterViewInit, ViewEncapsulation } from "@angular/core"; -import { DataManagementPlanService } from "../services/data-management-plan/data-management-plan.service"; import { FormGroup, Validators, FormBuilder } from "@angular/forms"; -import { AutoCompleteConfiguration } from "../shared/components/autocomplete/AutoCompleteConfiguration"; -import { DatasetWizardService } from "../services/dataset-wizard/dataset-wizard.service"; -import { DataManagementPlanCriteria } from "../models/criteria/data-management-plan/DataManagementPlanCriteria"; -import { DataManagementPlanModel } from "../models/data-managemnt-plans/DataManagementPlanModel"; -import { JsonSerializer } from "../utilities/JsonSerializer"; -import { Observable } from "rxjs/Observable"; -import { RequestItem } from "../models/criteria/RequestItem"; -import { SnackBarNotificationComponent } from "../shared/components/notificaiton/snack-bar-notification.component"; -import { DatasetProfileModel } from '../models/datasetprofile/DatasetProfileModel'; -import { ExternalSourcesItemModel } from '../models/external-sources/ExternalSourcesItemModel'; -import { ExternalSourcesService } from '../services/external-sources/external-sources.service'; + import { MatPaginator, MatSort, MatSnackBar, MatStepper } from "@angular/material"; @Component({ @@ -36,7 +35,6 @@ export class DatasetWizardComponent { datasetWizardModel: DatasetWizardModel; isNew = true; formGroup: FormGroup; - form: FormGroup; datasetProfileDefinitionModel: DatasetProfileDefinitionModel; availableProfiles: DatasetProfileModel[] = []; @@ -129,9 +127,8 @@ export class DatasetWizardComponent { if (this.isNew) { this.datasetWizardService.getDefinition(this.formGroup.get("profile").get("id").value).subscribe(item => { this.datasetWizardModel.datasetProfileDefinition = JsonSerializer.fromJSONObject(item,DatasetProfileDefinitionModel); - //this.datasetProfileDefinitionModel = this.datasetWizardModel.datasetProfileDefinition; - //this.form = this.datasetProfileDefinitionModel.buildForm(); - + this.datasetProfileDefinitionModel = this.datasetWizardModel.datasetProfileDefinition; + this.formGroup.addControl("datasetProfileDefinition",this.datasetProfileDefinitionModel.buildForm()) }) } } @@ -161,8 +158,8 @@ export class DatasetWizardComponent { } submit() { - this.datasetWizardService.saveDataset(this.datasetWizardModel, this.formGroup.value).subscribe(data => { - this.router.navigateByUrl("/datasets/" + this.datasetWizardModel.dmp.id); + this.datasetWizardService.saveDataset(this.formGroup.value, this.formGroup.get('datasetProfileDefinition').value).subscribe(data => { + this.router.navigateByUrl("/datasets/dmp/" + this.datasetWizardModel.dmp.id); }); } diff --git a/dmp-frontend/src/app/datasets/dataset.module.ts b/dmp-frontend/src/app/datasets/dataset.module.ts new file mode 100644 index 000000000..86971904a --- /dev/null +++ b/dmp-frontend/src/app/datasets/dataset.module.ts @@ -0,0 +1,60 @@ +import { RouterModule } from '@angular/router'; +import { TranslateHttpLoader } from '@ngx-translate/http-loader'; +import { DatasetService } from '../services/dataset/dataset.service'; +import { DynamicFormModule } from '../form/dynamic-form.module'; +import { TranslateLoader, TranslateModule, TranslateService } from '@ngx-translate/core'; +import { DatasetWizardComponent } from './dataset-wizard/dataset-wizard.component'; +import { DatasetRoutes } from './dataset.routes'; +import { DatasetListingComponent } from './listing/dataset-listing.component'; +import { DatasetEditorComponent } from './editor/dataset-editor.component'; +import { CommonModule } from '@angular/common'; +import { HttpClient, HttpClientModule } from '@angular/common/http'; +import { NgModule } from '@angular/core'; +import { FormsModule, ReactiveFormsModule } from '@angular/forms'; + +import { SharedModule } from '../shared/shared.module' +@NgModule({ + imports: [ + CommonModule, + FormsModule, + HttpClientModule, + SharedModule, + RouterModule.forChild(DatasetRoutes), + ReactiveFormsModule, + DynamicFormModule, + TranslateModule.forRoot({ + loader: { + provide: TranslateLoader, + useFactory: HttpLoaderFactory, + deps: [HttpClient] + } + }), + ], + + declarations: [ + DatasetListingComponent, + DatasetEditorComponent, + DatasetWizardComponent + ], + + exports: [ + DatasetListingComponent, + DatasetEditorComponent, + DatasetWizardComponent, + RouterModule + ], + providers: [ + DatasetService + ] +}) + +export class DatasetModule { + constructor(private translate: TranslateService) { + translate.setDefaultLang('en'); + translate.use('en'); + } +} + +export function HttpLoaderFactory(httpClient: HttpClient) { + return new TranslateHttpLoader(httpClient, 'assets/lang/', '.json'); +} \ No newline at end of file diff --git a/dmp-frontend/src/app/datasets/dataset.routes.ts b/dmp-frontend/src/app/datasets/dataset.routes.ts new file mode 100644 index 000000000..cc67d3334 --- /dev/null +++ b/dmp-frontend/src/app/datasets/dataset.routes.ts @@ -0,0 +1,12 @@ +import { AuthGuard } from '../guards/auth.guard'; +import { DatasetWizardComponent } from './dataset-wizard/dataset-wizard.component'; +import { DatasetListingComponent } from './listing/dataset-listing.component'; +import { RouterModule, Routes } from '@angular/router'; + +export const DatasetRoutes: Routes = [ + { path: "new/:dmpId", component: DatasetWizardComponent, canActivate: [AuthGuard] }, + { path: "edit/:id", component: DatasetWizardComponent, canActivate: [AuthGuard] }, + { path: "new", component: DatasetWizardComponent, canActivate: [AuthGuard] }, + { path: '', component: DatasetListingComponent, canActivate: [AuthGuard] }, + { path: "dmp/:dmpId", component: DatasetListingComponent, canActivate: [AuthGuard] } +]; diff --git a/dmp-frontend/src/app/datasets/dataset-listing.component.html b/dmp-frontend/src/app/datasets/listing/dataset-listing.component.html similarity index 98% rename from dmp-frontend/src/app/datasets/dataset-listing.component.html rename to dmp-frontend/src/app/datasets/listing/dataset-listing.component.html index 84a27c40f..fec878524 100644 --- a/dmp-frontend/src/app/datasets/dataset-listing.component.html +++ b/dmp-frontend/src/app/datasets/listing/dataset-listing.component.html @@ -88,7 +88,7 @@ - \ No newline at end of file diff --git a/dmp-frontend/src/app/datasets/dataset-listing.component.scss b/dmp-frontend/src/app/datasets/listing/dataset-listing.component.scss similarity index 100% rename from dmp-frontend/src/app/datasets/dataset-listing.component.scss rename to dmp-frontend/src/app/datasets/listing/dataset-listing.component.scss diff --git a/dmp-frontend/src/app/datasets/dataset-listing.component.ts b/dmp-frontend/src/app/datasets/listing/dataset-listing.component.ts similarity index 87% rename from dmp-frontend/src/app/datasets/dataset-listing.component.ts rename to dmp-frontend/src/app/datasets/listing/dataset-listing.component.ts index 1b8470f4a..4f7abec1c 100644 --- a/dmp-frontend/src/app/datasets/dataset-listing.component.ts +++ b/dmp-frontend/src/app/datasets/listing/dataset-listing.component.ts @@ -1,19 +1,18 @@ +import { DataTableRequest } from '../../models/data-table/DataTableRequest'; +import { DatasetListingModel } from '../../models/datasets/DatasetListingModel'; +import { DatasetCriteria } from '../../models/criteria/dataset/DatasetCriteria'; +import { DatasetService } from '../../services/dataset/dataset.service'; import { Component, ViewChild, OnInit, AfterViewInit } from "@angular/core"; import { MatPaginator, MatSort, MatSnackBar } from "@angular/material"; import { Router, Params, ActivatedRoute } from "@angular/router"; import { TranslateService } from "@ngx-translate/core"; import { DataSource } from "@angular/cdk/table"; -import { DatasetCriteriaComponent } from "../shared/components/criteria/datasets/datasets-criteria.component"; -import { DatasetCriteria } from "../models/criteria/dataset/DatasetCriteria"; import { Observable } from "rxjs/Observable"; -import { DataTableRequest } from "../models/data-table/DataTableRequest"; -import { SnackBarNotificationComponent } from "../shared/components/notificaiton/snack-bar-notification.component"; -import { DatasetService } from "../services/dataset/dataset.service"; -import { DatasetListingModel } from "../models/datasets/DatasetListingModel"; import { PageEvent } from '@angular/material'; import { DataManagementPlanService } from "@app/services/data-management-plan/data-management-plan.service"; import { DataManagementPlanModel } from "@app/models/data-managemnt-plans/DataManagementPlanModel"; +import { DatasetCriteriaComponent } from '@app/shared/components/criteria/datasets/datasets-criteria.component'; @Component({ @@ -74,7 +73,7 @@ export class DatasetListingComponent implements OnInit { } rowClick(rowId: String) { - this.router.navigate(['/dataset/' + rowId]); + this.router.navigate(['/datasets/edit/' + rowId]); } getDefaultCriteria(dmpId: String): DatasetCriteria { @@ -126,7 +125,7 @@ export class DatasetDataSource extends DataSource { request.criteria = this._criteria.criteria; return this._service.getPaged(request); }) - .catch((error: any) => { + /*.catch((error: any) => { this._snackBar.openFromComponent(SnackBarNotificationComponent, { data: { message: 'GENERAL.SNACK-BAR.FORMS-BAD-REQUEST', language: this._languageService }, duration: 3000, @@ -134,7 +133,7 @@ export class DatasetDataSource extends DataSource { }); //this._criteria.criteria.onCallbackError(error); return Observable.of(null); - }) + })*/ .map(result => { setTimeout(() => { this.isLoadingResults = false; diff --git a/dmp-frontend/src/app/dmps/dmps.module.ts b/dmp-frontend/src/app/dmps/dmps.module.ts new file mode 100644 index 000000000..598b96d85 --- /dev/null +++ b/dmp-frontend/src/app/dmps/dmps.module.ts @@ -0,0 +1,64 @@ +import { TranslateHttpLoader } from '@ngx-translate/http-loader'; +import { BaseHttpService } from '../utilities/cite-http-service-module/base-http.service'; +import { InvitationAcceptedComponent } from '../invitation-accepted/invitation-accepted.component'; +import { InvitationComponent } from '../invitation/invitation.component'; +import { TranslateLoader, TranslateModule, TranslateService } from '@ngx-translate/core'; +import { DataManagementPlanEditorComponent } from './editor/dmp-editor.component'; +import { DataManagementPlanListingComponent } from './listing/dmp-listing.component'; +import { DataManagementPlanRoutes } from './dmps.routes'; +import { HttpClient, HttpClientModule } from '@angular/common/http'; +import { FormsModule, ReactiveFormsModule } from '@angular/forms'; +import { CommonModule } from '@angular/common'; + + +import { SharedModule } from '../shared/shared.module' +import { NgModule } from '@angular/core'; +@NgModule({ + imports: [ + CommonModule, + FormsModule, + HttpClientModule, + SharedModule, + ReactiveFormsModule, + DataManagementPlanRoutes, + TranslateModule.forRoot({ + loader: { + provide: TranslateLoader, + useFactory: HttpLoaderFactory, + deps: [HttpClient] + } + }), + ], + + declarations: [ + DataManagementPlanListingComponent, + DataManagementPlanEditorComponent, + InvitationComponent, + InvitationAcceptedComponent, + ], + + exports: [ + DataManagementPlanListingComponent, + DataManagementPlanEditorComponent, + InvitationComponent, + InvitationAcceptedComponent, + + ], + entryComponents: [ + InvitationComponent + ], + providers: [ + BaseHttpService + ] +}) + +export class DataManagementPlanModule { + constructor(private translate: TranslateService) { + translate.setDefaultLang('en'); + translate.use('en'); + } + } + +export function HttpLoaderFactory(httpClient: HttpClient) { + return new TranslateHttpLoader(httpClient, 'assets/lang/', '.json'); +} \ No newline at end of file diff --git a/dmp-frontend/src/app/dmps/dmps.routes.ts b/dmp-frontend/src/app/dmps/dmps.routes.ts new file mode 100644 index 000000000..75f9edac0 --- /dev/null +++ b/dmp-frontend/src/app/dmps/dmps.routes.ts @@ -0,0 +1,13 @@ +import { DataManagementPlanEditorComponent } from './editor/dmp-editor.component'; +import { DataManagementPlanListingComponent } from './listing/dmp-listing.component'; +import { DatasetListingComponent } from '../datasets/listing/dataset-listing.component'; +import { RouterModule, Routes } from '@angular/router'; + +const routes: Routes = [ + { path: '', component: DataManagementPlanListingComponent }, + { path: 'edit/:id', component: DataManagementPlanEditorComponent }, + { path: 'new', component: DataManagementPlanEditorComponent }, + { path: 'new_version/:id', component: DataManagementPlanEditorComponent, data: { clone: "clone" } }, +]; + +export const DataManagementPlanRoutes = RouterModule.forChild(routes); diff --git a/dmp-frontend/src/app/dmps/dmp-listing.component.html b/dmp-frontend/src/app/dmps/listing/dmp-listing.component.html similarity index 100% rename from dmp-frontend/src/app/dmps/dmp-listing.component.html rename to dmp-frontend/src/app/dmps/listing/dmp-listing.component.html diff --git a/dmp-frontend/src/app/dmps/dmp-listing.component.scss b/dmp-frontend/src/app/dmps/listing/dmp-listing.component.scss similarity index 100% rename from dmp-frontend/src/app/dmps/dmp-listing.component.scss rename to dmp-frontend/src/app/dmps/listing/dmp-listing.component.scss diff --git a/dmp-frontend/src/app/dmps/dmp-listing.component.ts b/dmp-frontend/src/app/dmps/listing/dmp-listing.component.ts similarity index 78% rename from dmp-frontend/src/app/dmps/dmp-listing.component.ts rename to dmp-frontend/src/app/dmps/listing/dmp-listing.component.ts index 81942fcba..827604c24 100644 --- a/dmp-frontend/src/app/dmps/dmp-listing.component.ts +++ b/dmp-frontend/src/app/dmps/listing/dmp-listing.component.ts @@ -1,16 +1,17 @@ -import { InvitationComponent } from '../invitation/invitation.component'; +import { DataTableRequest } from '../../models/data-table/DataTableRequest'; +import { DataManagementPlanListingModel } from '../../models/data-managemnt-plans/DataManagementPlanListingModel'; +import { InvitationComponent } from '../../invitation/invitation.component'; +import { DataManagementPlanCriteria } from '../../models/criteria/data-management-plan/DataManagementPlanCriteria'; +import { + DataManagementPlanCriteriaComponent, +} from '../../shared/components/criteria/data-management-plan/dmp-criteria.component'; +import { DataManagementPlanService } from '../../services/data-management-plan/data-management-plan.service'; import { Component, ViewChild, OnInit, AfterViewInit } from "@angular/core"; import { MatPaginator, MatSort, MatSnackBar, MatDialog } from "@angular/material"; import { Router } from "@angular/router"; import { TranslateService } from "@ngx-translate/core"; import { DataSource } from "@angular/cdk/table"; import { Observable } from "rxjs/Observable"; -import { SnackBarNotificationComponent } from "../shared/components/notificaiton/snack-bar-notification.component"; -import { DataManagementPlanService } from "../services/data-management-plan/data-management-plan.service"; -import { DataManagementPlanCriteriaComponent } from "../shared/components/criteria/data-management-plan/dmp-criteria.component"; -import { DataManagementPlanCriteria } from "../models/criteria/data-management-plan/DataManagementPlanCriteria"; -import { DataManagementPlanListingModel } from "../models/data-managemnt-plans/DataManagementPlanListingModel"; -import { DataTableRequest } from '../models/data-table/DataTableRequest'; @@ -50,19 +51,19 @@ export class DataManagementPlanListingComponent implements OnInit { } rowClick(rowId: String) { - this.router.navigate(['/dmp/' + rowId]); + this.router.navigate(['/dmps/edit/' + rowId]); } addDataset(rowId: String) { - this.router.navigate(['/dataset/new/' + rowId]); + this.router.navigate(['/datasets/new/' + rowId]); } showDatasets(rowId: String) { - this.router.navigate(['/datasets/' + rowId]); + this.router.navigate(['/datasets/dmp/' + rowId]); } newVersion(rowId: String) { - this.router.navigate(['/dmp/' + rowId+ '/new_version'],{queryParams:{clone: 'true'}}); + this.router.navigate(['/dmps/new_version/' + rowId], { queryParams: { clone: 'true' } }); } getDefaultCriteria(): DataManagementPlanCriteria { @@ -114,14 +115,14 @@ export class DataManagementPlanDataSource extends DataSource { + /*.catch((error: any) => { this._snackBar.openFromComponent(SnackBarNotificationComponent, { data: { message: 'GENERAL.SNACK-BAR.FORMS-BAD-REQUEST', language: this._languageService }, duration: 3000, extraClasses: ['snackbar-warning'] }); return Observable.of(null); - }) + })*/ .map(result => { setTimeout(() => { this.isLoadingResults = false; diff --git a/dmp-frontend/src/app/form/dynamic-form.module.ts b/dmp-frontend/src/app/form/dynamic-form.module.ts new file mode 100644 index 000000000..31b5dc0e8 --- /dev/null +++ b/dmp-frontend/src/app/form/dynamic-form.module.ts @@ -0,0 +1,97 @@ +import { TranslateHttpLoader } from '@ngx-translate/http-loader'; +import { PaginationService } from '../services/pagination.service'; +import { VisibilityRulesService } from '../visibility-rules/visibility-rules.service'; +import { DynamicFieldCheckBoxComponent } from './dynamic-fields/dynamic-field-checkbox/dynamic-field-checkbox'; +import { ProgressBarComponent } from './pprogress-bar/progress-bar.component'; +import { TableOfContentsFieldComponent } from './tableOfContents/table-of-content-field/table-of-content-field.component'; +import { DynamicFormSectionComponent } from './dynamic-form-section/dynamic-form-section'; +import { DynamicFieldDropdownComponent } from './dynamic-fields/dynamic-field-dropdown/dynamic-field-dropdown'; +import { AutocompleteRemoteComponent } from './dynamic-fields/dynamic-field-autocomplete/autocomplete-remote.component'; +import { + TableOfContentsSectionComponent, +} from './tableOfContents/table-of-content-section/table-of-content-section.component'; +import { TableOfContentsGroupComponent } from './tableOfContents/table-of-content-group/table-of-content-group.component'; +import { + TableOfContentsFieldSetComponent, +} from './tableOfContents/table-of-content-fieldset/table-of-content-fieldset.component'; +import { DynamicFieldRadioBoxComponent } from './dynamic-fields/dynamic-field-radiobox/dynamic-field-radiobox.component'; +import { TableOfContentsComponent } from './tableOfContents/table-of-contents.component'; +import { + DynamicFieldBooleanDecisionComponent, +} from './dynamic-fields/dynamic-field-boolean-decision/dynamic-field-boolean-decision.component'; +import { DynamicFormGroupComponent } from './dynamic-form-group/dynamic-form-group.component'; +import { DynamicFormCompositeFieldComponent } from './dynamic-form-composite-field/dynamic-form-composite-field'; +import { DynamicFormFieldComponent } from './dynamic-fields/dynamic-form-field.component'; +import { DynamicFormComponent } from './dynamic-form/dynamic-form.component'; +import { TranslateLoader, TranslateModule } from '@ngx-translate/core'; +import { SharedModule } from '../shared/shared.module'; +import { HttpClient, HttpClientModule } from '@angular/common/http'; +import { FormsModule, ReactiveFormsModule } from '@angular/forms'; +import { CommonModule } from '@angular/common'; +import { NgModule } from "@angular/core"; + + +@NgModule({ + imports: [ + CommonModule, + FormsModule, + HttpClientModule, + SharedModule, + ReactiveFormsModule, + TranslateModule.forRoot({ + loader: { + provide: TranslateLoader, + useFactory: HttpLoaderFactory, + deps: [HttpClient] + } + }), + ], + + declarations: [ + DynamicFormComponent, + DynamicFormFieldComponent, + DynamicFormGroupComponent, + DynamicFormCompositeFieldComponent, + DynamicFieldBooleanDecisionComponent, + DynamicFieldRadioBoxComponent, + TableOfContentsComponent, + TableOfContentsFieldSetComponent, + TableOfContentsGroupComponent, + TableOfContentsSectionComponent, + AutocompleteRemoteComponent, + DynamicFieldDropdownComponent, + DynamicFormSectionComponent, + TableOfContentsFieldComponent, + ProgressBarComponent, + DynamicFieldCheckBoxComponent, + ], + + exports: [ + DynamicFormComponent, + DynamicFormFieldComponent, + DynamicFormGroupComponent, + DynamicFormCompositeFieldComponent, + DynamicFieldBooleanDecisionComponent, + DynamicFieldRadioBoxComponent, + TableOfContentsComponent, + TableOfContentsFieldSetComponent, + TableOfContentsGroupComponent, + TableOfContentsSectionComponent, + AutocompleteRemoteComponent, + DynamicFieldDropdownComponent, + DynamicFormSectionComponent, + TableOfContentsFieldComponent, + ProgressBarComponent, + DynamicFieldCheckBoxComponent, + ], + providers:[ + VisibilityRulesService, + PaginationService + ] +}) + +export class DynamicFormModule { } + +export function HttpLoaderFactory(httpClient: HttpClient) { + return new TranslateHttpLoader(httpClient, 'assets/lang/', '.json'); +} \ No newline at end of file diff --git a/dmp-frontend/src/app/form/dynamic-form.component.html b/dmp-frontend/src/app/form/dynamic-form/dynamic-form.component.html similarity index 96% rename from dmp-frontend/src/app/form/dynamic-form.component.html rename to dmp-frontend/src/app/form/dynamic-form/dynamic-form.component.html index d67041f47..2b3ef7038 100644 --- a/dmp-frontend/src/app/form/dynamic-form.component.html +++ b/dmp-frontend/src/app/form/dynamic-form/dynamic-form.component.html @@ -1,48 +1,48 @@ -
- - - - - - - -
-
- - -
-
- -
- - -
-
- - {{page.title}} -
- - -
-
-
-
-
- - -
- - -
+
+ + + + + +
+ +
+
+ + +
+
+ +
+ + +
+
+ + {{page.title}} +
+ + +
+
+
+
+
+ + +
+
+ +
\ No newline at end of file diff --git a/dmp-frontend/src/app/form/dynamic-form.component.scss b/dmp-frontend/src/app/form/dynamic-form/dynamic-form.component.scss similarity index 100% rename from dmp-frontend/src/app/form/dynamic-form.component.scss rename to dmp-frontend/src/app/form/dynamic-form/dynamic-form.component.scss diff --git a/dmp-frontend/src/app/form/dynamic-form.component.ts b/dmp-frontend/src/app/form/dynamic-form/dynamic-form.component.ts similarity index 80% rename from dmp-frontend/src/app/form/dynamic-form.component.ts rename to dmp-frontend/src/app/form/dynamic-form/dynamic-form.component.ts index 61c799184..123a029fd 100644 --- a/dmp-frontend/src/app/form/dynamic-form.component.ts +++ b/dmp-frontend/src/app/form/dynamic-form/dynamic-form.component.ts @@ -1,146 +1,143 @@ -import { DatasetWizardModel } from '../models/datasets/DatasetWizardModel'; -import { DatasetWizardComponent } from '../dataset-wizard/dataset-wizard.component'; -import { DatasetProfileDefinitionModel } from '../models/DatasetProfileDefinitionModel'; -import { VisibilityRulesService } from '../visibility-rules/visibility-rules.service'; -import { Rule } from '../models/Rule'; -import { Section } from '../models/Section'; - -import { JsonSerializer } from '../utilities/JsonSerializer'; -import { Component, Input, OnInit, AfterViewChecked, ViewChild, forwardRef, ViewEncapsulation } from '@angular/core'; -import { FormGroup, Validators, ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms'; -import { NgForm } from '@angular/forms'; -import { Router, ActivatedRoute, ParamMap, Params } from '@angular/router'; -import 'rxjs/add/operator/switchMap'; -import { Location } from '@angular/common'; -import { MatSidenavModule } from '@angular/material/sidenav'; -import { BaseHttpService } from '../utilities/cite-http-service-module/base-http.service'; -import { DatasetWizardService } from '../services/dataset-wizard/dataset-wizard.service'; - -declare function simple_notifier(type: string, title: string, message: string): any; - -@Component({ - selector: 'dynamic-form', - templateUrl: './dynamic-form.component.html', - styleUrls: [ - './dynamic-form.component.scss' - ], - providers: [ - ], - encapsulation: ViewEncapsulation.None, -}) -export class DynamicFormComponent implements OnInit { - - @Input() dataModel: DatasetWizardModel = new DatasetWizardModel(); - @Input() path: string; - form: FormGroup; - id: string; - // @Input() datasetId: string; - pathName: string; - pages: Array; - activeStepperIndex: number = 1; - visibleSidebar: boolean = false; - datasetProfileDefinitionModel: DatasetProfileDefinitionModel - private progressbar: boolean = false; - private currentPageIndex: number = 0; - - private fragment: string; - constructor(private router: Router, - private _location: Location, - private route: ActivatedRoute, - private visibilityRulesService: VisibilityRulesService, - private http: BaseHttpService, - private datasetWizardService: DatasetWizardService, - ) { - //this.datasetId = route.snapshot.params['id']; - } - - getSubForm(subformName) { - return this.form.controls[subformName]; - } - - - ngOnInit() { - this.datasetProfileDefinitionModel = this.dataModel.datasetProfileDefinition - this.createPagination(); - this.form = this.datasetProfileDefinitionModel.buildForm(); - this.visibilityRulesService.formGroup = this.form; - let rules: Rule[] = JsonSerializer.fromJSONArray(this.datasetProfileDefinitionModel.rules, Rule); - this.visibilityRulesService.buildVisibilityRules(rules) - this.progressbar = true; - - this.route.fragment.subscribe((fragment: string) => { - var self = this; - setTimeout(function () { self.scrollTo(fragment) }); - }); - - this.route.queryParams.subscribe((params) => { - if (params && "page" in params) - this.changeCurrentPage(params["page"]); - }); - } - - submit() { - this.datasetWizardService.saveDataset(this.dataModel, this.form.value).subscribe(data => { - this.router.navigateByUrl("/datasets/" + this.dataModel.dmp.id); - }); - } - - save() { - this.dataModel.status = "0"; - this.submit(); - } - - saveFinalize() { - this.dataModel.status = "1"; - this.submit(); - } - - toggleSidebar() { - this.visibleSidebar = !this.visibleSidebar; - } - - // getPages(model: DatasetProfileDefinitionModel): Array { - // let pageSet = new Set(); - - // model.sections.forEach(section => { - // pageSet.add(section.page); - // }); - - // return Array.from(pageSet).sort((a, b) => a - b); - // } - - shouldDisplaySection(section: Section): Boolean { - return (section.page) == this.currentPageIndex; - } - - createPagination() { - /*this.pages.forEach(item => { - this.stepperItems.push({ - label: '', - }) - });*/ - } - - changePageIndex(index: any) { - this.router.navigate([this.route.snapshot.url[0] + "/" + this.route.snapshot.url[1]], { queryParams: { page: this.pages[index - 1] } }); - } - - scrollTo(sectionID: string) { - if (!sectionID) return; - var element = document.querySelector('#' + sectionID); - if (!element) return; - element.scrollIntoView(); - this.visibleSidebar = true; - var scrollElement = document.querySelector('.scrollableContent'); - //scrollElement.scrollTop = topElement.offsetTop; - } - - changeCurrentPage(pageString: string) { - if (!pageString) return; - var page = parseInt(pageString); - if (isNaN(page)) return; - var pageIndex = this.pages.indexOf(page); - if (pageIndex === -1) return; - this.currentPageIndex = page; - } +import { Section } from '../../models/Section'; +import { JsonSerializer } from '../../utilities/JsonSerializer'; +import { Rule } from '../../models/Rule'; +import { DatasetWizardService } from '../../services/dataset-wizard/dataset-wizard.service'; +import { BaseHttpService } from '../../utilities/cite-http-service-module/base-http.service'; +import { VisibilityRulesService } from '../../visibility-rules/visibility-rules.service'; +import { DatasetProfileDefinitionModel } from '../../models/DatasetProfileDefinitionModel'; +import { DatasetWizardModel } from '../../models/datasets/DatasetWizardModel'; +import { Component, Input, OnInit, AfterViewChecked, ViewChild, forwardRef, ViewEncapsulation } from '@angular/core'; +import { FormGroup, Validators, ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms'; +import { NgForm } from '@angular/forms'; +import { Router, ActivatedRoute, ParamMap, Params } from '@angular/router'; +import 'rxjs/add/operator/switchMap'; +import { Location } from '@angular/common'; +import { MatSidenavModule } from '@angular/material/sidenav'; + +declare function simple_notifier(type: string, title: string, message: string): any; + +@Component({ + selector: 'dynamic-form', + templateUrl: './dynamic-form.component.html', + styleUrls: [ + './dynamic-form.component.scss' + ], + providers: [ + ], + encapsulation: ViewEncapsulation.None, +}) +export class DynamicFormComponent implements OnInit { + + @Input() dataModel: DatasetWizardModel = new DatasetWizardModel(); + @Input() path: string; + @Input() form: FormGroup; + id: string; + // @Input() datasetId: string; + pathName: string; + pages: Array; + activeStepperIndex: number = 1; + visibleSidebar: boolean = false; + datasetProfileDefinitionModel: DatasetProfileDefinitionModel + private progressbar: boolean = false; + private currentPageIndex: number = 0; + + private fragment: string; + constructor(private router: Router, + private _location: Location, + private route: ActivatedRoute, + private visibilityRulesService: VisibilityRulesService, + private http: BaseHttpService, + private datasetWizardService: DatasetWizardService, + ) { + //this.datasetId = route.snapshot.params['id']; + } + + getSubForm(subformName) { + return this.form.controls[subformName]; + } + + + ngOnInit() { + this.datasetProfileDefinitionModel = this.dataModel.datasetProfileDefinition + this.createPagination(); + this.visibilityRulesService.formGroup = this.form; + let rules: Rule[] = JsonSerializer.fromJSONArray(this.datasetProfileDefinitionModel.rules, Rule); + this.visibilityRulesService.buildVisibilityRules(rules) + this.progressbar = true; + + this.route.fragment.subscribe((fragment: string) => { + var self = this; + setTimeout(function () { self.scrollTo(fragment) }); + }); + + this.route.queryParams.subscribe((params) => { + if (params && "page" in params) + this.changeCurrentPage(params["page"]); + }); + } + + submit() { + this.datasetWizardService.saveDataset(this.dataModel, this.form.value).subscribe(data => { + this.router.navigateByUrl("/datasets/dmp/" + this.dataModel.dmp.id); + }); + } + + save() { + this.dataModel.status = "0"; + this.submit(); + } + + saveFinalize() { + this.dataModel.status = "1"; + this.submit(); + } + + toggleSidebar() { + this.visibleSidebar = !this.visibleSidebar; + } + + // getPages(model: DatasetProfileDefinitionModel): Array { + // let pageSet = new Set(); + + // model.sections.forEach(section => { + // pageSet.add(section.page); + // }); + + // return Array.from(pageSet).sort((a, b) => a - b); + // } + + shouldDisplaySection(section: Section): Boolean { + return (section.page) == this.currentPageIndex; + } + + createPagination() { + /*this.pages.forEach(item => { + this.stepperItems.push({ + label: '', + }) + });*/ + } + + changePageIndex(index: any) { + this.router.navigate([this.route.snapshot.url[0] + "/" + this.route.snapshot.url[1]], { queryParams: { page: this.pages[index - 1] } }); + } + + scrollTo(sectionID: string) { + if (!sectionID) return; + var element = document.querySelector('#' + sectionID); + if (!element) return; + element.scrollIntoView(); + this.visibleSidebar = true; + var scrollElement = document.querySelector('.scrollableContent'); + //scrollElement.scrollTop = topElement.offsetTop; + } + + changeCurrentPage(pageString: string) { + if (!pageString) return; + var page = parseInt(pageString); + if (isNaN(page)) return; + var pageIndex = this.pages.indexOf(page); + if (pageIndex === -1) return; + this.currentPageIndex = page; + } } \ No newline at end of file diff --git a/dmp-frontend/src/app/form/tableOfContents/table-of-content-field/table-of-content-field.component.ts b/dmp-frontend/src/app/form/tableOfContents/table-of-content-field/table-of-content-field.component.ts index b23056191..1cd52a4b7 100644 --- a/dmp-frontend/src/app/form/tableOfContents/table-of-content-field/table-of-content-field.component.ts +++ b/dmp-frontend/src/app/form/tableOfContents/table-of-content-field/table-of-content-field.component.ts @@ -9,7 +9,7 @@ import {Router, ActivatedRoute} from '@angular/router' @Component({ selector: 'table-of-contents-field', - templateUrl: '/table-of-content-field.component.html', + templateUrl: './table-of-content-field.component.html', providers: [] }) export class TableOfContentsFieldComponent extends BaseTableOfContent{ diff --git a/dmp-frontend/src/app/form/tableOfContents/table-of-content-fieldset/table-of-content-fieldset.component.ts b/dmp-frontend/src/app/form/tableOfContents/table-of-content-fieldset/table-of-content-fieldset.component.ts index 0af8888b8..8b4f8be8a 100644 --- a/dmp-frontend/src/app/form/tableOfContents/table-of-content-fieldset/table-of-content-fieldset.component.ts +++ b/dmp-frontend/src/app/form/tableOfContents/table-of-content-fieldset/table-of-content-fieldset.component.ts @@ -11,7 +11,7 @@ import { Router, ActivatedRoute } from '@angular/router' @Component({ selector: 'table-of-contents-fieldset', - templateUrl: '/table-of-content-fieldset.component.html', + templateUrl: './table-of-content-fieldset.component.html', providers: [] }) export class TableOfContentsFieldSetComponent extends BaseTableOfContent { diff --git a/dmp-frontend/src/app/form/tableOfContents/table-of-content-group/table-of-content-group.component.ts b/dmp-frontend/src/app/form/tableOfContents/table-of-content-group/table-of-content-group.component.ts index 39a891966..6c8124e5e 100644 --- a/dmp-frontend/src/app/form/tableOfContents/table-of-content-group/table-of-content-group.component.ts +++ b/dmp-frontend/src/app/form/tableOfContents/table-of-content-group/table-of-content-group.component.ts @@ -9,7 +9,7 @@ import {Router, ActivatedRoute} from '@angular/router' @Component({ selector: 'table-of-contents-group', - templateUrl: '/table-of-content-group.component.html', + templateUrl: './table-of-content-group.component.html', providers: [] }) export class TableOfContentsGroupComponent extends BaseTableOfContent { diff --git a/dmp-frontend/src/app/form/tableOfContents/table-of-content-section/table-of-content-section.component.ts b/dmp-frontend/src/app/form/tableOfContents/table-of-content-section/table-of-content-section.component.ts index e50a680f5..d205a6f38 100644 --- a/dmp-frontend/src/app/form/tableOfContents/table-of-content-section/table-of-content-section.component.ts +++ b/dmp-frontend/src/app/form/tableOfContents/table-of-content-section/table-of-content-section.component.ts @@ -9,7 +9,7 @@ import { ActivatedRouteSnapshot,Router,ActivatedRoute } from '@angular/router'; @Component({ selector: 'table-of-contents-section', - templateUrl: '/table-of-content-section.component.html', + templateUrl: './table-of-content-section.component.html', providers: [] }) export class TableOfContentsSectionComponent extends BaseTableOfContent implements OnInit { diff --git a/dmp-frontend/src/app/form/tableOfContents/table-of-contents.component.ts b/dmp-frontend/src/app/form/tableOfContents/table-of-contents.component.ts index e65184be4..8ba7249db 100644 --- a/dmp-frontend/src/app/form/tableOfContents/table-of-contents.component.ts +++ b/dmp-frontend/src/app/form/tableOfContents/table-of-contents.component.ts @@ -7,7 +7,7 @@ import { Component, OnInit, Input, Output, EventEmitter } from '@angular/core'; @Component({ selector: 'table-of-content', - templateUrl: '/table-of-contents.component.html', + templateUrl: './table-of-contents.component.html', styleUrls: ['./toc.component.css'], providers: [] }) diff --git a/dmp-frontend/src/app/invitation-accepted/invitation-accepted.component.ts b/dmp-frontend/src/app/invitation-accepted/invitation-accepted.component.ts index 0aeadf2b6..5ed4bdbbd 100644 --- a/dmp-frontend/src/app/invitation-accepted/invitation-accepted.component.ts +++ b/dmp-frontend/src/app/invitation-accepted/invitation-accepted.component.ts @@ -26,7 +26,7 @@ export class InvitationAcceptedComponent implements OnInit { this.route.params.subscribe(params => { let id = params["id"] this.invitationService.exchange(id).subscribe(id=>{ - this.router.navigate(["dmp/"+id]) + this.router.navigate(["dmps/edit/"+id]) }) } ) diff --git a/dmp-frontend/src/app/models/datasets/DatasetWizardModel.ts b/dmp-frontend/src/app/models/datasets/DatasetWizardModel.ts index ae3ecb1b7..0fcfefbfa 100644 --- a/dmp-frontend/src/app/models/datasets/DatasetWizardModel.ts +++ b/dmp-frontend/src/app/models/datasets/DatasetWizardModel.ts @@ -25,8 +25,8 @@ export class DatasetWizardModel implements Serializable { public dataRepositories: DataRepositoryModel[] = []; public externalDatasets: ExternalDatasetModel[] = []; public dmp: DataManagementPlanModel = new DataManagementPlanModel(); - public datasetProfileDefinition ; - public properties :any; + public datasetProfileDefinition; + public properties: any; public errorModel: BaseErrorModel = new BaseErrorModel(); fromJSONObject(item: any): DatasetWizardModel { @@ -47,8 +47,8 @@ export class DatasetWizardModel implements Serializable { buildForm(context: ValidationContext = null, disabled: boolean = false): FormGroup { if (context == null) { context = this.createValidationContext(); } - const formGroup = new FormBuilder().group({ + id: [{ value: this.id, disabled: disabled }, context.getValidation('id').validators], label: [{ value: this.label, disabled: disabled }, context.getValidation('label').validators], uri: [{ value: this.uri, disabled: disabled }, context.getValidation('uri').validators], status: [{ value: this.status, disabled: disabled }, context.getValidation('status').validators], @@ -57,15 +57,16 @@ export class DatasetWizardModel implements Serializable { registries: [{ value: this.registries, disabled: disabled }, context.getValidation('registries').validators], dataRepositories: [{ value: this.dataRepositories, disabled: disabled }, context.getValidation('dataRepositories').validators], externalDatasets: [{ value: this.externalDatasets, disabled: disabled }, context.getValidation('externalDatasets').validators], - dmp: [{ value: this.dmp, disabled: disabled }, context.getValidation('dmp').validators], + dmp: [{ value: this.dmp, disabled: disabled }, context.getValidation('dmp').validators] }); - - formGroup.addControl("profile",this.profile.buildForm()) + if (this.datasetProfileDefinition) formGroup.addControl("datasetProfileDefinition", this.datasetProfileDefinition.buildForm()) + formGroup.addControl("profile", this.profile.buildForm()) return formGroup; } createValidationContext(): ValidationContext { const baseContext: ValidationContext = new ValidationContext(); + baseContext.validation.push({ key: 'id', validators: [BackendErrorValidator(this.errorModel, 'id')] }); baseContext.validation.push({ key: 'label', validators: [Validators.required, BackendErrorValidator(this.errorModel, 'label')] }); baseContext.validation.push({ key: 'profile', validators: [Validators.required, BackendErrorValidator(this.errorModel, 'profile')] }); baseContext.validation.push({ key: 'uri', validators: [Validators.required, BackendErrorValidator(this.errorModel, 'uri')] }); @@ -76,6 +77,8 @@ export class DatasetWizardModel implements Serializable { baseContext.validation.push({ key: 'dataRepositories', validators: [BackendErrorValidator(this.errorModel, 'dataRepositories')] }); baseContext.validation.push({ key: 'externalDatasets', validators: [BackendErrorValidator(this.errorModel, 'externalDatasets')] }); baseContext.validation.push({ key: 'dmp', validators: [BackendErrorValidator(this.errorModel, 'dmp')] }); //TODO + baseContext.validation.push({ key: 'datasetProfileDefinition', validators: [BackendErrorValidator(this.errorModel, 'datasetProfileDefinition')] }); //TODO + return baseContext; } } \ No newline at end of file diff --git a/dmp-frontend/src/app/projects/project-listing.component.html b/dmp-frontend/src/app/projects/listing/project-listing.component.html similarity index 100% rename from dmp-frontend/src/app/projects/project-listing.component.html rename to dmp-frontend/src/app/projects/listing/project-listing.component.html diff --git a/dmp-frontend/src/app/projects/project-listing.component.scss b/dmp-frontend/src/app/projects/listing/project-listing.component.scss similarity index 100% rename from dmp-frontend/src/app/projects/project-listing.component.scss rename to dmp-frontend/src/app/projects/listing/project-listing.component.scss diff --git a/dmp-frontend/src/app/projects/project-listing.component.ts b/dmp-frontend/src/app/projects/listing/project-listing.component.ts similarity index 85% rename from dmp-frontend/src/app/projects/project-listing.component.ts rename to dmp-frontend/src/app/projects/listing/project-listing.component.ts index e4bdedc84..e20003bb7 100644 --- a/dmp-frontend/src/app/projects/project-listing.component.ts +++ b/dmp-frontend/src/app/projects/listing/project-listing.component.ts @@ -1,15 +1,14 @@ +import { DataTableRequest } from '../../models/data-table/DataTableRequest'; +import { ProjectListingModel } from '../../models/projects/ProjectListingModel'; +import { ProjectCriteria } from '../../models/criteria/project/ProjectCriteria'; +import { ProjectService } from '../../services/project/project.service'; import { Component, ViewChild, OnInit, AfterViewInit, ViewEncapsulation } from "@angular/core"; import { MatPaginator, MatSort, MatSnackBar } from "@angular/material"; import { Router } from "@angular/router"; import { TranslateService } from "@ngx-translate/core"; import { DataSource } from "@angular/cdk/table"; -import { ProjectListingModel } from "../models/projects/ProjectListingModel"; -import { ProjectService } from "../services/project/project.service"; -import { ProjectCriteriaComponent } from "../shared/components/criteria/projects/projects-criteria.component"; -import { ProjectCriteria } from "../models/criteria/project/ProjectCriteria"; import { Observable } from "rxjs/Observable"; -import { DataTableRequest } from "../models/data-table/DataTableRequest"; -import { SnackBarNotificationComponent } from "../shared/components/notificaiton/snack-bar-notification.component"; +import { ProjectCriteriaComponent } from '@app/shared/components/criteria/projects/projects-criteria.component'; @Component({ selector: 'app-project-listing-component', @@ -47,7 +46,7 @@ export class ProjectListingComponent implements OnInit { } rowClick(rowId: String) { - this.router.navigate(['/project/' + rowId]); + this.router.navigate(['/projects/edit/' + rowId]); } getDefaultCriteria(): ProjectCriteria { @@ -98,7 +97,7 @@ export class ProjectDataSource extends DataSource { request.criteria = this._criteria.criteria; return this._service.getPaged(request); }) - .catch((error: any) => { + /*.catch((error: any) => { this._snackBar.openFromComponent(SnackBarNotificationComponent, { data: { message: 'GENERAL.SNACK-BAR.FORMS-BAD-REQUEST', language: this._languageService }, duration: 3000, @@ -106,7 +105,7 @@ export class ProjectDataSource extends DataSource { }); this._criteria.onCallbackError(error.error); return Observable.of(null); - }) + })*/ .map(result => { setTimeout(() => { this.isLoadingResults = false; diff --git a/dmp-frontend/src/app/projects/project.routes.ts b/dmp-frontend/src/app/projects/project.routes.ts new file mode 100644 index 000000000..d63389d25 --- /dev/null +++ b/dmp-frontend/src/app/projects/project.routes.ts @@ -0,0 +1,11 @@ +import { ProjectEditorComponent } from './editor/project-editor.component'; +import { ProjectListingComponent } from './listing/project-listing.component'; +import { RouterModule, Routes } from '@angular/router'; + +const routes: Routes = [ + { path: '', component: ProjectListingComponent }, + { path: 'edit/:id', component: ProjectEditorComponent }, + { path: 'new', component: ProjectEditorComponent }, +]; + +export const ProjectRoutes = RouterModule.forChild(routes); diff --git a/dmp-frontend/src/app/projects/projects.module.ts b/dmp-frontend/src/app/projects/projects.module.ts new file mode 100644 index 000000000..015e78657 --- /dev/null +++ b/dmp-frontend/src/app/projects/projects.module.ts @@ -0,0 +1,53 @@ +import { BaseHttpService } from '../utilities/cite-http-service-module/base-http.service'; +import { TranslateHttpLoader } from '@ngx-translate/http-loader'; +import { TranslateLoader, TranslateModule, TranslateService } from '@ngx-translate/core'; +import { ProjectEditorComponent } from './editor/project-editor.component'; +import { ProjectListingComponent } from './listing/project-listing.component'; +import { ProjectRoutes } from './project.routes'; +import { HttpClient, HttpClientModule } from '@angular/common/http'; +import { FormsModule, ReactiveFormsModule } from '@angular/forms'; +import { CommonModule } from '@angular/common'; + + +import { SharedModule } from '../shared/shared.module' +import { NgModule } from '@angular/core'; +@NgModule({ + imports: [ + CommonModule, + FormsModule, + HttpClientModule, + SharedModule, + ProjectRoutes, + ReactiveFormsModule, + TranslateModule.forRoot({ + loader: { + provide: TranslateLoader, + useFactory: HttpLoaderFactory, + deps: [HttpClient] + } + }), + ], + + declarations: [ + ProjectListingComponent, + ProjectEditorComponent + ], + + exports: [ + ProjectListingComponent, + ProjectEditorComponent, + ], providers: [ + BaseHttpService + ] +}) + +export class ProjectsModule { + constructor(private translate: TranslateService) { + translate.setDefaultLang('en'); + translate.use('en'); + } +} + +export function HttpLoaderFactory(httpClient: HttpClient) { + return new TranslateHttpLoader(httpClient, 'assets/lang/', '.json'); +} diff --git a/dmp-frontend/src/app/shared/shared.module.ts b/dmp-frontend/src/app/shared/shared.module.ts index 9c0afda68..29494870e 100644 --- a/dmp-frontend/src/app/shared/shared.module.ts +++ b/dmp-frontend/src/app/shared/shared.module.ts @@ -1,3 +1,6 @@ +import { BaseCriteriaComponent } from './components/criteria/base/base-criteria.component'; +import { FigurecardComponent } from './components/figurecard/figurecard.component'; +import { AutocompleteComponent } from './components/autocomplete/autocomplete.component'; import { CommonModule } from '@angular/common'; import { NgModule } from '@angular/core'; import { RouterModule } from '@angular/router'; @@ -7,7 +10,7 @@ import { MaterialModule } from './material/material.module'; import { TranslateModule } from '@ngx-translate/core'; import { ProjectCriteriaComponent } from './components/criteria/projects/projects-criteria.component'; import { DatasetCriteriaComponent } from './components/criteria/datasets/datasets-criteria.component'; -import { FormsModule } from '@angular/forms'; +import { FormsModule, ReactiveFormsModule } from '@angular/forms'; import { DataManagementPlanCriteriaComponent } from './components/criteria/data-management-plan/dmp-criteria.component'; @NgModule({ @@ -16,7 +19,8 @@ import { DataManagementPlanCriteriaComponent } from './components/criteria/data- RouterModule, MaterialModule, TranslateModule, - FormsModule + FormsModule, + ReactiveFormsModule ], declarations: [ @@ -24,7 +28,10 @@ import { DataManagementPlanCriteriaComponent } from './components/criteria/data- SnackBarNotificationComponent, ProjectCriteriaComponent, DatasetCriteriaComponent, - DataManagementPlanCriteriaComponent + DataManagementPlanCriteriaComponent, + AutocompleteComponent, + FigurecardComponent, + BaseCriteriaComponent ], exports: [ @@ -33,7 +40,10 @@ import { DataManagementPlanCriteriaComponent } from './components/criteria/data- SnackBarNotificationComponent, ProjectCriteriaComponent, DatasetCriteriaComponent, - DataManagementPlanCriteriaComponent + DataManagementPlanCriteriaComponent, + AutocompleteComponent, + FigurecardComponent, + BaseCriteriaComponent ], entryComponents: [ ] diff --git a/dmp-frontend/src/assets/lang/en.json b/dmp-frontend/src/assets/lang/en.json index c6b290fa4..09659a835 100644 --- a/dmp-frontend/src/assets/lang/en.json +++ b/dmp-frontend/src/assets/lang/en.json @@ -17,8 +17,8 @@ "UNSUCCESSFUL-LOGOUT": "Unsuccessful Logout", "UNSUCCESSFUL-LOGIN": "Unsuccessful Login" }, - "ERROR":{ - "HTTP-REQUEST-ERROR":"AN Unexpected Error Has Occured" + "ERRORS":{ + "HTTP-REQUEST-ERROR":"An Unexpected Error Has Occured" } }, "NAV-BAR": { diff --git a/dmp-frontend/src/environments/environment.prod.ts b/dmp-frontend/src/environments/environment.prod.ts index 3612073bc..ffe8aed76 100644 --- a/dmp-frontend/src/environments/environment.prod.ts +++ b/dmp-frontend/src/environments/environment.prod.ts @@ -1,3 +1,3 @@ export const environment = { - production: true + production: false }; diff --git a/dmp-frontend/src/environments/environment.ts b/dmp-frontend/src/environments/environment.ts index 4f0114ac4..b7f639aec 100644 --- a/dmp-frontend/src/environments/environment.ts +++ b/dmp-frontend/src/environments/environment.ts @@ -4,5 +4,5 @@ // The list of which env maps to which file can be found in `.angular-cli.json`. export const environment = { - production: true + production: false };