import {Component, Input, ViewChild} from '@angular/core'; import {Observable} from 'rxjs/Observable'; import { Router, ActivatedRoute} from '@angular/router'; import {Filter, Value,AdvancedField} from '../searchUtils/searchHelperClasses.class'; import {SearchDatasetsService} from '../../services/searchDatasets.service'; import {SearchResult} from '../../utils/entities/searchResult'; import {ErrorCodes} from '../../utils/properties/errorCodes'; import {AdvancedSearchPageComponent} from '../searchUtils/advancedSearchPage.component'; import {SearchFields, FieldDetails} from '../../utils/properties/searchFields'; import {SearchUtilsClass } from '../searchUtils/searchUtils.class'; import{EnvProperties} from '../../utils/properties/env-properties'; @Component({ selector: 'advanced-search-datasets', template: ` ` }) export class AdvancedSearchDatasetsComponent { private errorCodes: ErrorCodes; properties:EnvProperties; @Input() piwikSiteId = null; @Input() connectCommunityId: string; public results =[]; public filters =[]; public searchUtils:SearchUtilsClass = new SearchUtilsClass(); public searchFields:SearchFields = new SearchFields(); public fieldIds: string[] = this.searchFields.RESULT_ADVANCED_FIELDS; public fieldIdsMap= this.searchFields.RESULT_FIELDS; public selectedFields:AdvancedField[] = []; @ViewChild (AdvancedSearchPageComponent) searchPage : AdvancedSearchPageComponent ; public resourcesQuery = "( (oaftype exact result) and (resulttypeid exact dataset) )"; public csvParams: string; public disableForms: boolean = false; public loadPaging: boolean = true; public oldTotalResults: number = 0; public pagingLimit: number = 0; public sort: boolean = true; public isPiwikEnabled; constructor (private route: ActivatedRoute, private _searchDatasetsService: SearchDatasetsService ) { this.results =[]; this.errorCodes = new ErrorCodes(); this.searchUtils.status = this.errorCodes.LOADING; } ngOnInit() { this.route.data .subscribe((data: { envSpecific: EnvProperties }) => { this.properties= data.envSpecific; this.searchUtils.baseUrl = data.envSpecific.searchLinkToAdvancedDatasets; this.pagingLimit = data.envSpecific.pagingLimit; this.isPiwikEnabled = data.envSpecific.enablePiwikTrack; }); //var errorCodes:ErrorCodes = new ErrorCodes(); this.searchUtils.status = this.errorCodes.LOADING; this.sub = this.route.queryParams.subscribe(params => { if(params['page'] && this.searchUtils.page != params['page']) { this.loadPaging = false; this.oldTotalResults = this.searchUtils.totalResults; } let page = (params['page']=== undefined)?1:+params['page']; this.searchUtils.page = ( page <= 0 ) ? 1 : page; this.searchUtils.size = (params['size']=== undefined)?10:+params['size']; if(this.searchUtils.size != 5 && this.searchUtils.size != 10 && this.searchUtils.size != 20 && this.searchUtils.size != 50) { this.searchUtils.size = 10; } this.searchUtils.sortBy = (params['sortBy'])?params['sortBy']:''; if(this.searchUtils.sortBy && this.searchUtils.sortBy != "resultdateofacceptance,descending" && this.searchUtils.sortBy != "resultdateofacceptance,ascending") { this.searchUtils.sortBy = ""; } this.searchPage.fieldIds = this.fieldIds; this.selectedFields =[]; this.searchPage.selectedFields = this.selectedFields; this.searchPage.fieldIdsMap = this.fieldIdsMap; this.searchPage.connectCommunityId = this.connectCommunityId; this.searchPage.getSelectedFiltersFromUrl(params); this.getResults(this.searchPage.createQueryParameters(), this.searchUtils.page, this.searchUtils.size, this.searchUtils.sortBy); }); } ngOnDestroy() { this.sub.unsubscribe(); } sub: any; public getResults(parameters:string, page: number, size: number, sortBy: string){ if(page > this.pagingLimit) { size=0; } if(page <= this.pagingLimit || this.searchUtils.status == this.errorCodes.LOADING) { if(parameters!= null && parameters != '' ) { this.csvParams ="&fq=( "+this.resourcesQuery + "and (" + parameters + "))"; }else{ this.csvParams ="&fq="+this.resourcesQuery; } //var errorCodes:ErrorCodes = new ErrorCodes(); this.searchUtils.status = this.errorCodes.LOADING; //this.searchPage.openLoading(); this.disableForms = true; this.results = []; this.searchUtils.totalResults = 0; console.info("Advanced Search for Research Data: Execute search query "+parameters); this._searchDatasetsService.advancedSearchDatasets(parameters, page, size, sortBy, this.properties).subscribe( data => { this.searchUtils.totalResults = data[0]; console.info("search Research Data total="+this.searchUtils.totalResults); this.results = data[1]; this.searchPage.updateBaseUrlWithParameters(); //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); console.info("error"); //TODO check erros (service not available, bad request) // if( ){ // this.searchUtils.status = errorCodes.ERROR; // } //var errorCodes:ErrorCodes = new ErrorCodes(); //this.searchUtils.status = errorCodes.NOT_AVAILABLE; 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, this.searchUtils.page,this.searchUtils.size, this.searchUtils.sortBy); console.info("queryChanged: Execute search query "+parameters); } }