no message
This commit is contained in:
parent
5cc601b0da
commit
6ffa556aa7
|
@ -1,20 +0,0 @@
|
||||||
.mat-card {
|
|
||||||
overflow: auto;
|
|
||||||
padding: 0px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.mat-table {
|
|
||||||
margin: 24px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.mat-progress-bar {
|
|
||||||
position: absolute;
|
|
||||||
}
|
|
||||||
|
|
||||||
.mat-fab-bottom-right {
|
|
||||||
top: auto !important;
|
|
||||||
right: 20px !important;
|
|
||||||
bottom: 10px !important;
|
|
||||||
left: auto !important;
|
|
||||||
position: fixed !important;
|
|
||||||
}
|
|
|
@ -1,190 +1,39 @@
|
||||||
<div class="container-fluid">
|
<div class="container-fluid">
|
||||||
<h3>{{'DMP-LISTING.TITLE' | translate}}</h3>
|
<h3>{{'DMP-LISTING.TITLE' | translate}}</h3>
|
||||||
|
|
||||||
<app-dmp-criteria-component></app-dmp-criteria-component>
|
<app-dmp-criteria-component></app-dmp-criteria-component>
|
||||||
<mat-card class="mat-card">
|
<mat-card class="mat-card">
|
||||||
<mat-progress-bar *ngIf="dataSource?.isLoadingResults" mode="query"></mat-progress-bar>
|
<mat-progress-bar *ngIf="dataSource?.isLoadingResults" mode="query"></mat-progress-bar>
|
||||||
|
|
||||||
<mat-table [dataSource]="dataSource" matSort>
|
<mat-table [dataSource]="dataSource" matSort>
|
||||||
|
|
||||||
<!-- Column Definition: Name -->
|
<!-- Column Definition: Name -->
|
||||||
<ng-container cdkColumnDef="name">
|
<ng-container cdkColumnDef="name">
|
||||||
<mat-header-cell *matHeaderCellDef>{{'DMP-LISTING.COLUMNS.NAME' | translate}}</mat-header-cell>
|
<mat-header-cell *matHeaderCellDef>{{'DMP-LISTING.COLUMNS.NAME' | translate}}</mat-header-cell>
|
||||||
<mat-cell *matCellDef="let row">{{row.name}}</mat-cell>
|
<mat-cell *matCellDef="let row">{{row.name}}</mat-cell>
|
||||||
</ng-container>
|
</ng-container>
|
||||||
|
|
||||||
<!-- Column Definition: Αbbreviation -->
|
<!-- Column Definition: Project -->
|
||||||
<ng-container cdkColumnDef="abbreviation">
|
<ng-container cdkColumnDef="project">
|
||||||
<mat-header-cell *matHeaderCellDef>{{'DMP-LISTING.COLUMNS.ABBREVIATION' | translate}}</mat-header-cell>
|
<mat-header-cell *matHeaderCellDef>{{'DMP-LISTING.COLUMNS.PROJECT' | translate}}</mat-header-cell>
|
||||||
<mat-cell *matCellDef="let row"> {{row.abbreviation}} </mat-cell>
|
<mat-cell *matCellDef="let row"> {{row.abbreviation}} </mat-cell>
|
||||||
</ng-container>
|
</ng-container>
|
||||||
|
|
||||||
<!-- Column Definition: Start -->
|
<!-- Column Definition: Creation Time -->
|
||||||
<ng-container cdkColumnDef="start">
|
<ng-container cdkColumnDef="creationTime">
|
||||||
<mat-header-cell *matHeaderCellDef>{{'DMP-LISTING.COLUMNS.START' | translate}}</mat-header-cell>
|
<mat-header-cell *matHeaderCellDef>{{'DMP-LISTING.COLUMNS.CREATION-TIME' | translate}}</mat-header-cell>
|
||||||
<mat-cell *matCellDef="let row"> {{row.start}} </mat-cell>
|
<mat-cell *matCellDef="let row"></mat-cell>
|
||||||
</ng-container>
|
</ng-container>
|
||||||
|
|
||||||
<!-- Column Definition: End -->
|
<mat-header-row *matHeaderRowDef="displayedColumns"></mat-header-row>
|
||||||
<ng-container cdkColumnDef="end">
|
<mat-row *matRowDef="let row; columns: displayedColumns" (click)="rowClick(row.id)"></mat-row>
|
||||||
<mat-header-cell *matHeaderCellDef>{{'DMP-LISTING.COLUMNS.END' | translate}}</mat-header-cell>
|
|
||||||
<mat-cell *matCellDef="let row"> {{row.end}} </mat-cell>
|
|
||||||
</ng-container>
|
|
||||||
|
|
||||||
<!-- Column Definition: Submission Time -->
|
</mat-table>
|
||||||
<ng-container cdkColumnDef="actions">
|
<mat-paginator #paginator [length]="dataSource?.totalCount" [pageSizeOptions]="[10, 25, 100]">
|
||||||
<mat-header-cell *matHeaderCellDef>{{'DMP-LISTING.COLUMNS.ACTIONS' | translate}}</mat-header-cell>
|
</mat-paginator>
|
||||||
<mat-cell *matCellDef="let row"></mat-cell>
|
</mat-card>
|
||||||
</ng-container>
|
|
||||||
|
|
||||||
<mat-header-row *matHeaderRowDef="displayedColumns"></mat-header-row>
|
<button mat-fab class="mat-fab-bottom-right" color="primary" [routerLink]=" ['./new'] ">
|
||||||
<mat-row *matRowDef="let row; columns: displayedColumns" (click)="rowClick(row.id)"></mat-row>
|
<mat-icon class="mat-24">add</mat-icon>
|
||||||
|
</button>
|
||||||
</mat-table>
|
|
||||||
<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>
|
||||||
<!-- <meta name="google-signin-client_id" content="524432312250-vhgidft856v8qftsc81kls4c74v87d8o.apps.googleusercontent.com">
|
|
||||||
|
|
||||||
<table class="table table-striped" [mfData]="tableData | projectTableFilter : filterQuery : whoami?.id : onlyMyProjects"
|
|
||||||
#mf="mfDataTable" [mfRowsOnPage]="rowsOnPage" [(mfSortBy)]="sortBy" [(mfSortOrder)]="sortOrder">
|
|
||||||
<thead>
|
|
||||||
<tr>
|
|
||||||
<th colspan="1">
|
|
||||||
<input class="form-control" [(ngModel)]="filterQuery" placeholder='Filter' />
|
|
||||||
</th>
|
|
||||||
<th style="width:50px;">
|
|
||||||
<button class="btn btn-default" (click)="getProjects('false')">
|
|
||||||
<span class="glyphicon glyphicon-refresh"></span>
|
|
||||||
</button>
|
|
||||||
</th>
|
|
||||||
<th colspan="1">
|
|
||||||
<div class="checkbox">
|
|
||||||
<label><input type="checkbox" [(ngModel)]="onlyMyProjects" >Show only my projects</label>
|
|
||||||
</div>
|
|
||||||
</th>
|
|
||||||
</tr>
|
|
||||||
<tr>
|
|
||||||
<th [ngClass]="{true:'visible', false:'invisible'}[showIDs]">
|
|
||||||
<mfDefaultSorter by="id">ID</mfDefaultSorter>
|
|
||||||
</th>
|
|
||||||
<th>
|
|
||||||
<mfDefaultSorter by="label">Label</mfDefaultSorter>
|
|
||||||
</th>
|
|
||||||
<th>
|
|
||||||
<mfDefaultSorter by="abbreviation">Αbbreviation</mfDefaultSorter>
|
|
||||||
</th>
|
|
||||||
<th>
|
|
||||||
<mfDefaultSorter by="startdate">Start Date</mfDefaultSorter>
|
|
||||||
</th>
|
|
||||||
<th>
|
|
||||||
<mfDefaultSorter by="enddate">End Date</mfDefaultSorter>
|
|
||||||
</th>
|
|
||||||
<th>
|
|
||||||
<mfDefaultSorter by="status">Status</mfDefaultSorter>
|
|
||||||
</th>
|
|
||||||
<th>
|
|
||||||
<mfDefaultSorter by="description">Description</mfDefaultSorter>
|
|
||||||
</th>
|
|
||||||
<th>
|
|
||||||
<mfDefaultSorter>Actions </mfDefaultSorter>
|
|
||||||
</th>
|
|
||||||
|
|
||||||
</tr>
|
|
||||||
</thead>
|
|
||||||
<tbody>
|
|
||||||
<tr class="grayout-empty-table" *ngIf="!mf.data[0]">
|
|
||||||
<td colspan="7">No elements</td>
|
|
||||||
</tr>
|
|
||||||
|
|
||||||
<tr *ngFor="let project of mf.data" class="hover">
|
|
||||||
<td [ngClass]="{true:'visible', false:'invisible'}[showIDs]">{{project?.id}}</td>
|
|
||||||
<td>{{(project?.label?.length > 40) ? (project?.label | slice:0:40)+'...':(project?.label) }}</td>
|
|
||||||
<td>{{project?.abbreviation}}</td>
|
|
||||||
<td>{{project?.startdate | date:'medium' }}</td>
|
|
||||||
<td>{{project?.enddate | date:'medium'}}</td>
|
|
||||||
<td>{{project?.status | statusToString}}</td>
|
|
||||||
<td>{{(project?.description?.length > 40) ? (project?.description | slice:0:40)+'...':(project?.description) }}</td>
|
|
||||||
<td>
|
|
||||||
<a [ngClass]="{'not-active': whoami?.id!=project?.creationUser?.id }" class="editGridColumn" (click)="editRow(project, $event)">
|
|
||||||
<i class="fa fa-pencil fa-fw" data-toggle="tooltip" title="edit properties" id="editDMP" ></i>
|
|
||||||
</a>
|
|
||||||
</td>
|
|
||||||
|
|
||||||
</tr>
|
|
||||||
</tbody>
|
|
||||||
<tfoot>
|
|
||||||
<tr>
|
|
||||||
<td colspan="1">
|
|
||||||
<button type="button" class="btn btn-info btncustom" (click)="newProject(item)">New Project</button>
|
|
||||||
</td>
|
|
||||||
<td colspan="5">
|
|
||||||
|
|
||||||
<mfBootstrapPaginator [rowsOnPageSet]="[5,10,20]"></mfBootstrapPaginator>
|
|
||||||
</td>
|
|
||||||
</tr>
|
|
||||||
</tfoot>
|
|
||||||
</table>
|
|
||||||
|
|
||||||
|
|
||||||
<div class="modal fade" id="newEditProjectModal" tabindex="-1" role="dialog" aria-labelledby="newProjectModalLabel" aria-hidden="true">
|
|
||||||
<div class="modal-dialog" role="document">
|
|
||||||
<div class="modal-content">
|
|
||||||
<div class="modal-header">
|
|
||||||
<h5 class="modal-title" id="exampleModalLabel">Project</h5>
|
|
||||||
<button type="button" class="close" data-dismiss="modal" aria-label="Close">
|
|
||||||
<span aria-hidden="true">×</span>
|
|
||||||
</button>
|
|
||||||
</div>
|
|
||||||
<div class="modal-body">
|
|
||||||
<form #newProjectForm="ngForm" (ngSubmit)="SaveProject()" novalidate>
|
|
||||||
|
|
||||||
<label for="label-name" class="form-control-label">Label:</label>
|
|
||||||
<input type="text" class="form-control" id="label-name" [(ngModel)]= "project.label" name = "label" required>
|
|
||||||
<div class="form-group">
|
|
||||||
<label for="abbreviation-text" class="form-control-label">Abbreviation:</label>
|
|
||||||
<input class="form-control" id="abbreviation-text" [(ngModel)]= "project.abbreviation" name = "abbreviation">
|
|
||||||
</div>
|
|
||||||
<div class="form-group">
|
|
||||||
<label for="reference-text" class="form-control-label">Reference:</label>
|
|
||||||
<input class="form-control" id="reference-text" [(ngModel)]= "project.reference" name = "reference">
|
|
||||||
</div>
|
|
||||||
<div class="form-group">
|
|
||||||
<label for="uri-text" class="form-control-label">Uri:</label>
|
|
||||||
<input class="form-control" id="uri-text" [(ngModel)]= "project.uri" name = "uri">
|
|
||||||
</div>
|
|
||||||
<div class="form-group">
|
|
||||||
<label for="start-date" class="form-control-label">Start Date:</label>
|
|
||||||
<input class="form-control" type='date' class="form-control" [(ngModel)]= "project.startdate" id='start-date' name = "startdate" required/>
|
|
||||||
</div>
|
|
||||||
<div class="form-group">
|
|
||||||
<label for="end-date" class="form-control-label">End Date:</label>
|
|
||||||
<input class="form-control" type='date' class="form-control" [(ngModel)]= "project.enddate" id='end-date' name = "enddate" required/>
|
|
||||||
</div>
|
|
||||||
<div class="form-group">
|
|
||||||
<label for="status-name" class="col-form-label">Status:</label>
|
|
||||||
<select class="form-control" id="statusid" [(ngModel)]="project.status" name="statusDropDown">
|
|
||||||
<option *ngFor="let opt of statusDropDown.options" [value]="opt.key">{{opt.value}}</option>
|
|
||||||
</select>
|
|
||||||
</div>
|
|
||||||
<div class="form-group">
|
|
||||||
<label for="code-name" class="form-control-label">Description:</label>
|
|
||||||
<textarea rows="3" class="form-control" name="desc" id="description" [(ngModel)]= "project.description"> </textarea>
|
|
||||||
</div>
|
|
||||||
</form>
|
|
||||||
</div>
|
|
||||||
<div class="modal-footer">
|
|
||||||
<button type="button" class="btn btn-secondary" data-dismiss="modal">Close</button>
|
|
||||||
<button type="submit" class="btn btn-primary" [disabled]="!newProjectForm.form.valid" (click)="SaveProject();">Save project</button>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
-->
|
|
||||||
|
|
|
@ -0,0 +1,23 @@
|
||||||
|
.mat-table {
|
||||||
|
margin: 24px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.mat-progress-bar {
|
||||||
|
position: absolute;
|
||||||
|
}
|
||||||
|
|
||||||
|
.mat-fab-bottom-right {
|
||||||
|
top: auto !important;
|
||||||
|
right: 20px !important;
|
||||||
|
bottom: 10px !important;
|
||||||
|
left: auto !important;
|
||||||
|
position: fixed !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
.full-width {
|
||||||
|
width: 100%;
|
||||||
|
}
|
||||||
|
|
||||||
|
.mat-card {
|
||||||
|
margin: 16px 0;
|
||||||
|
}
|
|
@ -16,20 +16,20 @@ import { DataManagementPlanListingModel } from "../models/data-managemnt-plans/D
|
||||||
@Component({
|
@Component({
|
||||||
selector: 'app-dmp-listing-component',
|
selector: 'app-dmp-listing-component',
|
||||||
templateUrl: 'dmp-listing.component.html',
|
templateUrl: 'dmp-listing.component.html',
|
||||||
styleUrls: ['./dmp-listing.component.css'],
|
styleUrls: ['./dmp-listing.component.scss'],
|
||||||
providers: [DataManagementPlanService]
|
providers: [DataManagementPlanService]
|
||||||
})
|
})
|
||||||
export class DataManagementPlanListingComponent implements OnInit, AfterViewInit {
|
export class DataManagementPlanListingComponent implements OnInit {
|
||||||
|
|
||||||
@ViewChild(MatPaginator) _paginator: MatPaginator;
|
@ViewChild(MatPaginator) _paginator: MatPaginator;
|
||||||
@ViewChild(MatSort) sort: MatSort;
|
@ViewChild(MatSort) sort: MatSort;
|
||||||
@ViewChild(DataManagementPlanCriteriaComponent) criteria: DataManagementPlanCriteriaComponent;
|
@ViewChild(DataManagementPlanCriteriaComponent) criteria: DataManagementPlanCriteriaComponent;
|
||||||
|
|
||||||
dataSource: DataManagementPlanDataSource | null;
|
dataSource: DataManagementPlanDataSource | null;
|
||||||
displayedColumns: String[] = ['name', 'abbreviation', 'start', 'end'];
|
displayedColumns: String[] = ['name', 'project', 'creationTime'];
|
||||||
|
|
||||||
constructor(
|
constructor(
|
||||||
private projectService: DataManagementPlanService,
|
private dataManagementPlanService: DataManagementPlanService,
|
||||||
private router: Router,
|
private router: Router,
|
||||||
private languageService: TranslateService,
|
private languageService: TranslateService,
|
||||||
public snackBar: MatSnackBar,
|
public snackBar: MatSnackBar,
|
||||||
|
@ -38,15 +38,13 @@ export class DataManagementPlanListingComponent implements OnInit, AfterViewInit
|
||||||
}
|
}
|
||||||
|
|
||||||
ngOnInit() {
|
ngOnInit() {
|
||||||
|
this.criteria.setCriteria(this.getDefaultCriteria());
|
||||||
}
|
this.refresh();
|
||||||
|
|
||||||
ngAfterViewInit() {
|
|
||||||
this.criteria.setRefreshCallback(() => this.refresh());
|
this.criteria.setRefreshCallback(() => this.refresh());
|
||||||
}
|
}
|
||||||
|
|
||||||
refresh() {
|
refresh() {
|
||||||
this.dataSource = new DataManagementPlanDataSource(this.projectService, this._paginator, this.sort, this.languageService, this.snackBar, this.criteria, );
|
this.dataSource = new DataManagementPlanDataSource(this.dataManagementPlanService, this._paginator, this.sort, this.languageService, this.snackBar, this.criteria, );
|
||||||
}
|
}
|
||||||
|
|
||||||
rowClick(rowId: String) {
|
rowClick(rowId: String) {
|
||||||
|
|
|
@ -11,44 +11,6 @@
|
||||||
<mat-error *ngIf="formGroup.get('label').errors?.required">{{'GENERAL.VALIDATION.REQUIRED' | translate}}</mat-error>
|
<mat-error *ngIf="formGroup.get('label').errors?.required">{{'GENERAL.VALIDATION.REQUIRED' | translate}}</mat-error>
|
||||||
</mat-form-field>
|
</mat-form-field>
|
||||||
|
|
||||||
<!-- <mat-form-field>
|
|
||||||
<input matInput placeholder="{{'DMP-EDITOR.FIELDS.ABBREVIATION' | translate}}" type="text" name="abbreviation" formControlName="abbreviation"
|
|
||||||
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-form-field>
|
|
||||||
|
|
||||||
<mat-form-field>
|
|
||||||
<input matInput placeholder="{{'DMP-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> -->
|
|
||||||
|
|
||||||
<!-- <table class="input-table full-width">
|
|
||||||
<tr>
|
|
||||||
<td>
|
|
||||||
<mat-form-field>
|
|
||||||
<input matInput (focus)="startDate.open()" (click)="startDate.open()" placeholder="{{'DMP-EDITOR.FIELDS.START' | translate}}"
|
|
||||||
class="table-input" [matDatepicker]="startDate" formControlName="startDate" required>
|
|
||||||
<mat-datepicker-toggle matSuffix [for]="startDate"></mat-datepicker-toggle>
|
|
||||||
<mat-datepicker #startDate></mat-datepicker>
|
|
||||||
<mat-error *ngIf="formGroup.get('startDate').errors?.backendError">{{baseErrorModel.startDate}}</mat-error>
|
|
||||||
<mat-error *ngIf="formGroup.get('startDate').errors?.required">{{'GENERAL.VALIDATION.REQUIRED' | translate}}</mat-error>
|
|
||||||
</mat-form-field>
|
|
||||||
</td>
|
|
||||||
<td>
|
|
||||||
<mat-form-field>
|
|
||||||
<input matInput (focus)="endDate.open()" (click)="endDate.open()" placeholder="{{'DMP-EDITOR.FIELDS.END' | translate}}"
|
|
||||||
class="table-input" [matDatepicker]="endDate" formControlName="endDate" required>
|
|
||||||
<mat-datepicker-toggle matSuffix [for]="endDate"></mat-datepicker-toggle>
|
|
||||||
<mat-datepicker #endDate></mat-datepicker>
|
|
||||||
<mat-error *ngIf="formGroup.get('endDate').errors?.backendError">{{baseErrorModel.endDate}}</mat-error>
|
|
||||||
<mat-error *ngIf="formGroup.get('endDate').errors?.required">{{'GENERAL.VALIDATION.REQUIRED' | translate}}</mat-error>
|
|
||||||
</mat-form-field>
|
|
||||||
</td>
|
|
||||||
</tr>
|
|
||||||
</table> -->
|
|
||||||
|
|
||||||
<mat-form-field class="full-width">
|
<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="{{'DMP-EDITOR.FIELDS.DESCRIPTION' | translate}}" formControlName="description"
|
||||||
required></textarea>
|
required></textarea>
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
import { BaseCriteria } from "../BaseCriteria";
|
import { BaseCriteria } from "../BaseCriteria";
|
||||||
|
import { ProjectModel } from "../../projects/ProjectModel";
|
||||||
|
|
||||||
export class DataManagementPlanCriteria extends BaseCriteria {
|
export class DataManagementPlanCriteria extends BaseCriteria {
|
||||||
public PeriodStart: Date;
|
public projects: ProjectModel[] = [];
|
||||||
public PeriodEnd: Date;
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,6 +1,5 @@
|
||||||
import { BaseCriteriaErrorModel } from "../BaseCriteriaErrorModel";
|
import { BaseCriteriaErrorModel } from "../BaseCriteriaErrorModel";
|
||||||
|
|
||||||
export class DataManagementPlanCriteriaErrorModel extends BaseCriteriaErrorModel{
|
export class DataManagementPlanCriteriaErrorModel extends BaseCriteriaErrorModel{
|
||||||
public PeriodStart: String;
|
|
||||||
public PeriodEnd: String;
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -5,6 +5,10 @@ import { BackendErrorValidator } from "../../utilities/validators/BackendErrorVa
|
||||||
import { BaseErrorModel } from "../error/BaseErrorModel";
|
import { BaseErrorModel } from "../error/BaseErrorModel";
|
||||||
import { AutoCompleteItem } from "../../shared/components/autocomplete/AutoCompleteItem";
|
import { AutoCompleteItem } from "../../shared/components/autocomplete/AutoCompleteItem";
|
||||||
import { ExternalSourcesItemModel } from "../external-sources/ExternalSourcesItemModel";
|
import { ExternalSourcesItemModel } from "../external-sources/ExternalSourcesItemModel";
|
||||||
|
import { ProjectModel } from "../projects/ProjectModel";
|
||||||
|
import { OrganisationModel } from "../organisation/OrganisationModel";
|
||||||
|
import { ResearcherModel } from "../researcher/ResearcherModel";
|
||||||
|
import { JsonSerializer } from "../../utilities/JsonSerializer";
|
||||||
|
|
||||||
export class DataManagementPlanModel implements Serializable<DataManagementPlanModel> {
|
export class DataManagementPlanModel implements Serializable<DataManagementPlanModel> {
|
||||||
public id: String;
|
public id: String;
|
||||||
|
@ -13,9 +17,9 @@ export class DataManagementPlanModel implements Serializable<DataManagementPlanM
|
||||||
public version: number;
|
public version: number;
|
||||||
public status: String;
|
public status: String;
|
||||||
public description: String;
|
public description: String;
|
||||||
public selectedProject: AutoCompleteItem;
|
public project: ProjectModel;
|
||||||
public organisations: ExternalSourcesItemModel[] = [];
|
public organisations: OrganisationModel[] = [];
|
||||||
public researchers: ExternalSourcesItemModel[] = [];
|
public researchers: ResearcherModel[] = [];
|
||||||
|
|
||||||
public errorModel: BaseErrorModel = new BaseErrorModel();
|
public errorModel: BaseErrorModel = new BaseErrorModel();
|
||||||
|
|
||||||
|
@ -26,6 +30,9 @@ export class DataManagementPlanModel implements Serializable<DataManagementPlanM
|
||||||
this.version = item.version;
|
this.version = item.version;
|
||||||
this.status = item.status;
|
this.status = item.status;
|
||||||
this.description = item.description;
|
this.description = item.description;
|
||||||
|
this.project = new JsonSerializer<ProjectModel>().fromJSONObject(item.project, ProjectModel);
|
||||||
|
this.organisations = new JsonSerializer<OrganisationModel>().fromJSONArray(item.organisations, OrganisationModel);
|
||||||
|
this.researchers = new JsonSerializer<ResearcherModel>().fromJSONArray(item.researchers, ResearcherModel);
|
||||||
|
|
||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
|
@ -39,6 +46,7 @@ export class DataManagementPlanModel implements Serializable<DataManagementPlanM
|
||||||
version: [{ value: this.version, disabled: disabled }, context.getValidation('version').validators],
|
version: [{ value: this.version, disabled: disabled }, context.getValidation('version').validators],
|
||||||
status: [{ value: this.status, disabled: disabled }, context.getValidation('status').validators],
|
status: [{ value: this.status, disabled: disabled }, context.getValidation('status').validators],
|
||||||
description: [{ value: this.description, disabled: disabled }, context.getValidation('description').validators],
|
description: [{ value: this.description, disabled: disabled }, context.getValidation('description').validators],
|
||||||
|
project: [{ value: this.project, disabled: disabled }, context.getValidation('project').validators],
|
||||||
organisations: [{ value: this.organisations, disabled: disabled }, context.getValidation('description').validators],
|
organisations: [{ value: this.organisations, disabled: disabled }, context.getValidation('description').validators],
|
||||||
researchers: [{ value: this.researchers, disabled: disabled }, context.getValidation('researchers').validators],
|
researchers: [{ value: this.researchers, disabled: disabled }, context.getValidation('researchers').validators],
|
||||||
});
|
});
|
||||||
|
@ -53,6 +61,7 @@ export class DataManagementPlanModel implements Serializable<DataManagementPlanM
|
||||||
baseContext.validation.push({ key: 'version', validators: [Validators.required, BackendErrorValidator(this.errorModel, 'version')] });
|
baseContext.validation.push({ key: 'version', validators: [Validators.required, BackendErrorValidator(this.errorModel, 'version')] });
|
||||||
baseContext.validation.push({ key: 'status', validators: [Validators.required, BackendErrorValidator(this.errorModel, 'status')] });
|
baseContext.validation.push({ key: 'status', validators: [Validators.required, BackendErrorValidator(this.errorModel, 'status')] });
|
||||||
baseContext.validation.push({ key: 'description', validators: [Validators.required, BackendErrorValidator(this.errorModel, 'description')] });
|
baseContext.validation.push({ key: 'description', validators: [Validators.required, BackendErrorValidator(this.errorModel, 'description')] });
|
||||||
|
baseContext.validation.push({ key: 'project', validators: [Validators.required, BackendErrorValidator(this.errorModel, 'project')] });
|
||||||
baseContext.validation.push({ key: 'organisations', validators: [Validators.required, BackendErrorValidator(this.errorModel, 'organisations')] });
|
baseContext.validation.push({ key: 'organisations', validators: [Validators.required, BackendErrorValidator(this.errorModel, 'organisations')] });
|
||||||
baseContext.validation.push({ key: 'researchers', validators: [Validators.required, BackendErrorValidator(this.errorModel, 'researchers')] });
|
baseContext.validation.push({ key: 'researchers', validators: [Validators.required, BackendErrorValidator(this.errorModel, 'researchers')] });
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,20 @@
|
||||||
|
import { Serializable } from "../Serializable";
|
||||||
|
|
||||||
|
|
||||||
|
export class OrganisationModel implements Serializable<OrganisationModel> {
|
||||||
|
public id: String;
|
||||||
|
public label: String;
|
||||||
|
public abbreviation: String;
|
||||||
|
public reference: String;
|
||||||
|
public uri: String;
|
||||||
|
|
||||||
|
fromJSONObject(item: any): OrganisationModel {
|
||||||
|
this.id = item.id;
|
||||||
|
this.label = item.label;
|
||||||
|
this.abbreviation = item.abbreviation;
|
||||||
|
this.reference = item.reference;
|
||||||
|
this.uri = item.uri;
|
||||||
|
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,17 @@
|
||||||
|
import { Serializable } from "../Serializable";
|
||||||
|
|
||||||
|
export class ResearcherModel implements Serializable<ResearcherModel> {
|
||||||
|
public id: String;
|
||||||
|
public label: String;
|
||||||
|
public uri: String;
|
||||||
|
public email: String;
|
||||||
|
|
||||||
|
fromJSONObject(item: any): ResearcherModel {
|
||||||
|
this.id = item.id;
|
||||||
|
this.label = item.label;
|
||||||
|
this.email = item.email;
|
||||||
|
this.uri = item.uri;
|
||||||
|
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
}
|
|
@ -45,7 +45,7 @@ export class ProjectListingComponent implements OnInit {
|
||||||
}
|
}
|
||||||
|
|
||||||
refresh() {
|
refresh() {
|
||||||
this.dataSource = new ProjectDataSource(this.projectService, this._paginator, this.sort, this.languageService, this.snackBar, this.criteria );
|
this.dataSource = new ProjectDataSource(this.projectService, this._paginator, this.sort, this.languageService, this.snackBar, this.criteria);
|
||||||
}
|
}
|
||||||
|
|
||||||
rowClick(rowId: String) {
|
rowClick(rowId: String) {
|
||||||
|
@ -56,19 +56,6 @@ export class ProjectListingComponent implements OnInit {
|
||||||
const defaultCriteria = new ProjectCriteria();
|
const defaultCriteria = new ProjectCriteria();
|
||||||
return defaultCriteria;
|
return defaultCriteria;
|
||||||
}
|
}
|
||||||
|
|
||||||
// canShowOwner(): boolean {
|
|
||||||
// const principal: Principal = this.authentication.current();
|
|
||||||
// if (principal) {
|
|
||||||
// const principalRoles = principal.appRoles;
|
|
||||||
// for (let i = 0; i < principalRoles.length; i++) {
|
|
||||||
// if (principalRoles[i] === Principal.AppRole.Admin || principalRoles[i] === Principal.AppRole.BudgetManager) {
|
|
||||||
// return true;
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
// return false;
|
|
||||||
// }
|
|
||||||
}
|
}
|
||||||
|
|
||||||
export class ProjectDataSource extends DataSource<ProjectListingModel> {
|
export class ProjectDataSource extends DataSource<ProjectListingModel> {
|
||||||
|
@ -139,154 +126,3 @@ export class ProjectDataSource extends DataSource<ProjectListingModel> {
|
||||||
// No-op
|
// No-op
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
// export class ProjectListingComponent implements OnInit{
|
|
||||||
|
|
||||||
// // Start ALTERNATIVE
|
|
||||||
// //whole dmp data model
|
|
||||||
// tableData : any[] = new Array();
|
|
||||||
|
|
||||||
// //organisation editor data model
|
|
||||||
// editingOrganisation: any = {};
|
|
||||||
// organisationEditorForm : any;
|
|
||||||
|
|
||||||
// //required by the table
|
|
||||||
// public filterQuery = "";
|
|
||||||
// public rowsOnPage = 10;
|
|
||||||
// public sortBy = "label";
|
|
||||||
// public sortOrder = "asc";
|
|
||||||
|
|
||||||
|
|
||||||
// // for tableIds
|
|
||||||
// showIDs : boolean = false;
|
|
||||||
|
|
||||||
// statusDropDown: DropdownField;
|
|
||||||
|
|
||||||
// project: any;
|
|
||||||
|
|
||||||
// whoami: any;
|
|
||||||
// onlyMyProjects : boolean = false;
|
|
||||||
|
|
||||||
// options: DatepickerOptions = {
|
|
||||||
// minYear: 1900,
|
|
||||||
// maxYear: 2050,
|
|
||||||
// displayFormat: 'MMM D[,] YYYY',
|
|
||||||
// barTitleFormat: 'MMMM YYYY',
|
|
||||||
// firstCalendarDay: 0 // 0 - Sunday, 1 - Monday
|
|
||||||
// };
|
|
||||||
|
|
||||||
// //breadcrumbHome: MenuItem = {icon: 'fa fa-home'};
|
|
||||||
// breadcrumbData: MenuItem[] = new Array<MenuItem>();
|
|
||||||
|
|
||||||
// constructor(
|
|
||||||
// private serverService: ServerService,
|
|
||||||
// private route: ActivatedRoute,
|
|
||||||
// private router: Router) {
|
|
||||||
// this.statusDropDown = new DropdownField();
|
|
||||||
// this.statusDropDown.options= [{key:'0', value:"Active"},{key:'1', value:"Inactive"}]
|
|
||||||
// this.project = this.getEmptyProject();
|
|
||||||
// }
|
|
||||||
|
|
||||||
// ngAfterViewInit() {
|
|
||||||
|
|
||||||
// }
|
|
||||||
|
|
||||||
// getEmptyProject(){
|
|
||||||
// return {
|
|
||||||
// label: '',
|
|
||||||
// abbreviation:'',
|
|
||||||
// reference:'',
|
|
||||||
// uri:'',
|
|
||||||
// description:'',
|
|
||||||
// enddate:'',
|
|
||||||
// startdate:''
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
|
|
||||||
|
|
||||||
// ngOnInit() {
|
|
||||||
|
|
||||||
// this.getProjects();
|
|
||||||
|
|
||||||
// this.serverService.whoami().subscribe(
|
|
||||||
// response => {
|
|
||||||
// this.whoami = response;
|
|
||||||
// console.log(this.whoami)
|
|
||||||
// },
|
|
||||||
// err => {
|
|
||||||
// simple_notifier("danger",null,"Could not retrieve user config");
|
|
||||||
// }
|
|
||||||
// );
|
|
||||||
|
|
||||||
// }
|
|
||||||
|
|
||||||
|
|
||||||
// getProjects(muted? : boolean){
|
|
||||||
// //this.serverService.getProjectsOfUser().subscribe(
|
|
||||||
// this.serverService.getAllProjects().subscribe(
|
|
||||||
// response => {
|
|
||||||
// this.tableData = response;
|
|
||||||
// if(muted && muted!=true)
|
|
||||||
// simple_notifier("success",null,"Updated projects table");
|
|
||||||
// },
|
|
||||||
// err => {
|
|
||||||
// simple_notifier("danger",null,"Could not retrieve projects");
|
|
||||||
// }
|
|
||||||
// );
|
|
||||||
// }
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
// showDatasets(){ //dmpId, event
|
|
||||||
// //this.dataSetVisibe = true;
|
|
||||||
|
|
||||||
// }
|
|
||||||
|
|
||||||
|
|
||||||
// SaveProject(){
|
|
||||||
|
|
||||||
// let action : Observable<any>;
|
|
||||||
|
|
||||||
// if(this.project.id == null) //means it's a new one
|
|
||||||
// action = this.serverService.createProject(this.project);
|
|
||||||
// else
|
|
||||||
// action = this.serverService.updateProject(this.project);
|
|
||||||
// action.subscribe(
|
|
||||||
// response =>{
|
|
||||||
// this.getProjects();
|
|
||||||
// simple_notifier("success",null, (this.project.id == null) ? "Created" : "Updated" +" projects table");
|
|
||||||
// },
|
|
||||||
// error => {
|
|
||||||
// simple_notifier("danger",null, "Could not "+ (this.project.id == null) ? "create" : "update" + " projects table");
|
|
||||||
// }
|
|
||||||
// );
|
|
||||||
|
|
||||||
// $("#newEditProjectModal").modal("hide");
|
|
||||||
// }
|
|
||||||
|
|
||||||
// newProject(){
|
|
||||||
// this.project = this.getEmptyProject();
|
|
||||||
// $("#newEditProjectModal").modal("show");
|
|
||||||
|
|
||||||
// }
|
|
||||||
|
|
||||||
// editRow(item, event){
|
|
||||||
// this.project = Object.assign({}, item); //this will have id - that defines whether it's an update or not
|
|
||||||
// this.project.creationUser = {"id":this.project.creationUser.id};
|
|
||||||
// $("#newEditProjectModal").modal("show");
|
|
||||||
|
|
||||||
// return false;
|
|
||||||
// }
|
|
||||||
|
|
||||||
|
|
||||||
// /*
|
|
||||||
// markProjectForDelete(project){
|
|
||||||
// this.project = project;
|
|
||||||
// }
|
|
||||||
|
|
||||||
// deleteProject(confirmation){
|
|
||||||
// if(confirmation==true)
|
|
||||||
// this.deleteRow(this.project);
|
|
||||||
// }
|
|
||||||
// */
|
|
||||||
|
|
||||||
// }
|
|
||||||
|
|
|
@ -30,10 +30,14 @@ export class DataManagementPlanService {
|
||||||
}
|
}
|
||||||
|
|
||||||
getSingle(id: string): Observable<DataManagementPlanModel> {
|
getSingle(id: string): Observable<DataManagementPlanModel> {
|
||||||
return this.http.get<DataManagementPlanModel>(this.actionUrl + id, { headers: this.headers });
|
return this.http.get<DataManagementPlanModel>(this.actionUrl + 'getSingle' + id, { headers: this.headers });
|
||||||
}
|
}
|
||||||
|
|
||||||
createDataManagementPlan(dataManagementPlanModel: DataManagementPlanModel): Observable<DataManagementPlanModel> {
|
createDataManagementPlan(dataManagementPlanModel: DataManagementPlanModel): Observable<DataManagementPlanModel> {
|
||||||
return this.http.post<DataManagementPlanModel>(this.actionUrl + 'add', dataManagementPlanModel, { headers: this.headers });
|
return this.http.post<DataManagementPlanModel>(this.actionUrl + 'createOrUpdate', dataManagementPlanModel, { headers: this.headers });
|
||||||
|
}
|
||||||
|
|
||||||
|
inactivate(id: String): Observable<DataManagementPlanModel> {
|
||||||
|
return this.http.delete<DataManagementPlanModel>(this.actionUrl + 'inactivate' + id, { headers: this.headers });
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -39,6 +39,6 @@ export class ProjectService {
|
||||||
}
|
}
|
||||||
|
|
||||||
inactivate(id: String): Observable<ProjectModel> {
|
inactivate(id: String): Observable<ProjectModel> {
|
||||||
return this.http.delete<ProjectModel>(this.actionUrl + 'inactivate' + id, { headers: this.headers });
|
return this.http.delete<ProjectModel>(this.actionUrl + 'inactivate/' + id, { headers: this.headers });
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,34 +1,28 @@
|
||||||
<form class="form-criteria">
|
<div class="dmp-criteria">
|
||||||
<mat-card class="mat-card">
|
<mat-card class="mat-card">
|
||||||
<div class="row">
|
<div class="row">
|
||||||
<div class="col-sm-6 col-md-2">
|
<div class="col-md-6">
|
||||||
<mat-form-field>
|
<mat-form-field>
|
||||||
<input matInput
|
<input matInput placeholder=" {{'CRITERIA.DMP.LIKE'| translate}}" name="projectCriteriaLike" [(ngModel)]="criteria.like"
|
||||||
(focus)="periodStartPicker.open()"
|
(ngModelChange)="controlModified()">
|
||||||
(click)="periodStartPicker.open()"
|
<mat-error *ngIf="baseErrorModel?.like">{{baseErrorModel['Criteria.like']}}</mat-error>
|
||||||
placeholder=" {{'CRITERIA.FORMS.PERIOD-FROM'| translate}}"
|
|
||||||
[matDatepicker]="periodStartPicker"
|
|
||||||
name="projectCriteriaPeriodStart"
|
|
||||||
[ngModel]="this.criteria.PeriodStart" (ngModelChange)="controlModified()">
|
|
||||||
<mat-error *ngIf="getFormControl('periodStart').errors?.backendError">{{baseErrorModel['Criteria.PeriodStart']}}</mat-error>
|
|
||||||
<mat-datepicker-toggle matSuffix [for]="periodStartPicker"></mat-datepicker-toggle>
|
|
||||||
<mat-datepicker #periodStartPicker></mat-datepicker>
|
|
||||||
</mat-form-field>
|
</mat-form-field>
|
||||||
</div>
|
</div>
|
||||||
<div class="col-sm-6 col-md-2">
|
<div class="col-md-6">
|
||||||
<mat-form-field>
|
<td-chips color="accent" [items]="filteredProjects" [(ngModel)]="criteria.projects" placeholder="{{'CRITERIA.DMP.PROJECTS' | translate}}"
|
||||||
<input matInput
|
(inputChange)="filterProjects($event)" requireMatch>
|
||||||
(focus)="periodEndPicker.open()"
|
<ng-template td-chip let-chip="chip">
|
||||||
(click)="periodEndPicker.open()"
|
<div class="tc-grey-100 bgc-teal-700" td-chip-avatar>{{chip.name.substring(0, 1).toUpperCase()}}</div>
|
||||||
name="projectCriteriaPeriodEnd"
|
{{chip.name}}
|
||||||
placeholder=" {{'CRITERIA.FORMS.PERIOD-TO'| translate}}"
|
</ng-template>
|
||||||
[matDatepicker]="periodEndPicker"
|
<ng-template td-autocomplete-option let-option="option">
|
||||||
[ngModel]="this.criteria.PeriodEnd" (ngModelChange)="controlModified()">
|
<div layout="row" layout-align="start center">
|
||||||
<mat-error *ngIf="getFormControl('periodEnd').errors?.backendError">{{baseErrorModel['Criteria.PeriodEnd']}}</mat-error>
|
{{option.name}}
|
||||||
<mat-datepicker-toggle matSuffix [for]="periodEndPicker"></mat-datepicker-toggle>
|
</div>
|
||||||
<mat-datepicker #periodEndPicker></mat-datepicker>
|
</ng-template>
|
||||||
</mat-form-field>
|
<mat-progress-bar [style.height.px]="2" *ngIf="filteringProjectsAsync" mode="indeterminate"></mat-progress-bar>
|
||||||
|
</td-chips>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</mat-card>
|
</mat-card>
|
||||||
</form>
|
</div>
|
|
@ -1,4 +1,4 @@
|
||||||
.form-criteria {
|
.dmp-criteria {
|
||||||
mat-form-field {
|
mat-form-field {
|
||||||
padding-bottom: 5px;
|
padding-bottom: 5px;
|
||||||
width: 100%;
|
width: 100%;
|
||||||
|
|
|
@ -6,6 +6,7 @@ import { ValidationContext, Validation } from '../../../../utilities/validators/
|
||||||
import { BackendErrorValidator } from '../../../../utilities/validators/BackendErrorValidator';
|
import { BackendErrorValidator } from '../../../../utilities/validators/BackendErrorValidator';
|
||||||
import { DataManagementPlanCriteria } from '../../../../models/criteria/data-management-plan/DataManagementPlanCriteria';
|
import { DataManagementPlanCriteria } from '../../../../models/criteria/data-management-plan/DataManagementPlanCriteria';
|
||||||
import { DataManagementPlanCriteriaErrorModel } from '../../../../models/criteria/data-management-plan/DataManagementPlanCriteriaErrorModel';
|
import { DataManagementPlanCriteriaErrorModel } from '../../../../models/criteria/data-management-plan/DataManagementPlanCriteriaErrorModel';
|
||||||
|
import { ProjectModel } from '../../../../models/projects/ProjectModel';
|
||||||
|
|
||||||
@Component({
|
@Component({
|
||||||
selector: 'app-dmp-criteria-component',
|
selector: 'app-dmp-criteria-component',
|
||||||
|
@ -17,9 +18,9 @@ import { DataManagementPlanCriteriaErrorModel } from '../../../../models/criteri
|
||||||
|
|
||||||
export class DataManagementPlanCriteriaComponent extends BaseCriteriaComponent implements OnInit {
|
export class DataManagementPlanCriteriaComponent extends BaseCriteriaComponent implements OnInit {
|
||||||
|
|
||||||
// public form: DataManagementPlanType;
|
|
||||||
// public formStatus: DataManagementPlanStatus;
|
|
||||||
public criteria: DataManagementPlanCriteria = new DataManagementPlanCriteria();
|
public criteria: DataManagementPlanCriteria = new DataManagementPlanCriteria();
|
||||||
|
filteringProjectsAsync: boolean = false;
|
||||||
|
filteredProjects: ProjectModel[];
|
||||||
|
|
||||||
constructor(
|
constructor(
|
||||||
public language: TranslateService,
|
public language: TranslateService,
|
||||||
|
@ -36,31 +37,4 @@ export class DataManagementPlanCriteriaComponent extends BaseCriteriaComponent i
|
||||||
setCriteria(criteria: DataManagementPlanCriteria): void {
|
setCriteria(criteria: DataManagementPlanCriteria): void {
|
||||||
this.criteria = criteria;
|
this.criteria = criteria;
|
||||||
}
|
}
|
||||||
|
|
||||||
public fromJSONObject(item: any): DataManagementPlanCriteria {
|
|
||||||
this.criteria = new DataManagementPlanCriteria();
|
|
||||||
this.criteria.PeriodStart = new Date(item.PeriodStart);
|
|
||||||
this.criteria.PeriodEnd = new Date(item.PeriodEnd);
|
|
||||||
return this.criteria;
|
|
||||||
}
|
|
||||||
|
|
||||||
buildForm(): FormGroup {
|
|
||||||
const context: ValidationContext = this.createValidationContext();
|
|
||||||
|
|
||||||
return this.formBuilder.group({
|
|
||||||
periodStart: [this.criteria.PeriodStart, context.getValidation('periodStart').validators],
|
|
||||||
periodEnd: [this.criteria.PeriodEnd, context.getValidation('periodEnd').validators],
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
createValidationContext(): ValidationContext {
|
|
||||||
const validationContext: ValidationContext = new ValidationContext();
|
|
||||||
const validationArray: Validation[] = new Array<Validation>();
|
|
||||||
|
|
||||||
validationArray.push({ key: 'periodStart', validators: [BackendErrorValidator(this.errorModel, 'Criteria.PeriodStart')] }); //must add 'Criteria.' because the criteria validator is inside the request validator
|
|
||||||
validationArray.push({ key: 'periodEnd', validators: [BackendErrorValidator(this.errorModel, 'Criteria.PeriodEnd')] });
|
|
||||||
|
|
||||||
validationContext.validation = validationArray;
|
|
||||||
return validationContext;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -27,10 +27,8 @@
|
||||||
"TITLE": "Data Management Plans",
|
"TITLE": "Data Management Plans",
|
||||||
"COLUMNS": {
|
"COLUMNS": {
|
||||||
"NAME": "Name",
|
"NAME": "Name",
|
||||||
"ABBREVIATION": "Abbreviation",
|
"PROJECT": "Project",
|
||||||
"START": "Start",
|
"CREATION-TIME": "Created"
|
||||||
"END": "End",
|
|
||||||
"ACTIONS": "Actions"
|
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"DATASET-LISTING": {
|
"DATASET-LISTING": {
|
||||||
|
@ -92,6 +90,10 @@
|
||||||
"PERIOD-FROM": "Start",
|
"PERIOD-FROM": "Start",
|
||||||
"PERIOD-TO": "End",
|
"PERIOD-TO": "End",
|
||||||
"STATUS": "Status"
|
"STATUS": "Status"
|
||||||
|
},
|
||||||
|
"DMP": {
|
||||||
|
"LIKE": "Search",
|
||||||
|
"PROJECTS": "Projects"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
Loading…
Reference in New Issue