From 6824746d8a009f95184aa85d96c0a6eb954bf091 Mon Sep 17 00:00:00 2001 From: argirok Date: Fri, 6 Oct 2023 15:30:10 +0300 Subject: [PATCH] use new community API for filters and paging --- .../simple/searchProjects.component.ts | 121 ++++++++---------- 1 file changed, 53 insertions(+), 68 deletions(-) diff --git a/src/app/searchPages/simple/searchProjects.component.ts b/src/app/searchPages/simple/searchProjects.component.ts index 447b340..17d7a13 100644 --- a/src/app/searchPages/simple/searchProjects.component.ts +++ b/src/app/searchPages/simple/searchProjects.component.ts @@ -1,8 +1,6 @@ import {Component, ViewChild} from '@angular/core'; import {ActivatedRoute} from '@angular/router'; - import {AdvancedField, Filter, Value} from '../../openaireLibrary/searchPages/searchUtils/searchHelperClasses.class'; - import {ErrorCodes} from '../../openaireLibrary/utils/properties/errorCodes'; import {ErrorMessagesComponent} from '../../openaireLibrary/utils/errorMessages.component'; import {SearchFields} from '../../openaireLibrary/utils/properties/searchFields'; @@ -14,6 +12,7 @@ import {CommunityService} from "../../openaireLibrary/connect/community/communit import {Subscriber} from "rxjs"; import {NewSearchPageComponent} from "../../openaireLibrary/searchPages/searchUtils/newSearchPage.component"; import {SearchResult} from "../../openaireLibrary/utils/entities/searchResult"; +import {StringUtils} from "../../openaireLibrary/utils/string-utils.class"; @Component({ selector: 'openaire-search-projects', @@ -50,8 +49,9 @@ export class OpenaireSearchProjectsComponent { private errorMessages: ErrorMessagesComponent; public columnNames = ['Project', 'GrantId', 'Funder']; public results =[]; - public originalFilters =[]; + public originalFunders =[]; public filters =[]; + selectedFunder = null; public searchUtils:SearchUtilsClass = new SearchUtilsClass(); subscriptions = []; public searchFields:SearchFields = new SearchFields(); @@ -64,7 +64,6 @@ export class OpenaireSearchProjectsComponent { private communityId: string = ''; customFilter: SearchCustomFilter = null; initialLoad = true; - public allResults =[]; @ViewChild(NewSearchPageComponent, { static: true }) searchPage: NewSearchPageComponent; public fieldIds: string[] = this.searchFields.PROJECT_ADVANCED_FIELDS; public fieldIdsMap= this.searchFields.PROJECT_FIELDS; @@ -88,14 +87,15 @@ export class OpenaireSearchProjectsComponent { this.subscriptions.push(this.route.queryParams.subscribe(params => { let page = (params['page'] === undefined) ? 1 : +params['page']; this.searchUtils.page = (page <= 0) ? 1 : page; + this.selectedFunder = params["funder"]?StringUtils.unquote(params["funder"]):null; this.searchUtils.validateSize(params['size']); - this.keyword = decodeURIComponent(params['fv0']?params['fv0']:(params['keyword']?params['keyword']:'')); this.selectedFields = []; this.searchPage.prepareSearchPage(this.fieldIds, this.selectedFields, this.refineFields, [], this.fieldIdsMap, this.customFilter, params, "project"); if(this.initialLoad) { this.initialLoad = false; this._getResults(); + this._getCommunityFunders(); }else{ this._getResults(); } @@ -119,73 +119,60 @@ export class OpenaireSearchProjectsComponent { this.disableForms = true; this.disableRefineForms = true; this.enableSearchView = false; - if(this.allResults) { - this.subscriptions.push(this._searchProjectsService.searchProjects(this.properties, this.communityId).subscribe( - data => { - this.originalFilters = this.createFilters(data.content).slice(); //copy array - this.allResults = this.parseResults(data.content); - this.filters = this.searchPage.prepareFiltersToShow(this.originalFilters, this.allResults.length); - this.filterResults(); - }, - err => { - this.handleError("Error getting projects for community with id: " + this.communityId, err); - this.searchUtils.status = this.errorMessages.getErrorCode(err.status); - this.enableSearchView = true; - } - )); - }else{ - this.filters = this.searchPage.prepareFiltersToShow(this.originalFilters, this.allResults.length); - this.filterResults(); - } + this.subscriptions.push(this._searchProjectsService.searchProjectsWithPaging(this.properties, this.communityId, this.searchUtils.page, this.searchUtils.size, this.searchUtils.keyword, this.selectedFunder, "name" ).subscribe( + data => { + this.searchUtils.totalResults = data['totalElements']; + this.filters = this.selectedFunder?this.createFilters([this.selectedFunder]):this.createFilters(this.originalFunders); + this.results = this.parseResults(data.content); + this.oldTotalResults = data['totalElements']; + this.searchUtils.totalResults = data['totalElements']; + this.searchUtils.status = this.results.length == 0 ? this.errorCodes.NONE: this.errorCodes.DONE; + this.disableForms = false; + this.disableRefineForms = false; + this.enableSearchView = true; + this.searchUtils.refineStatus = this.errorCodes.DONE; + }, + err => { + this.handleError("Error getting projects for community with id: " + this.communityId, err); + this.searchUtils.status = this.errorMessages.getErrorCode(err.status); + this.enableSearchView = true; + } + )); + } private createFilters(data):Filter[] { - let length = Array.isArray(data) ? data.length : 1; - - var filter_names=["Funder"]; - var filter_ids=["funder"]; - var filter_original_ids = ["funder"]; - - var value_names=[]; - var value_original_ids=[]; - var funders = new Set(); var value_name = []; var value_original_id = []; - let i; - for(i=0; i 0) { + if(value_name.length > 0) { var values: Value[] = []; - for (var j = 0; j < value_names[i].length; j++) { - var value: Value = {name: value_names[i][j], id: value_original_ids[i][j], number: j, selected: false} + for (var j = 0; j < value_name.length; j++) { + var value: Value = {name: value_name[j], id:value_name[j], number: 0, selected: this.selectedFunder == value_name[j] } values.push(value); } var filter: Filter = { - title: filter_names[i], - filterId: filter_ids[i], - originalFilterId: filter_original_ids[i], + title: "Funder", + filterId: "funder", + originalFilterId: "funder", values: values, - countSelectedValues: 0, + countSelectedValues: this.selectedFunder?1:0, "filterOperator": 'or', valueIsExact: true, filterType: "checkbox" }; filters.push(filter); } - } + return filters; } @@ -203,33 +190,31 @@ export class OpenaireSearchProjectsComponent { } return results; } - filterResults(){ - let results = this.allResults.filter(value => { return value.title.name && value.title.name.toLowerCase().indexOf(this.keyword.toLowerCase()) !=-1 || value.acronym && value.acronym.toLowerCase().indexOf(this.keyword.toLowerCase()) !=-1}); - let funderFilterValues = []; + getFunderFilterValue(){ for(let filter of this.filters){ if(filter.countSelectedValues > 0){ for(let value of filter.values){ if(value.selected) { - funderFilterValues.push(value.name); + return value.name; } } } } - if(funderFilterValues.length > 0) { - results = results.filter(value => { - return funderFilterValues.indexOf(value.funderShortname) != -1 - }); - } - this.oldTotalResults = results.length; - this.searchUtils.totalResults = results.length; - this.results = results.slice((this.searchUtils.page - 1) * this.searchUtils.size, this.searchUtils.page *this.searchUtils.size ); - this.searchUtils.status = this.results.length == 0 ? this.errorCodes.NONE: this.errorCodes.DONE; - this.disableForms = false; - this.disableRefineForms = false; - this.enableSearchView = true; - this.searchUtils.refineStatus = this.errorCodes.DONE; + return null; + } private handleError(message: string, error) { console.error("Projects simple Search Page: "+message, error); } + + public _getCommunityFunders() { + this.subscriptions.push(this._searchProjectsService.getProjectFunders(this.properties, this.communityId).subscribe( + data => { + this.originalFunders = data + }, + err => { + } + )); + } + }