@ -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 ;
}
}