dataset editor

This commit is contained in:
annampak 2017-12-19 14:47:08 +02:00
parent 8bec0a6cf0
commit b3cbd1addf
12 changed files with 97 additions and 50 deletions

View File

@ -14,6 +14,8 @@ 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_new/editor/dataset-editor.component';
import { DatasetListingComponent } from './datasets_new/dataset-listing.component';
const appRoutes: Routes = [
@ -26,6 +28,9 @@ const appRoutes: Routes = [
{ path: 'dmps', component: DataManagementPlanListingComponent, canActivate: [AuthGuard]},
{ path: 'dmp/:id', component: DataManagementPlanEditorComponent, canActivate: [AuthGuard]},
{ path: 'dmps/new', component: DataManagementPlanEditorComponent, canActivate: [AuthGuard]},
{ path: 'datasets', component: DatasetListingComponent, canActivate: [AuthGuard]},
{ path: 'dataset/:id', component: DatasetEditorComponent, canActivate: [AuthGuard]},
{ path: 'datasets/new', component: DatasetEditorComponent, canActivate: [AuthGuard]},
{ path: 'login', component: MainSignInComponent},
{ path: "unauthorized", loadChildren: './unauthorized/unauthorized.module#UnauthorizedModule' },
{ path: 'welcome', component: HomepageComponent, canActivate: [AuthGuard]},

View File

@ -111,6 +111,7 @@ import { ProjectEditorComponent } from './projects/editor/project-editor.compone
import { DataManagementPlanEditorComponent } from './dmps/editor/dmp-editor.component';
import { FigurecardComponent } from './shared/components/figurecard/figurecard.component';
import { DatasetEditorComponent } from './datasets_new/editor/dataset-editor.component';
@ -152,7 +153,8 @@ import { FigurecardComponent } from './shared/components/figurecard/figurecard.c
BreadcrumbComponent, DmpDetailedComponent, ProjectDetailedComponent,
ProjectEditorComponent,
DataManagementPlanEditorComponent,
FigurecardComponent
FigurecardComponent,
DatasetEditorComponent
],
imports: [
BrowserModule,

View File

@ -28,7 +28,8 @@
<!-- Column Definition: Status -->
<ng-container cdkColumnDef="status">
<mat-header-cell *matHeaderCellDef>{{'DATASET-LISTING.COLUMNS.STATUS' | translate}}</mat-header-cell>
<mat-cell *matCellDef="let row"> {{row.status}} </mat-cell>
<mat-cell *matCellDef="let row"> {{row.status}}
</mat-cell>
</ng-container>
<!-- Column Definition: Description -->
@ -53,13 +54,11 @@
<mat-row *matRowDef="let row; columns: displayedColumns" (click)="rowClick(row.id)"></mat-row>
</mat-table>
<mat-paginator #paginator
[length]="dataSource?.totalCount"
[pageSizeOptions]="[10, 25, 100]">
<mat-paginator #paginator [length]="dataSource?.totalCount" [pageSizeOptions]="[10, 25, 100]">
</mat-paginator>
</mat-card>
<button mat-fab class="mat-fab-bottom-right" color="primary" [routerLink]=" ['./new'] ">
<mat-icon class="mat-24">add</mat-icon>
</button>
</div>
</div>

View File

@ -20,7 +20,7 @@ import { DatasetListingModel } from "../models/datasets/DatasetListingModel";
styleUrls: ['./dataset-listing.component.css'],
providers: [DatasetService]
})
export class DatasetListingComponent implements OnInit, AfterViewInit {
export class DatasetListingComponent implements OnInit {
@ViewChild(MatPaginator) _paginator: MatPaginator;
@ViewChild(MatSort) sort: MatSort;
@ -29,6 +29,11 @@ export class DatasetListingComponent implements OnInit, AfterViewInit {
dataSource: DatasetDataSource | null;
displayedColumns: String[] = ['label', 'reference', 'uri', 'status', 'description', 'created', 'actions'];
statuses = [
{value: '0', viewValue: 'Active'},
{value: '1', viewValue: 'Inactive'}
];
constructor(
private datasetService: DatasetService,
private router: Router,
@ -39,14 +44,9 @@ export class DatasetListingComponent implements OnInit, AfterViewInit {
}
ngOnInit() {
}
ngAfterViewInit() {
setTimeout(() => {
this.criteria.setRefreshCallback(() => this.refresh());
this.criteria.setCriteria(this.getDefaultCriteria());
});
this.criteria.setCriteria(this.getDefaultCriteria());
this.refresh();
this.criteria.setRefreshCallback(() => this.refresh());
}
refresh() {
@ -54,7 +54,7 @@ export class DatasetListingComponent implements OnInit, AfterViewInit {
}
rowClick(rowId: String) {
this.router.navigate(['/project/' + rowId]);
this.router.navigate(['/dataset/' + rowId]);
}
getDefaultCriteria(): DatasetCriteria {
@ -112,7 +112,7 @@ export class DatasetDataSource extends DataSource<DatasetListingModel> {
setTimeout(() => {
this.isLoadingResults = false;
});
return result.payload;
return result;
})
.map(result => {
if (!result) { return []; }

View File

@ -1,28 +1,28 @@
<div class="project-editor">
<form *ngIf="formGroup" (ngSubmit)="formSubmit()" [formGroup]="formGroup">
<mat-card>
<mat-card-title *ngIf="isNew">{{'DMP-EDITOR.TITLE.NEW' | translate}}</mat-card-title>
<mat-card-title *ngIf="!isNew">{{'DMP-EDITOR.TITLE.EDIT' | translate}} {{project.label}}</mat-card-title>
<mat-card-title *ngIf="isNew">{{'DATASET-EDITOR.TITLE.NEW' | translate}}</mat-card-title>
<mat-card-title *ngIf="!isNew">{{'DATASET-EDITOR.TITLE.EDIT' | translate}} {{dataset.label}}</mat-card-title>
<mat-card-content>
<mat-form-field>
<input matInput placeholder="{{'DMP-EDITOR.FIELDS.NAME' | translate}}" type="text" name="label" formControlName="label" required>
<input matInput placeholder="{{'DATASET-EDITOR.FIELDS.NAME' | translate}}" type="text" name="label" formControlName="label" required>
<mat-error *ngIf="formGroup.get('label').errors?.backendError">{{baseErrorModel.label}}</mat-error>
<mat-error *ngIf="formGroup.get('label').errors?.required">{{'GENERAL.VALIDATION.REQUIRED' | translate}}</mat-error>
</mat-form-field>
<!-- <mat-form-field>
<input matInput placeholder="{{'DMP-EDITOR.FIELDS.ABBREVIATION' | translate}}" type="text" name="abbreviation" formControlName="abbreviation"
<mat-form-field>
<input matInput placeholder="{{'DATASET-EDITOR.FIELDS.PROFILE' | translate}}" type="text" name="profile" formControlName="profile"
required>
<mat-error *ngIf="formGroup.get('abbreviation').errors?.backendError">{{baseErrorModel.abbreviation}}</mat-error>
<mat-error *ngIf="formGroup.get('abbreviation').errors?.required">{{'GENERAL.VALIDATION.REQUIRED' | translate}}</mat-error>
<mat-error *ngIf="formGroup.get('profile').errors?.backendError">{{baseErrorModel.profile}}</mat-error>
<mat-error *ngIf="formGroup.get('profile').errors?.required">{{'GENERAL.VALIDATION.REQUIRED' | translate}}</mat-error>
</mat-form-field>
<mat-form-field>
<input matInput placeholder="{{'DMP-EDITOR.FIELDS.URI' | translate}}" type="text" name="uri" formControlName="uri" required>
<input matInput placeholder="{{'DATASET-EDITOR.FIELDS.URI' | translate}}" type="text" name="uri" formControlName="uri" required>
<mat-error *ngIf="formGroup.get('uri').errors?.backendError">{{baseErrorModel.uri}}</mat-error>
<mat-error *ngIf="formGroup.get('uri').errors?.required">{{'GENERAL.VALIDATION.REQUIRED' | translate}}</mat-error>
</mat-form-field> -->
</mat-form-field>
<!-- <table class="input-table full-width">
<tr>
@ -50,14 +50,14 @@
</table> -->
<mat-form-field class="full-width">
<textarea matInput class="description-area" placeholder="{{'DMP-EDITOR.FIELDS.DESCRIPTION' | translate}}" formControlName="description"
<textarea matInput class="description-area" placeholder="{{'DATASET-EDITOR.FIELDS.DESCRIPTION' | translate}}" formControlName="description"
required></textarea>
<mat-error *ngIf="formGroup.get('description').errors?.backendError">{{errorModel.description}}</mat-error>
<mat-error *ngIf="formGroup.get('description').errors?.required">{{'GENERAL.VALIDATION.REQUIRED' | translate}}</mat-error>
</mat-form-field>
<td-chips color="accent" [items]="filteredOrganisations" formControlName="organisations" placeholder="{{'DMP-EDITOR.FIELDS.ORGANISATIONS' | translate}}"
(inputChange)="filterOrganisations($event)" requireMatch>
<td-chips color="accent" [items]="filtereddataRepositories" formControlName="dataRepositories" placeholder="{{'DATASET-EDITOR.FIELDS.DATAREPOSITORIES' | translate}}"
(inputChange)="filtereddataRepositories($event)" requireMatch>
<ng-template td-chip let-chip="chip">
<div class="tc-grey-100 bgc-teal-700" td-chip-avatar>{{chip.name.substring(0, 1).toUpperCase()}}</div>
{{chip.name}}
@ -70,8 +70,8 @@
<mat-progress-bar [style.height.px]="2" *ngIf="filteringOrganisationsAsync" mode="indeterminate"></mat-progress-bar>
</td-chips>
<td-chips color="accent" [items]="filteredResearchers" formControlName="researchers" placeholder="{{'DMP-EDITOR.FIELDS.RESEARCHERS' | translate}}"
(inputChange)="filterResearchers($event)" requireMatch>
<td-chips color="accent" [items]="filteredRegistries" formControlName="registries" placeholder="{{'DATASET-EDITOR.FIELDS.REGISTRIES' | translate}}"
(inputChange)="filteredRegistries($event)" requireMatch>
<ng-template td-chip let-chip="chip">
<div class="tc-grey-100 bgc-teal-700" td-chip-avatar>{{chip.name.substring(0, 1).toUpperCase()}}</div>
{{chip.name}}
@ -84,6 +84,20 @@
<mat-progress-bar [style.height.px]="2" *ngIf="filteringResearchersAsync" mode="indeterminate"></mat-progress-bar>
</td-chips>
<td-chips color="accent" [items]="filteredServices" formControlName="services" placeholder="{{'DATASET-EDITOR.FIELDS.SERVICES' | translate}}"
(inputChange)="filteredServices($event)" requireMatch>
<ng-template td-chip let-chip="chip">
<div class="tc-grey-100 bgc-teal-700" td-chip-avatar>{{chip.name.substring(0, 1).toUpperCase()}}</div>
{{chip.name}}
</ng-template>
<ng-template td-autocomplete-option let-option="option">
<div layout="row" layout-align="start center">
{{option.name}}
</div>
</ng-template>
<mat-progress-bar [style.height.px]="2" *ngIf="filteringResearchersAsync" mode="indeterminate"></mat-progress-bar>
</td-chips>
<div layout="row" class="full-width text-right" align="end">
<button mat-raised-button color="primary" (click)="cancel()" type="button">{{'DMP-EDITOR.ACTIONS.CANCEL' | translate}}</button>
<button mat-raised-button color="primary" type="submit">{{'DMP-EDITOR.ACTIONS.SAVE' | translate}}</button>

View File

@ -19,14 +19,14 @@ import { ExternalSourcesItemModel } from "../../models/external-sources/External
@Component({
selector: 'app-dataset-editor-component',
templateUrl: 'dataset-editor.component.html',
styleUrls: ['./dataset-editor.component.scss'],
styleUrls: ['./dataset-editor.component.css'],
providers: [DatasetService, ExternalSourcesService],
encapsulation: ViewEncapsulation.None
})
export class DatasetEditorComponent implements AfterViewInit {
isNew = true;
dataManagementPlan: DatasetModel;
dataset: DatasetModel;
formGroup: FormGroup = null;
filteringOrganisationsAsync: boolean = false;
@ -53,13 +53,13 @@ export class DatasetEditorComponent implements AfterViewInit {
this.isNew = false;
this.datasetService.getSingle(itemId).map(data => data as DatasetModel)
.subscribe(data => {
this.dataManagementPlan = new JsonSerializer<DatasetModel>().fromJSONObject(data, DatasetModel);
this.formGroup = this.dataManagementPlan.buildForm();
this.dataset = new JsonSerializer<DatasetModel>().fromJSONObject(data, DatasetModel);
this.formGroup = this.dataset.buildForm();
});
} else {
this.dataManagementPlan = new DatasetModel();
this.dataset = new DatasetModel();
setTimeout(() => {
this.formGroup = this.dataManagementPlan.buildForm();
this.formGroup = this.dataset.buildForm();
});
}
});
@ -88,7 +88,7 @@ export class DatasetEditorComponent implements AfterViewInit {
duration: 3000,
extraClasses: ['snackbar-success']
})
this.router.navigate(['/dataManagementPlans']);
this.router.navigate(['/datasets']);
}
onCallbackError(error: any) {
@ -98,12 +98,12 @@ export class DatasetEditorComponent implements AfterViewInit {
public setErrorModel(errorModel: BaseErrorModel) {
Object.keys(errorModel).forEach(item => {
(<any>this.dataManagementPlan.errorModel)[item] = (<any>errorModel)[item];
(<any>this.dataset.errorModel)[item] = (<any>errorModel)[item];
})
}
public cancel(): void {
this.router.navigate(['/dataManagementPlans']);
this.router.navigate(['/datasets']);
}
filterOrganisations(value: string): void {

View File

@ -1,6 +1,5 @@
import { BaseCriteria } from "../BaseCriteria";
export class DatasetCriteria extends BaseCriteria {
public Name: String;
public Status: Number;
public status: Number;
}

View File

@ -1,6 +1,5 @@
import { BaseCriteriaErrorModel } from "../BaseCriteriaErrorModel";
export class DatasetCriteriaErrorModel extends BaseCriteriaErrorModel{
public Name: String;
public Status: Number;
public status: Number;
}

View File

@ -30,7 +30,7 @@ export class DatasetService {
}
getSingle(id: string): Observable<DatasetModel> {
return this.http.get<DatasetModel>(this.actionUrl + id, { headers: this.headers });
return this.http.get<DatasetModel>(this.actionUrl +'getSingle/' + id, { headers: this.headers });
}
createDataset(datasetModel: DatasetModel): Observable<DatasetModel> {

View File

@ -17,16 +17,20 @@
</div> -->
<div class="col-sm-6 col-md-2">
<mat-form-field>
<input matInput placeholder=" {{'CRITERIA.PROJECTS.LIKE'| translate}}" name="datasetCriteriaName" [(ngModel)]="criteria.Name"
<input matInput placeholder=" {{'CRITERIA.PROJECTS.LIKE'| translate}}" name="datasetCriteriaName" [(ngModel)]="criteria.like"
(ngModelChange)="controlModified()">
<mat-error *ngIf="baseErrorModel?.name">{{baseErrorModel['Criteria.Name']}}</mat-error>
<mat-error *ngIf="baseErrorModel?.name">{{baseErrorModel['Criteria.like']}}</mat-error>
</mat-form-field>
</div>
<div class="col-sm-6 col-md-2">
<mat-form-field>
<input matInput placeholder=" {{'CRITERIA.DATA-SETS.STATUS'| translate}}" name="datasetCriteriastatus" [(ngModel)]="criteria.Status"
(ngModelChange)="controlModified()">
<mat-error *ngIf="baseErrorModel?.status">{{baseErrorModel['Criteria.Status']}}</mat-error>
<mat-select placeholder=" {{'CRITERIA.DATA-SETS.STATUS'| translate}}" name="datasetCriteriastatus" [(ngModel)]="criteria.status"
(ngModelChange)="controlModified()">
<mat-option *ngFor="let status of statuses" [value]="status.value">
{{status.viewValue}}
</mat-option>
</mat-select>
<mat-error *ngIf="baseErrorModel?.status">{{baseErrorModel['Criteria.status']}}</mat-error>
</mat-form-field>
</div>
</div>

View File

@ -21,6 +21,11 @@ export class DatasetCriteriaComponent extends BaseCriteriaComponent implements O
// public formStatus: ProjectStatus;
public criteria: DatasetCriteria= new DatasetCriteria();
statuses = [
{value: '0', viewValue: 'Active'},
{value: '1', viewValue: 'Inactive'}
];
constructor(
public language: TranslateService,
public formBuilder: FormBuilder

View File

@ -93,5 +93,25 @@
"PERIOD-TO": "End",
"STATUS": "Status"
}
},
"DATASET-EDITOR": {
"TITLE": {
"NEW": "New Data Management Plan",
"EDIT": "Edit"
},
"FIELDS": {
"NAME": "Name",
"DESCRIPTION": "Description",
"PROFILE": "Profile",
"URI": "Uri",
"DATAREPOSITORIES": "Data Repositories",
"REGISTRIES": "Registries",
"SERVICES": "Services"
},
"ACTIONS": {
"SAVE": "Save",
"CANCEL": "Cancel",
"DELETE": "Delete"
}
}
}