2017-12-22 14:42:47 +01:00
import { DatasetProfileDefinitionModel } from '../models/DatasetProfileDefinitionModel' ;
2017-12-21 10:44:57 +01:00
import { TranslateService } from '@ngx-translate/core' ;
import { BaseErrorModel } from '../models/error/BaseErrorModel' ;
2018-01-12 11:17:37 +01:00
import { ActivatedRoute , Router , Params } from '@angular/router' ;
2017-12-21 10:26:11 +01:00
import { DatasetService } from '../services/dataset/dataset.service' ;
import { DatasetWizardModel } from '../models/datasets/DatasetWizardModel' ;
import { DatasetProfileCriteria } from '../models/criteria/dataset-profile/DatasetProfileCriteria' ;
2017-12-19 14:57:07 +01:00
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" ;
2017-12-20 14:34:32 +01:00
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" ;
2018-01-24 12:41:31 +01:00
import { MatPaginator , MatSort , MatSnackBar , MatStepper } from "@angular/material" ;
2017-12-21 10:44:57 +01:00
import { SnackBarNotificationComponent } from "../shared/components/notificaiton/snack-bar-notification.component" ;
2018-01-17 16:06:35 +01:00
import { DatasetProfileModel } from '../models/datasetprofile/DatasetProfileModel' ;
import { ExternalSourcesItemModel } from '../models/external-sources/ExternalSourcesItemModel' ;
import { ExternalSourcesService } from '../services/external-sources/external-sources.service' ;
2017-12-19 14:57:07 +01:00
@Component ( {
2017-12-20 09:17:13 +01:00
selector : 'app-dataset-wizard-component' ,
templateUrl : 'dataset-wizard.component.html' ,
styleUrls : [ './dataset-wizard.component.scss' ] ,
2018-01-24 12:41:31 +01:00
providers : [ DatasetWizardService , ExternalSourcesService , DataManagementPlanService , MatStepper ] ,
2017-12-19 14:57:07 +01:00
encapsulation : ViewEncapsulation.None
} )
2017-12-20 09:17:13 +01:00
export class DatasetWizardComponent implements AfterViewInit {
2018-01-24 12:41:31 +01:00
@ViewChild ( 'stepper' ) stepper : MatStepper ;
2017-12-19 14:57:07 +01:00
2018-01-17 12:57:41 +01:00
//dmpAutoCompleteConfiguration: AutoCompleteConfiguration;
//datasetProfileAutoCompleteConfiguration: AutoCompleteConfiguration;
2018-01-12 11:17:37 +01:00
datasetWizardModel : DatasetWizardModel ;
2017-12-21 10:26:11 +01:00
isNew = true ;
2018-01-12 11:17:37 +01:00
formGroup : FormGroup ;
2018-01-17 12:57:41 +01:00
availableProfiles : DatasetProfileModel [ ] = [ ] ;
filtereddataRepositoriesAsync : boolean = false ;
filteredRegistriesAsync : boolean = false ;
filteredServicesAsync : boolean = false ;
filteredExternalDatasetsAsync : boolean = false ;
filtereddataRepositories : ExternalSourcesItemModel [ ] ;
filteredRegistries : ExternalSourcesItemModel [ ] ;
filteredServices : ExternalSourcesItemModel [ ] ;
2018-01-24 12:41:31 +01:00
filteredExternalDatasets : ExternalSourcesItemModel [ ] ;
2018-01-17 12:57:41 +01:00
2017-12-19 14:57:07 +01:00
constructor (
2017-12-20 14:34:32 +01:00
private datasetWizardService : DatasetWizardService ,
2017-12-21 10:26:11 +01:00
private formBuilder : FormBuilder ,
private datasetService : DatasetService ,
private route : ActivatedRoute ,
2018-01-12 11:17:37 +01:00
public snackBar : MatSnackBar ,
2017-12-21 10:26:11 +01:00
public router : Router ,
2018-01-12 11:17:37 +01:00
public language : TranslateService ,
2018-01-17 12:57:41 +01:00
public externalSourcesService : ExternalSourcesService ,
public dataManagementPlanService : DataManagementPlanService
2017-12-19 14:57:07 +01:00
) {
}
isLinear = false ;
2017-12-20 14:34:32 +01:00
firstStepFormGroup : FormGroup ;
2017-12-19 14:57:07 +01:00
secondFormGroup : FormGroup ;
ngOnInit() {
2017-12-20 14:34:32 +01:00
let dmpRequestItem : RequestItem < DataManagementPlanCriteria > = new RequestItem ( ) ;
dmpRequestItem . criteria = new DataManagementPlanCriteria ( ) ;
2018-01-17 12:57:41 +01:00
//this.dmpAutoCompleteConfiguration = new AutoCompleteConfiguration(this.datasetWizardService.userDmps.bind(this.datasetWizardService), dmpRequestItem);
2017-12-21 10:26:11 +01:00
this . route . params . subscribe ( ( params : Params ) = > {
const itemId = params [ 'id' ] ;
2018-01-17 12:57:41 +01:00
const dmpId = params [ 'dmpId' ] ;
2017-12-21 10:26:11 +01:00
if ( itemId != null ) {
this . isNew = false ;
2017-12-22 14:42:47 +01:00
this . datasetWizardService . getSingle ( itemId ) . map ( data = > data as DatasetWizardModel )
2017-12-21 10:26:11 +01:00
. subscribe ( data = > {
2018-01-03 17:36:31 +01:00
this . datasetWizardModel = JsonSerializer . fromJSONObject ( data , DatasetWizardModel ) ;
2017-12-22 14:42:47 +01:00
this . formGroup = this . datasetWizardModel . buildForm ( ) ;
2018-01-24 12:41:31 +01:00
this . loadDatasetProfiles ( ) ;
2018-01-17 12:57:41 +01:00
} ) ;
} else if ( dmpId != null ) {
this . isNew = true ;
this . dataManagementPlanService . getSingle ( dmpId ) . map ( data = > data as DataManagementPlanModel )
. subscribe ( data = > {
this . datasetWizardModel = new DatasetWizardModel ( ) ;
setTimeout ( ( ) = > {
this . datasetWizardModel . dmp = data ;
this . formGroup = this . datasetWizardModel . buildForm ( ) ;
this . loadDatasetProfiles ( ) ;
2018-01-12 11:17:37 +01:00
} ) ;
2017-12-21 10:26:11 +01:00
} ) ;
} else {
2018-01-17 12:57:41 +01:00
2017-12-21 10:26:11 +01:00
}
2017-12-19 14:57:07 +01:00
} ) ;
2018-01-12 11:17:37 +01:00
2017-12-19 14:57:07 +01:00
}
2018-01-17 12:57:41 +01:00
loadDatasetProfiles() {
let datasetProfileRequestItem : RequestItem < DatasetProfileCriteria > = new RequestItem ( ) ;
datasetProfileRequestItem . criteria = new DatasetProfileCriteria ( ) ;
datasetProfileRequestItem . criteria . id = this . datasetWizardModel . dmp . id ;
this . datasetWizardService . getAvailableProfiles ( datasetProfileRequestItem ) . subscribe ( items = > {
2018-01-19 14:48:40 +01:00
this . availableProfiles = JsonSerializer . fromJSONArray ( items , DatasetProfileModel ) ;
2018-01-17 12:57:41 +01:00
} ) ;
}
2017-12-19 14:57:07 +01:00
ngAfterViewInit() {
2018-01-24 12:41:31 +01:00
this . route . params . subscribe ( ( params : Params ) = > {
let itemId = params [ 'id' ] ;
if ( itemId != null ) this . stepper . selectedIndex = 2 ;
} )
}
2017-12-19 14:57:07 +01:00
// this.route.params.subscribe((params: Params) => {
// const itemId = params['id'];
// if (itemId != null) {
// this.isNew = false;
// this.dataManagementPlanService.getSingle(itemId).map(data => data as DataManagementPlanModel)
// .subscribe(data => {
// this.dataManagementPlan = new JsonSerializer<DataManagementPlanModel>().fromJSONObject(data, DataManagementPlanModel);
// this.formGroup = this.dataManagementPlan.buildForm();
// });
// } else {
// this.dataManagementPlan = new DataManagementPlanModel();
// setTimeout(() => {
// this.formGroup = this.dataManagementPlan.buildForm();
// });
// }
// });
public cancel ( ) : void {
//this.router.navigate(['/dataManagementPlans']);
}
2017-12-21 10:44:57 +01:00
formSubmit ( ) : void {
//this.touchAllFormFields(this.formGroup);
2017-12-22 15:30:15 +01:00
//if(this.isNew)return;
2017-12-21 10:44:57 +01:00
if ( ! this . isFormValid ( ) ) { return ; }
this . onSubmit ( ) ;
}
public isFormValid() {
return this . formGroup . valid ;
}
onSubmit ( ) : void {
2017-12-22 14:42:47 +01:00
this . datasetWizardService . createDataset ( this . formGroup . value ) . subscribe (
complete = > {
this . datasetWizardService . getSingle ( complete . id ) . subscribe (
2018-01-12 11:17:37 +01:00
result = > {
this . datasetWizardModel = JsonSerializer . fromJSONObject ( result , DatasetWizardModel ) ;
2017-12-22 14:42:47 +01:00
}
)
this . onCallbackSuccess ( )
} ,
2017-12-21 10:44:57 +01:00
error = > this . onCallbackError ( error )
) ;
}
onCallbackSuccess ( ) : void {
this . snackBar . openFromComponent ( SnackBarNotificationComponent , {
data : { message : this.isNew ? 'GENERAL.SNACK-BAR.SUCCESSFUL-CREATION' : 'GENERAL.SNACK-BAR.SUCCESSFUL-UPDATE' , language : this.language } ,
duration : 3000 ,
extraClasses : [ 'snackbar-success' ]
} )
}
onCallbackError ( error : any ) {
this . setErrorModel ( error . error ) ;
//this.validateAllFormFields(this.formGroup);
}
public setErrorModel ( errorModel : BaseErrorModel ) {
Object . keys ( errorModel ) . forEach ( item = > {
2017-12-22 14:42:47 +01:00
( < any > this . datasetWizardModel . errorModel ) [ item ] = ( < any > errorModel ) [ item ] ;
2017-12-21 10:44:57 +01:00
} )
}
2018-01-17 12:57:41 +01:00
filterdataRepositories ( value : string ) : void {
this . filtereddataRepositories = undefined ;
if ( value ) {
this . filtereddataRepositoriesAsync = true ;
2018-01-17 16:06:35 +01:00
this . externalSourcesService . searchDatasetRepository ( value ) . subscribe ( items = > {
2018-01-17 12:57:41 +01:00
this . filtereddataRepositories = items ;
this . filtereddataRepositoriesAsync = false ;
// this.filteredOrganisations = items.filter((filteredObj: any) => {
// return this.objectsModel ? this.objectsModel.indexOf(filteredObj) < 0 : true;
// });
} ) ;
}
}
filterRegistries ( value : string ) : void {
this . filteredRegistries = undefined ;
if ( value ) {
this . filteredRegistriesAsync = true ;
2018-01-17 16:06:35 +01:00
this . externalSourcesService . searchDatasetRegistry ( value ) . subscribe ( items = > {
2018-01-17 12:57:41 +01:00
this . filteredRegistries = items ;
this . filteredRegistriesAsync = false ;
// this.filteredOrganisations = items.filter((filteredObj: any) => {
// return this.objectsModel ? this.objectsModel.indexOf(filteredObj) < 0 : true;
// });
} ) ;
}
}
filterServices ( value : string ) : void {
this . filteredServices = undefined ;
if ( value ) {
this . filteredServicesAsync = true ;
this . externalSourcesService . searchDatasetService ( value ) . subscribe ( items = > {
this . filteredServices = items ;
this . filteredServicesAsync = false ;
// this.filteredOrganisations = items.filter((filteredObj: any) => {
// return this.objectsModel ? this.objectsModel.indexOf(filteredObj) < 0 : true;
// });
} ) ;
}
}
filterExternalDatasets ( value : string ) : void {
this . filteredExternalDatasets = undefined ;
if ( value ) {
this . filteredExternalDatasetsAsync = true ;
this . externalSourcesService . searchDatasetSExternalDatasetservice ( value ) . subscribe ( items = > {
this . filteredExternalDatasets = items ;
this . filteredExternalDatasetsAsync = false ;
// this.filteredOrganisations = items.filter((filteredObj: any) => {
// return this.objectsModel ? this.objectsModel.indexOf(filteredObj) < 0 : true;
// });
} ) ;
}
}
2017-12-19 14:57:07 +01:00
}