From af50558136c0be40ca97f6a568cd29bdb7199fcd Mon Sep 17 00:00:00 2001 From: "konstantina.galouni" Date: Wed, 7 Feb 2024 22:56:11 +0200 Subject: [PATCH] [grouped-queries | DONE | CHANGED] funders.component.ts: Replaced search & stakeholders queries of funders (in Funders page) with grouped query for Funders page of EXPLORE --- explore/src/app/funders/funders.component.ts | 249 ++++++++++++------- explore/src/app/funders/funders.module.ts | 3 +- 2 files changed, 159 insertions(+), 93 deletions(-) diff --git a/explore/src/app/funders/funders.component.ts b/explore/src/app/funders/funders.component.ts index 800b8ced..f1de1989 100644 --- a/explore/src/app/funders/funders.component.ts +++ b/explore/src/app/funders/funders.component.ts @@ -17,6 +17,7 @@ import {NumberUtils} from '../openaireLibrary/utils/number-utils.class'; import {LayoutService} from '../openaireLibrary/dashboard/sharedComponents/sidebar/layout.service'; import {FormBuilder, FormControl} from '@angular/forms'; import {debounceTime, distinctUntilChanged} from 'rxjs/operators'; +import {GroupedRequestsService} from "../openaireLibrary/services/groupedRequests.service"; @Component({ selector: 'funders', @@ -85,7 +86,8 @@ export class FundersComponent implements OnInit { private stakeholderService: StakeholderService, private layoutService: LayoutService, private cdr: ChangeDetectorRef, - private fb: FormBuilder,) { + private fb: FormBuilder, + private groupedRequestsService: GroupedRequestsService) { } ngOnInit() { @@ -142,100 +144,155 @@ export class FundersComponent implements OnInit { } private getFunders() { - let refineParams = '&fq=resultbestaccessright%20exact%20%22Open%20Access%22'; - this.subscriptions.push( - zip( - this.refineFieldResultsService.getAllRefineFieldResultsByFieldName('relfunder', 'result', this.properties), - this.refineFieldResultsService.getAllRefineFieldResultsByFieldName('relfunder', 'result', this.properties, refineParams), - this.refineFieldResultsService.getAllRefineFieldResultsByFieldName('funder', 'project', this.properties), - this.stakeholderService.getStakeholders(this.properties.monitorServiceAPIURL, 'funder') - ).subscribe((data: any[]) => { - // storing all needed data to a map - // 1st call - let queriedFunders1 = data[0][1][0].values; - queriedFunders1.forEach(queriedFunder => { - this.fundersMap.set(queriedFunder.id, { - "id": queriedFunder.id, - "name": queriedFunder.name, - "alias": '', - "researchProducts": +queriedFunder.number, - "openAccessResearchProducts": 0, - "openAccessPercentage": 0, - "projects": 0, - "monitorDashboard": '', - "monitorDashboardStatus": '', - "logoUrl": '' - }); - }); + this.subscriptions.push(this.groupedRequestsService.funders().subscribe(data => { + let funders = data["funders"]; + funders.forEach(queriedFunder => { + let id = queriedFunder.id; + let funder = { + "id": id, + "name": this.removePartAfterCharacters(queriedFunder.name, "||"), + "alias": '', + "researchProducts": +queriedFunder.results, + "openAccessResearchProducts": +queriedFunder.openResults, + "openAccessPercentage": 0, + "projects": +queriedFunder.projects, + "monitorDashboard": '', + "monitorDashboardStatus": '', + "logoUrl": '' + }; - // 2nd call - let queriedFunders2 = data[1][1][0].values; - queriedFunders2.forEach(queriedFunder => { - if(this.fundersMap.has(queriedFunder.id)) { - this.fundersMap.get(queriedFunder.id).openAccessResearchProducts = +queriedFunder.number; - } - }); + if((!funder.researchProducts || funder.researchProducts == 0) && (!funder.projects || funder.projects == 0)) { + return; + } - // 3rd call - let queriedFunders3 = data[2][1][0].values; - queriedFunders3.forEach(queriedFunder => { - if(+queriedFunder.number > 1) { - if (this.fundersMap.has(queriedFunder.id)) { - this.fundersMap.get(queriedFunder.id).projects = +queriedFunder.number; - } else { - this.fundersMap.set(queriedFunder.id, { - "id": queriedFunder.id, - "name": queriedFunder.name, - "alias": '', - "researchProducts": 0, - "openAccessResearchProducts": 0, - "openAccessPercentage": 0, - "projects": +queriedFunder.number, - "monitorDashboard": '', - "monitorDashboardStatus": '', - "logoUrl": '' - }); - } - } - }); + if(queriedFunder.stakeholder) { + let stakeholder = queriedFunder.stakeholder; + funder.alias = stakeholder.alias; + funder.monitorDashboard = stakeholder.alias; + funder.monitorDashboardStatus = stakeholder.visibility; + funder.logoUrl = (stakeholder.isUpload ? properties.utilsService + "/download/" : "")+ (stakeholder.logoUrl); + } - // 4th call - let queriedFunders4 = data[3]; - queriedFunders4.forEach(queriedFunder => { - let id = queriedFunder.index_id + '||' + queriedFunder.index_name + '||' + queriedFunder.index_shortName; - if(this.fundersMap.has(id) && ( - !this.fundersMap.get(id).monitorDashboardStatus - || - (this.fundersMap.get(id).monitorDashboardStatus == "RESTRICTED" && queriedFunder.visibility == "PUBLIC") - || - (this.fundersMap.get(id).monitorDashboardStatus == "PRIVATE" && (queriedFunder.visibility == "RESTRICTED" || queriedFunder.visibility == "PUBLIC")))) { - this.fundersMap.get(id).alias = queriedFunder.alias; - this.fundersMap.get(id).monitorDashboard = queriedFunder.alias; - this.fundersMap.get(id).monitorDashboardStatus = queriedFunder.visibility; - this.fundersMap.get(id).logoUrl = (queriedFunder.isUpload ? properties.utilsService + "/download/" : "")+ (queriedFunder.logoUrl); - } - }); - this.fundersMap.forEach((value) => { - if(value.openAccessResearchProducts > 0) { - value.openAccessPercentage = Math.round((value.openAccessResearchProducts / value.researchProducts) * 100); - } - if(!value.logoUrl && this.staticLogos.has(value.id)) { - let split = value.id.split("||"); - let shortname = (split && split.length==3) ? value.id.split("||")[2] : value.id; - value.logoUrl = "assets/explore-assets/funders/logos/"+shortname+".png"; - } - }); - // convert funders map into an array - this.funders = Array.from(this.fundersMap.values()); - // calculate total numbers for intro content - this.calculateNumbers(); - // sort funders - this.funders.sort((a, b) => a['name'].localeCompare(b['name'])); - // initialize displayedFunders - this.displayedFunders = this.funders; - this.showLoading = false; - }) - ); + if(funder.openAccessResearchProducts && funder.researchProducts) { + funder.openAccessPercentage = Math.round((funder.openAccessResearchProducts / funder.researchProducts) * 100); + } + + if(!funder.logoUrl && this.staticLogos.has(funder.id)) { + let split = funder.id.split("||"); + let shortname = (split && split.length==3) ? funder.id.split("||")[2] : funder.id; + funder.logoUrl = "assets/explore-assets/funders/logos/"+shortname+".png"; + } + + this.fundersMap.set(queriedFunder.id, funder); + }); + // convert funders map into an array + this.funders = Array.from(this.fundersMap.values()); + // calculate total numbers for intro content + this.fundersNumber = data.count; + this.researchProductsNumber = data.results; + this.projectsNumber = data.projects; + // sort funders + this.funders.sort((a, b) => a['name'].localeCompare(b['name'])); + // initialize displayedFunders + this.displayedFunders = this.funders; + this.showLoading = false; + })) + + // let refineParams = '&fq=resultbestaccessright%20exact%20%22Open%20Access%22'; + // this.subscriptions.push( + // zip( + // this.refineFieldResultsService.getAllRefineFieldResultsByFieldName('relfunder', 'result', this.properties), + // this.refineFieldResultsService.getAllRefineFieldResultsByFieldName('relfunder', 'result', this.properties, refineParams), + // this.refineFieldResultsService.getAllRefineFieldResultsByFieldName('funder', 'project', this.properties), + // this.stakeholderService.getStakeholders(this.properties.monitorServiceAPIURL, 'funder') + // ).subscribe((data: any[]) => { + // // storing all needed data to a map + // // 1st call + // let queriedFunders1 = data[0][1][0].values; + // queriedFunders1.forEach(queriedFunder => { + // this.fundersMap.set(queriedFunder.id, { + // "id": queriedFunder.id, + // "name": queriedFunder.name, + // "alias": '', + // "researchProducts": +queriedFunder.number, + // "openAccessResearchProducts": 0, + // "openAccessPercentage": 0, + // "projects": 0, + // "monitorDashboard": '', + // "monitorDashboardStatus": '', + // "logoUrl": '' + // }); + // }); + // + // // 2nd call + // let queriedFunders2 = data[1][1][0].values; + // queriedFunders2.forEach(queriedFunder => { + // if(this.fundersMap.has(queriedFunder.id)) { + // this.fundersMap.get(queriedFunder.id).openAccessResearchProducts = +queriedFunder.number; + // } + // }); + // + // // 3rd call + // let queriedFunders3 = data[2][1][0].values; + // queriedFunders3.forEach(queriedFunder => { + // if(+queriedFunder.number > 1) { + // if (this.fundersMap.has(queriedFunder.id)) { + // this.fundersMap.get(queriedFunder.id).projects = +queriedFunder.number; + // } else { + // this.fundersMap.set(queriedFunder.id, { + // "id": queriedFunder.id, + // "name": queriedFunder.name, + // "alias": '', + // "researchProducts": 0, + // "openAccessResearchProducts": 0, + // "openAccessPercentage": 0, + // "projects": +queriedFunder.number, + // "monitorDashboard": '', + // "monitorDashboardStatus": '', + // "logoUrl": '' + // }); + // } + // } + // }); + // + // // 4th call + // let queriedFunders4 = data[3]; + // queriedFunders4.forEach(queriedFunder => { + // let id = queriedFunder.index_id + '||' + queriedFunder.index_name + '||' + queriedFunder.index_shortName; + // if(this.fundersMap.has(id) && ( + // !this.fundersMap.get(id).monitorDashboardStatus + // || + // (this.fundersMap.get(id).monitorDashboardStatus == "RESTRICTED" && queriedFunder.visibility == "PUBLIC") + // || + // (this.fundersMap.get(id).monitorDashboardStatus == "PRIVATE" && (queriedFunder.visibility == "RESTRICTED" || queriedFunder.visibility == "PUBLIC")))) { + // this.fundersMap.get(id).alias = queriedFunder.alias; + // this.fundersMap.get(id).monitorDashboard = queriedFunder.alias; + // this.fundersMap.get(id).monitorDashboardStatus = queriedFunder.visibility; + // this.fundersMap.get(id).logoUrl = (queriedFunder.isUpload ? properties.utilsService + "/download/" : "")+ (queriedFunder.logoUrl); + // } + // }); + // this.fundersMap.forEach((value) => { + // if(value.openAccessResearchProducts > 0) { + // value.openAccessPercentage = Math.round((value.openAccessResearchProducts / value.researchProducts) * 100); + // } + // if(!value.logoUrl && this.staticLogos.has(value.id)) { + // let split = value.id.split("||"); + // let shortname = (split && split.length==3) ? value.id.split("||")[2] : value.id; + // value.logoUrl = "assets/explore-assets/funders/logos/"+shortname+".png"; + // } + // }); + // // convert funders map into an array + // this.funders = Array.from(this.fundersMap.values()); + // // calculate total numbers for intro content + // this.calculateNumbers(); + // // sort funders + // this.funders.sort((a, b) => a['name'].localeCompare(b['name'])); + // // initialize displayedFunders + // this.displayedFunders = this.funders; + // console.log(this.funders); + // this.showLoading = false; + // }) + // ); } private calculateSum(array, property) { @@ -305,4 +362,12 @@ export class FundersComponent implements OnInit { this.currentPage = $event.value; HelperFunctions.scrollToId('target'); } + + private removePartAfterCharacters(field, characters):string { + if(field && field.indexOf(characters) !=-1){ + return field.split(characters)[0]; + + } + return field; + } } diff --git a/explore/src/app/funders/funders.module.ts b/explore/src/app/funders/funders.module.ts index c89e2d64..e95a5a5f 100644 --- a/explore/src/app/funders/funders.module.ts +++ b/explore/src/app/funders/funders.module.ts @@ -20,6 +20,7 @@ import {closed_access} from '../openaireLibrary/utils/icons/icons'; import {InputModule} from '../openaireLibrary/sharedComponents/input/input.module'; import {PagingModule} from '../openaireLibrary/utils/paging.module'; import {SearchInputModule} from '../openaireLibrary/sharedComponents/search-input/search-input.module'; +import {GroupedRequestsServiceModule} from "../openaireLibrary/services/groupedRequestsService.module"; @NgModule({ @@ -27,7 +28,7 @@ import {SearchInputModule} from '../openaireLibrary/sharedComponents/search-inpu FundersRoutingModule, CommonModule, RouterModule, AlertModalModule, Schema2jsonldModule, SEOServiceModule, BreadcrumbsModule, LoadingModule, RefineFieldResultsServiceModule, LogoUrlPipeModule, IconsModule, InputModule, - PagingModule, SearchInputModule + PagingModule, SearchInputModule, GroupedRequestsServiceModule ], declarations: [ FundersComponent