312 lines
8.2 KiB
TypeScript
312 lines
8.2 KiB
TypeScript
import { Component, OnInit, Input, Output, EventEmitter, ViewChild, ViewEncapsulation } from '@angular/core';
|
|
import { GoogleSignInSuccess } from 'angular-google-signin';
|
|
import { Router, ActivatedRoute } from '@angular/router';
|
|
import { ServerService } from '../../app/services/server.service';
|
|
import { Dmp } from '../entities/model/dmp';
|
|
import { Dataset } from '../entities/model/dataset';
|
|
import { Project } from '../entities/model/project';
|
|
import { ConfirmationComponent } from '../widgets/confirmation/confirmation.component';
|
|
|
|
import { DataTable } from 'angular2-datatable';
|
|
import { DropdownField } from '../../app/form/fields/dropdown/field-dropdown';
|
|
import { Param } from '../entities/model/param';
|
|
import { ModalComponent } from '../modal/modal.component';
|
|
import { HttpErrorResponse } from '@angular/common/http';
|
|
import { FormGroup, FormControl } from '@angular/forms'; //na dw an xreiazontai
|
|
import { NgForm } from '@angular/forms';
|
|
import { DatasetsComponent } from '../datasets/dataset.component';
|
|
import { StatusToString } from '../pipes/various/status-to-string';
|
|
import { MenuItem } from 'primeng/primeng';
|
|
import { Ng4LoadingSpinnerService } from 'ng4-loading-spinner';
|
|
|
|
declare var $: any;
|
|
|
|
import '../../assets/custom.js';
|
|
declare function simple_notifier(type: string, title: string, message: string): any;
|
|
|
|
@Component({
|
|
selector: 'dmps',
|
|
templateUrl: 'dmps.html',
|
|
styleUrls: ['./dmp.component.css'],
|
|
providers: [ServerService],
|
|
encapsulation: ViewEncapsulation.None
|
|
})
|
|
|
|
export class DmpComponent implements OnInit {
|
|
|
|
//whole dmp data model
|
|
tableData: any[] = new Array();
|
|
|
|
//required by the table
|
|
public filterQuery = "";
|
|
public rowsOnPage = 10;
|
|
public sortBy = "label";
|
|
public sortOrder = "asc";
|
|
|
|
// for tableIds
|
|
showIDs: boolean = false;
|
|
|
|
|
|
dmp: any;
|
|
|
|
@Input() projectsDropDown: DropdownField;
|
|
@Input() statusDropDown: DropdownField;
|
|
|
|
@ViewChild(DatasetsComponent) datasetsComponent: DatasetsComponent;
|
|
|
|
filteredResearchers: any[];
|
|
filteredOrganizations: any[];
|
|
|
|
constructor(
|
|
private serverService: ServerService,
|
|
private route: ActivatedRoute,
|
|
private router: Router,
|
|
private spinnerService: Ng4LoadingSpinnerService
|
|
) {
|
|
this.projectsDropDown = new DropdownField();
|
|
this.projectsDropDown.options = [];
|
|
this.statusDropDown = new DropdownField();
|
|
this.statusDropDown.options = [{ key: '', value: null }, { key: '0', value: "Active" }, { key: '1', value: "Inactive" }]
|
|
//this.projects = [];
|
|
|
|
}
|
|
|
|
|
|
clearDmp() {
|
|
|
|
this.dmp = {
|
|
id: null,
|
|
label: '',
|
|
previous: '',
|
|
version: '',
|
|
organizations: [],
|
|
researchers: []
|
|
}
|
|
|
|
}
|
|
|
|
ngOnInit() {
|
|
|
|
this.getDmps();
|
|
|
|
this.serverService.getAllProjects().subscribe(
|
|
response => {
|
|
//let params = new Param();
|
|
response.forEach((dmp) => {
|
|
let params = new Param();
|
|
params.key = dmp.id;
|
|
params.value = dmp.label;
|
|
this.projectsDropDown.options.push(params);
|
|
});
|
|
|
|
},
|
|
(err: HttpErrorResponse) => {
|
|
simple_notifier("danger", null, "Could not load User's Projects");
|
|
}
|
|
)
|
|
|
|
this.clearDmp();
|
|
|
|
|
|
}
|
|
|
|
|
|
getDmps(muted?: boolean) {
|
|
this.serverService.getDmpOfUser().subscribe(
|
|
response => {
|
|
this.tableData = response;
|
|
if (muted && muted != true)
|
|
simple_notifier("success", null, "Refreshed DMPs");
|
|
|
|
this.tableData.forEach(dmp => {
|
|
if (dmp.previous != null)
|
|
this.serverService.getDmp(dmp.previous).subscribe(previous => { dmp.previous = previous; });
|
|
});
|
|
|
|
},
|
|
(err: HttpErrorResponse) => {
|
|
simple_notifier("danger", null, "Could not refresh DMPs");
|
|
}
|
|
);
|
|
}
|
|
|
|
newDMP() {
|
|
|
|
this.dmp.project = { "id": this.dmp.project };
|
|
this.dmp["version"] = 1;
|
|
|
|
this.serverService.createDmpForCurrentUser(this.dmp)
|
|
.subscribe(
|
|
response => {
|
|
simple_notifier("success", null, "DMP created");
|
|
this.getDmps();
|
|
},
|
|
error => {
|
|
simple_notifier("danger", null, "Could not create the DMP");
|
|
}
|
|
);
|
|
$("#newDmpModal").modal("hide");
|
|
}
|
|
|
|
updateDMP() {
|
|
|
|
this.dmp.project = { "id": this.dmp.project };
|
|
this.dmp.creator = { "id": this.dmp.creator };
|
|
if (this.dmp.previous != null)
|
|
this.dmp.previous = this.dmp.previous.id;
|
|
|
|
this.serverService.updateDmp(this.dmp)
|
|
.subscribe(
|
|
response => {
|
|
simple_notifier("success", null, "Edited the DMP");
|
|
this.getDmps();
|
|
},
|
|
error => {
|
|
simple_notifier("danger", null, "Failed to edit the DMP");
|
|
}
|
|
);
|
|
$("#newDmpModal").modal("hide");
|
|
$("#newVersionDmpModal").modal("hide");
|
|
|
|
}
|
|
|
|
cloneDMP(dmp) {
|
|
dmp = { "id": dmp.id, "label": dmp.label };
|
|
this.serverService.cloneDmp(dmp).subscribe(
|
|
response => {
|
|
simple_notifier("success", null, "Successfully cloned the DMP");
|
|
this.getDmps();
|
|
},
|
|
error => {
|
|
simple_notifier("danger", null, "Failed to clone the DMP");
|
|
}
|
|
);
|
|
$("#newVersionDmpModal").modal("hide");
|
|
}
|
|
|
|
SaveDmp() {
|
|
if (this.dmp.id == null)
|
|
this.newDMP();
|
|
else
|
|
this.updateDMP();
|
|
}
|
|
|
|
|
|
editDmp(item) {
|
|
this.spinnerService.show();
|
|
this.serverService.getDmp(item.id).subscribe(result => {
|
|
this.dmp = result;
|
|
this.dmp.project = result.project.id
|
|
$("#newDmpModal").modal("show");
|
|
},
|
|
error => simple_notifier("danger", null, "Failed to Open DMP"),
|
|
() => this.spinnerService.hide()
|
|
)
|
|
|
|
}
|
|
|
|
cloneDmp(item) {
|
|
this.dmp = Object.assign({}, item);
|
|
this.dmp.project = item.project.id;
|
|
$("#newVersionDmpModal").modal("show");
|
|
}
|
|
|
|
newDmpForm(item) {
|
|
|
|
this.clearDmp();
|
|
|
|
$("#newDmpModal").modal("show");
|
|
}
|
|
|
|
markDMPForDelete(dmp) {
|
|
this.dmp = dmp;
|
|
}
|
|
|
|
deleteDMP(confirmation) {
|
|
if (confirmation == true)
|
|
this.deleteRow(this.dmp);
|
|
}
|
|
|
|
deleteRow(dmp) {
|
|
|
|
this.dmp = { "id": this.dmp.id }; //only id is needed to delete
|
|
|
|
|
|
this.serverService.deleteDmp(this.dmp).subscribe(
|
|
response => {
|
|
simple_notifier("success", null, "Successfully deleted the DMP");
|
|
this.getDmps();
|
|
},
|
|
(err: HttpErrorResponse) => {
|
|
if (err.status >= 200 && err.status < 300)
|
|
simple_notifier("success", null, "Successfully deleted the DMP");
|
|
else
|
|
simple_notifier("danger", null, "Failed to delete the DMP");
|
|
this.getDmps();
|
|
}
|
|
);
|
|
|
|
}
|
|
|
|
clickFilters(element) {
|
|
if (element.textContent == "More filters")
|
|
element.textContent = "Less Filters";
|
|
else
|
|
element.textContent = "More Filters";
|
|
}
|
|
|
|
SelectDMPStatus(dmp, event, oldValue) {
|
|
console.log(dmp);
|
|
let cannotChangeStatus: boolean;
|
|
if (dmp.status == 2) {
|
|
this.serverService.getDatasetForDmp({ "id": dmp.id }).subscribe(
|
|
response => {
|
|
response.forEach(dataset => {
|
|
if (dataset.status !== 2 || dataset.status !== 3) {
|
|
cannotChangeStatus = true;
|
|
}
|
|
return;
|
|
});
|
|
if (cannotChangeStatus == true) {
|
|
dmp.status = 0;
|
|
$("#messageForChangingStatus").modal("show");
|
|
}
|
|
},
|
|
error => {
|
|
console.log("could not retrieve dataset for dpm: " + dmp.id);
|
|
}
|
|
);
|
|
}
|
|
|
|
}
|
|
|
|
showDatasetsOfDmp(item) {
|
|
this.router.navigate(['/dataset'], { queryParams: { "dmpid": item.id, "label": item.label } });
|
|
}
|
|
|
|
viewDetailedDMP(dmp) {
|
|
let random = Math.random().toString(36).replace(/[^a-z]+/g, '').substr(0, 5);
|
|
this.router.navigate(['/dmps/dmp'], { queryParams: { "dmpid": dmp.id, "label": dmp.label, random: random } });
|
|
}
|
|
|
|
viewDetailedProject(dmp) {
|
|
let random = Math.random().toString(36).replace(/[^a-z]+/g, '').substr(0, 5);
|
|
this.router.navigate(['/dmps/project'], { queryParams: { "projectid": dmp.project.id, "label": dmp.project.label, random: random } });
|
|
}
|
|
|
|
searchResearchers(event) {
|
|
let query = event.query;
|
|
this.serverService.searchDMPResearchers(query).subscribe(researchers => {
|
|
this.filteredResearchers = researchers;
|
|
});
|
|
}
|
|
|
|
searchOrganizations(event) {
|
|
let query = event.query;
|
|
this.serverService.searchDMPOrganizations(query).subscribe(organizations => {
|
|
this.filteredOrganizations = organizations;
|
|
});
|
|
}
|
|
|
|
}
|