import {Component, Input, ViewChild} from '@angular/core'; import { ActivatedRoute} from '@angular/router'; import {Location} from '@angular/common'; import { Filter, Value} from '../searchUtils/searchHelperClasses.class'; import {SearchDataprovidersService} from '../../services/searchDataproviders.service'; import {SearchResult} from '../../utils/entities/searchResult'; import { ErrorCodes} from '../../utils/properties/openaireProperties'; import {SearchFields, FieldDetails} from '../../utils/properties/searchFields'; import {SearchPageComponent } from '../searchUtils/searchPage.component'; import {SearchUtilsClass } from '../searchUtils/searchUtils.class'; import{EnvProperties} from '../../utils/properties/env-properties'; @Component({ selector: 'search-dataproviders', template: ` ` }) export class SearchDataprovidersComponent { private errorCodes: ErrorCodes; public results =[]; public filters =[]; public totalResults:number = 0 ; public baseUrl:string; public searchUtils:SearchUtilsClass = new SearchUtilsClass(); public sub: any; public subResults: any; public _location:Location; public searchFields:SearchFields = new SearchFields(); public refineFields: string[] = this.searchFields.DATASOURCE_REFINE_FIELDS; public fieldIdsMap= this.searchFields.DATASOURCE_FIELDS; public CSV: any = { "columnNames": [ "Title", "Type", "Coutries", "Compatibility" ], "export":[] }; public CSVDownloaded = false; public csvParams: string; public disableForms: boolean = false; public loadPaging: boolean = true; public oldTotalResults: number = 0; pagingLimit = 0; properties: EnvProperties; @ViewChild (SearchPageComponent) searchPage : SearchPageComponent ; constructor (private route: ActivatedRoute, private _searchDataprovidersService: SearchDataprovidersService ) { this.errorCodes = new ErrorCodes(); this.searchUtils.status = this.errorCodes.LOADING; this.searchUtils.page =1; } public ngOnInit() { this.route.data .subscribe((data: { envSpecific: EnvProperties }) => { this.properties = data.envSpecific; this.baseUrl = data.envSpecific.searchLinkToDataProviders; this.pagingLimit = data.envSpecific.pagingLimit; }); this.searchPage.refineFields = this.refineFields; this.searchPage.fieldIdsMap = this.fieldIdsMap; var firstLoad =true; this.sub = this.route.queryParams.subscribe(params => { if(params['page'] && this.searchUtils.page != params['page']) { this.loadPaging = false; this.oldTotalResults = this.searchUtils.totalResults; } this.searchUtils.keyword = (params['keyword']?params['keyword']:''); var refine = true; if(this.searchUtils.page != ((params['page']=== undefined)?1:+params['page']) && this.filters && !firstLoad){ refine = false; } firstLoad = false; this.searchUtils.page = (params['page']=== undefined)?1:+params['page']; var queryParameters = this.searchPage.getQueryParametersFromUrl(params); this._getResults(queryParameters, refine, this.searchUtils.page, this.searchUtils.size); }); } public ngOnDestroy() { if(this.sub){ this.sub.unsubscribe(); } if(this.subResults){ this.subResults.unsubscribe(); } } public getNumForEntity(entity: string, id:string) { //var errorCodes:ErrorCodes = new ErrorCodes(); this.searchUtils.status = this.errorCodes.LOADING; if(id != "" && entity != "") { this._searchDataprovidersService.numOfEntityDataproviders(id, entity,this.properties).subscribe( data => { this.searchUtils.totalResults = data; //var errorCodes:ErrorCodes = new ErrorCodes(); this.searchUtils.status = this.errorCodes.DONE; if(this.searchUtils.totalResults == 0 ){ this.searchUtils.status = this.errorCodes.NONE; } }, err => { console.log(err); //TODO check erros (service not available, bad request) // if( ){ // this.searchUtils.status = ErrorCodes.ERROR; // } //var errorCodes:ErrorCodes = new ErrorCodes(); //this.searchUtils.status = errorCodes.ERROR; if(err.status == '404') { this.searchUtils.status = this.errorCodes.NOT_FOUND; } else if(err.status == '500') { this.searchUtils.status = this.errorCodes.ERROR; } else { this.searchUtils.status = this.errorCodes.NOT_AVAILABLE; } } ); } } public getNumForSearch(keyword: string) { //var errorCodes:ErrorCodes = new ErrorCodes(); this.searchUtils.status = this.errorCodes.LOADING; this._searchDataprovidersService.numOfDataproviders(keyword,this.properties).subscribe( data => { this.searchUtils.totalResults = data; //var errorCodes:ErrorCodes = new ErrorCodes(); this.searchUtils.status = this.errorCodes.DONE; if(this.searchUtils.totalResults == 0 ){ this.searchUtils.status = this.errorCodes.NONE; } }, err => { console.log(err); //TODO check erros (service not available, bad request) // if( ){ // this.searchUtils.status = ErrorCodes.ERROR; // } //var errorCodes:ErrorCodes = new ErrorCodes(); //this.searchUtils.status = errorCodes.ERROR; if(err.status == '404') { this.searchUtils.status = this.errorCodes.NOT_FOUND; } else if(err.status == '500') { this.searchUtils.status = this.errorCodes.ERROR; } else { this.searchUtils.status = this.errorCodes.NOT_AVAILABLE; } } ); } public getResultsForDeposit(id:string, type:string, page: number, size: number){ //var errorCodes:ErrorCodes = new ErrorCodes(); //this.status = errorCodes.LOADING; if(id != "") { this._searchDataprovidersService.searchDataprovidersForDeposit(id,type, page, size,this.properties).subscribe( data => { this.searchUtils.totalResults = data[0]; console.info("search Dataproviders forDeposit: [id:"+id+", type:"+type+" ] [total results:"+this.totalResults+"]"); this.results = data[1]; //var errorCodes:ErrorCodes = new ErrorCodes(); this.searchUtils.status = this.errorCodes.DONE; if(this.searchUtils.totalResults == 0 ){ this.searchUtils.status = this.errorCodes.NONE; } }, err => { console.log(err); //TODO check erros (service not available, bad request) // if( ){ // this.searchUtils.status = ErrorCodes.ERROR; // } //var errorCodes:ErrorCodes = new ErrorCodes(); //this.searchUtils.status = errorCodes.ERROR; if(err.status == '404') { this.searchUtils.status = this.errorCodes.NOT_FOUND; } else if(err.status == '500') { this.searchUtils.status = this.errorCodes.ERROR; } else { this.searchUtils.status = this.errorCodes.NOT_AVAILABLE; } } ); } } public getResultsForEntity(entity:string, id:string, page: number, size: number){ var parameters = ""; if(entity == "organization") { parameters = "organizations/"+id; } if(parameters != "") { this._searchDataprovidersService.searchDataprovidersForEntity(parameters, page, size,this.properties).subscribe( data => { this.searchUtils.totalResults = data[0]; console.info("search Dataproviders for "+entity+": [Parameters:"+parameters+" ] [total results:"+this.searchUtils.totalResults+"]"); this.results = data[1]; //var errorCodes:ErrorCodes = new ErrorCodes(); this.searchUtils.status = this.errorCodes.DONE; if(this.searchUtils.totalResults == 0 ){ this.searchUtils.status = this.errorCodes.NONE; } }, err => { console.log(err); //TODO check erros (service not available, bad request) // if( ){ // this.searchUtils.status = ErrorCodes.ERROR; // } //var errorCodes:ErrorCodes = new ErrorCodes(); //this.searchUtils.status = errorCodes.ERROR; if(err.status == '404') { this.searchUtils.status = this.errorCodes.NOT_FOUND; } else if(err.status == '500') { this.searchUtils.status = this.errorCodes.ERROR; } else { this.searchUtils.status = this.errorCodes.NOT_AVAILABLE; } } ); } } public getResultsForDataproviders(id:string, page: number, size: number){ this._searchDataprovidersService.getDataProvidersforEntityRegistry(id, page, size,this.properties).subscribe( data => { this.searchUtils.totalResults = data[0]; console.info("search Dataproviders for Entity Registry: [Id:"+id+" ] [total results:"+this.searchUtils.totalResults+"]"); this.results = data[1]; //var errorCodes:ErrorCodes = new ErrorCodes(); this.searchUtils.status = this.errorCodes.DONE; if(this.searchUtils.totalResults == 0 ){ this.searchUtils.status = this.errorCodes.NONE; } }, err => { console.log(err); //TODO check erros (service not available, bad request) // if( ){ // this.searchUtils.status = ErrorCodes.ERROR; // } //var errorCodes:ErrorCodes = new ErrorCodes(); //this.searchUtils.status = errorCodes.ERROR; if(err.status == '404') { this.searchUtils.status = this.errorCodes.NOT_FOUND; } else if(err.status == '500') { this.searchUtils.status = this.errorCodes.ERROR; } else { this.searchUtils.status = this.errorCodes.NOT_AVAILABLE; } } ); } public getResults(keyword:string,refine:boolean, page: number, size: number){ var parameters = ""; if(keyword.length > 0){ parameters = "q="+ keyword; } this._getResults(parameters,refine,page,this.searchUtils.size); } private _getResults(parameters:string,refine:boolean, page: number, size: number){ if(page > this.pagingLimit) { size=0; } if(page <= this.pagingLimit || this.searchUtils.status == this.errorCodes.LOADING) { this.csvParams = parameters; this.searchUtils.status = this.errorCodes.LOADING; //this.searchPage.openLoading(); this.disableForms = true; this.results = []; this.searchUtils.totalResults = 0; this.subResults = this._searchDataprovidersService.searchDataproviders(parameters,(refine)?this.searchPage.getRefineFieldsQuery():null, page, size, this.searchPage.getFields(),this.properties).subscribe( data => { this.searchUtils.totalResults = data[0]; console.info("search Content Providers: [Parameters:"+parameters+" ] [total results:"+this.searchUtils.totalResults+"]"); this.results = data[1]; if(refine){ this.filters = data[2]; } this.searchPage.checkSelectedFilters(this.filters); // this.filters = this.searchPage.checkSelectedFilters(data[2]); this.searchPage.updateBaseUrlWithParameters(this.filters); //var errorCodes:ErrorCodes = new ErrorCodes(); this.searchUtils.status = this.errorCodes.DONE; if(this.searchUtils.totalResults == 0 ){ this.searchUtils.status = this.errorCodes.NONE; } //this.searchPage.closeLoading(); this.disableForms = false; if(this.searchUtils.status == this.errorCodes.DONE) { // Page out of limit!!! let totalPages:any = this.searchUtils.totalResults/(this.searchUtils.size); if(!(Number.isInteger(totalPages))) { totalPages = (parseInt(totalPages, 10) + 1); } if(totalPages < page) { this.searchUtils.totalResults = 0; this.searchUtils.status = this.errorCodes.OUT_OF_BOUND; } } }, err => { console.log(err); //TODO check erros (service not available, bad request) // if( ){ // this.searchUtils.status = ErrorCodes.ERROR; // } //var errorCodes:ErrorCodes = new ErrorCodes(); //this.searchUtils.status = errorCodes.ERROR; if(err.status == '404') { this.searchUtils.status = this.errorCodes.NOT_FOUND; } else if(err.status == '500') { this.searchUtils.status = this.errorCodes.ERROR; } else { this.searchUtils.status = this.errorCodes.NOT_AVAILABLE; } //this.searchPage.closeLoading(); this.disableForms = false; } ); } } private setFilters(){ //TODO set filters from } public queryChanged($event) { this.loadPaging = true; var parameters = $event.value; this._getResults(parameters, true, this.searchUtils.page, this.searchUtils.size); } }