import { Component, OnInit, Input, ViewChild, NgZone, Output, EventEmitter } from '@angular/core'; import { GoogleSignInSuccess } from 'angular-google-signin'; import { Router, ActivatedRoute } from '@angular/router'; import { ServerService } from '../../app/services/server.service'; import { Project } from '../entities/model/project'; import { Dataset } from '../entities/model/dataset'; import { Dmp } from '../entities/model/dmp'; import {DataTable} from 'angular2-datatable'; import { DropdownField } from '../../app/form/fields/dropdown/field-dropdown'; import { Param } from '../entities/model/param'; import { StatusToString } from '../pipes/various/status-to-string'; import { ConfirmationComponent } from '../widgets/confirmation/confirmation.component'; 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: 'datasets-table', templateUrl: 'dataset.html', styleUrls: ['./dataset.component.css'], providers: [ServerService] }) export class DatasetsComponent 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"; //visibility rules for containers tableVisible: boolean = true; editorVisible: boolean = false; // for tableIds showIDs : boolean = false; // END ALTERNATIVE returnUrl: string; @Input() datasets: Dataset[]; @Input() datasetProfileDropDown: DropdownField; @Input() datasetCount = 0; @Input() dmpIdforDatasets: string; @Input() dmpLabelforDatasets: string; @Input() statusDropDown: DropdownField; dataset: any; saveAndDescribe:boolean; dataSetValue: boolean @Input() get dataSetVisibe() { return this.dataSetValue; } @Output() public dataSetValueChange = new EventEmitter(); set dataSetVisibe(value: any) { this.dataSetValue = value this.dataSetValueChange.emit(this.dataSetValue) } constructor( private serverService: ServerService, private route: ActivatedRoute, private router: Router, private ngZone: NgZone, private spinnerService: Ng4LoadingSpinnerService) { this.dataset = this.createEmptyDataset(); this.datasetProfileDropDown = new DropdownField(); this.datasetProfileDropDown.options = []; this.saveAndDescribe = false; this.statusDropDown = new DropdownField(); this.statusDropDown.options= [{key:'', value:null},{key:'0', value:"Active"},{key:'1', value:"Inactive"}, {key:'2', value:"Submitted"}, {key:'3', value:"Cancel"}] } ngOnInit() { //this.projects = this.serverService.getDummyProjects(); this.datasets = []; console.log(this.dmpIdforDatasets); this.getDatasets(); this.serverService.getAllDatsetsProfile().subscribe( response => { response.forEach((datasetprofile) => { let params = new Param(); params.key = datasetprofile.id; params.value = datasetprofile.label; this.datasetProfileDropDown.options.push(params); }, error => { simple_notifier("danger",null,"Could not load User's Dataset Profiles"); } ); } ) } createEmptyDataset(){ return { id: null, label: '', reference: '', uri: '', properties: '', profile: { "id": '' }, dmp: { "id": '' } } } SaveDataset(){ if(this.dataset.id ==null){ this.dataset.dmp = { "id": this.dmpIdforDatasets } this.dataset.profile = { "id": this.dataset.profile } this.serverService.createDatasetForDmp(this.dataset).subscribe( response => { simple_notifier("success",null,"Created dataset"); this.getDatasets(); if (this.saveAndDescribe == true) this.describeDataset(response); }, error=>{ simple_notifier("danger",null,"Could not create Dataset"); } ) $("#newDatasetModal").modal("hide"); } else{ this.dataset.dmp = { "id": this.dmpIdforDatasets } this.dataset.profile = { "id": this.dataset.profile } this.serverService.updateDatsetsProfile(this.dataset).subscribe( response => { simple_notifier("success",null,"Dataset edited"); this.getDatasets(); if (this.saveAndDescribe == true) this.describeDataset(response); }, error => { simple_notifier("danger",null,"Could not edit dataset"); } ) $("#newDatasetModal").modal("hide"); } } getDatasets(muted?: boolean){ this.serverService.getDatasetForDmp({ "id": this.dmpIdforDatasets }).subscribe( response => { this.tableData = response; if(muted && muted!=true) simple_notifier("success",null,"Updated datasets table"); }, error => { simple_notifier("danger",null,"Could not update datasets table"); } ); } getDatasetForDmpMethod(dmpid) { this.spinnerService.show(); this.serverService.getDatasetForDmp({ "id": dmpid }).subscribe( response => { this.tableData = response; }, error => { console.log("could not retrieve dataset for dpm: "+dmpid); }, () =>{ this.spinnerService.hide(); } ); } editRow(item, event) { if (event.toElement.id == "editDataset"){ this.dataset = item; this.dataset.label = item.label; this.dataset.uri = item.uri; //this.dataset.dmp = item.dmp; this.dataset.profile = item.profile==null ? null : item.profile.id; this.dataset.id = item.id; $("#newDatasetModal").modal("show"); } else if(event.toElement.id == "describeDataset"){ this.describeDataset(item); } return false; } newDataset() { this.dataset = this.createEmptyDataset(); this.dataset.dmp =this.dmpLabelforDatasets; this.dataset.status = 0; $("#newDatasetModal").modal("show"); } SaveDescribeDataset(){ this.saveAndDescribe = true; this.SaveDataset(); } describeDataset(item) { this.ngZone.run(() => this.router.navigate(['dynamic-form', {id: item.profile.id, datasetId:item.id}])); } markDatasetForDelete(dataset){ this.dataset = dataset; } deleteDataset(confirmation){ if(confirmation==true) this.deleteRow(this.dataset); } deleteRow(dataset){ this.serverService.deleteDataset(dataset).subscribe( response => { simple_notifier("success",null,"Deleted dataset"); this.getDatasets(); }, err => { simple_notifier("danger",null,"Could not delete the dataset"); } ); } }