import {ChangeDetectorRef, Component} from '@angular/core'; import {PluginBaseComponent, PluginBaseInfo} from "../../utils/base-plugin.component"; import {ConfigurationService} from '../../../../../openaireLibrary/utils/configuration/configuration.service'; import {CommunityService} from '../../../../../openaireLibrary/connect/community/community.service'; import {SearchCommunityProjectsService} from '../../../../../openaireLibrary/connect/projects/searchProjects.service'; import {SearchCommunityDataprovidersService} from '../../../../../openaireLibrary/connect/contentProviders/searchDataproviders.service'; import {ZenodoCommunitiesService} from '../../../../../openaireLibrary/connect/zenodoCommunities/zenodo-communities.service'; import {User} from '../../../../../openaireLibrary/login/utils/helper.class'; import {RouterHelper} from "../../../../utils/routerHelper.class"; import {OpenaireEntities} from "../../../../utils/properties/searchFields"; import {HttpClient} from "@angular/common/http"; import {Filter} from "../../../../searchPages/searchUtils/searchHelperClasses.class"; import {Router} from "@angular/router"; import {SearchResearchResultsService} from "../../../../services/searchResearchResults.service"; import {CustomizationService} from "../../../../services/customization.service"; export class PluginGatewayInformation extends PluginBaseInfo{ showTitle:boolean = true; showShortTitle:boolean = false; description:boolean = false; sdgs:boolean = false; fos:boolean = false; searchbar:boolean = false; title:string ="Gateway Information"; curators:boolean = true; date:boolean = true; communities:boolean = true; projects:boolean = true; organizations:boolean = true; datasources:boolean = true; subjects:boolean = true; publications:boolean = true; datasets:boolean = true; software:boolean = true; other:boolean = true; compare(oldObject): any { let newObj= super.compare(oldObject); return newObj; } } @Component({ selector: 'plugin-gateway-information', templateUrl: 'plugin-gateway-information.component.html', styleUrls: ['plugin-gateway-information.component.less'] }) export class PluginGatewayInformationComponent extends PluginBaseComponent{ default = new PluginGatewayInformation(); community = null; portal = null; params: any = {}; projectTotal = null; contentProviderTotal = null; projectsCalculated: boolean = false; contentProvidersCalculated: boolean = false; zenodoCommunityIdS = []; masterZenodoCommunity = null; searchLinkToProjects: string = null; searchLinkToDataProviders: string = null; shareInZenodoPage: string = null; displayedAllSubjects = []; displayedSubjects = []; displayedSdg = []; displayedFos = []; resultCounts = null; private user: User; searchLinkToResults: string = null; public routerHelper: RouterHelper = new RouterHelper(); openaireEntities= OpenaireEntities; selectedEntity = 'result'; selectedEntitySimpleUrl; selectedEntityAdvancedUrl; resultTypes: Filter = { values: [], filterId: "type", countSelectedValues: 0, filterType: 'checkbox', originalFilterId: "", valueIsExact: true, title: "Type", filterOperator: "or" }; keyword: string = ""; // customFilter; placeholderText = "Search by title, author, abstract, DOI, orcid... "; resultsQuickFilter: { filter: Filter, selected: boolean, filterId: string, value: string } = { filter: null, selected: true, filterId: "resultbestaccessright", value: "Open Access" }; disableSelect: boolean = true; constructor(private http:HttpClient, private config: ConfigurationService, private communityService: CommunityService, private searchCommunityProjectsService: SearchCommunityProjectsService, private searchCommunityDataprovidersService: SearchCommunityDataprovidersService, private zenodoCommunitiesService: ZenodoCommunitiesService, private _router: Router, private _searchResearchResultsService: SearchResearchResultsService, private cdr: ChangeDetectorRef, protected layoutService: CustomizationService) { super(); this.searchLinkToResults = this.properties.searchLinkToResults; this.searchLinkToProjects = this.properties.searchLinkToProjects; this.searchLinkToDataProviders = this.properties.searchLinkToDataProviders; this.shareInZenodoPage = this.properties.shareInZenodoPage; this.subscriptions.push(this.config.portalAsObservable.subscribe( res => { this.portal = res; }, error => { console.log(error); } )); this.subscriptions.push(this.communityService.getCommunityAsObservable().subscribe( community => { this.community = community; if (community) { this.displayedSubjects = community.subjects; this.displayedSdg = community.sdg; this.displayedFos = community.fos; this.displayedSubjects.forEach(element => { this.displayedAllSubjects.push({value: element, type: 'resultsubject'}); }); this.displayedSdg.forEach(element => { this.displayedAllSubjects.push({value: element, type: 'sdg'}); }); this.displayedFos.forEach(element => { this.displayedAllSubjects.push({value: element, type: 'fos'}); }); if (this.properties.environment == "development") { this.params = {communityId: community.communityId}; } if (this.community.zenodoCommunity) { this.subscriptions.push(this.zenodoCommunitiesService.getZenodoCommunityById(this.properties, this.community.zenodoCommunity).subscribe( res => { this.masterZenodoCommunity = res; }, error => { console.log(error); } )); } this.zenodoCommunityIdS = this.community.otherZenodoCommunities; // Double check below: is `this.community.communityId` correct? the other way was through @input communityID from ConnectHelper service - domain this.subscriptions.push(this.searchCommunityProjectsService.countTotalProjects(this.properties, this.community.communityId).subscribe( res => { this.projectTotal = res; }, error => { console.log(error); }, () => { this.projectsCalculated = true; } )); // Double check below: is `this.community.communityId` correct? the other way was through @input communityID from ConnectHelper service - domain this.subscriptions.push(this.searchCommunityDataprovidersService.countTotalDataproviders(this.properties, this.community.communityId).subscribe( res => { this.contentProviderTotal = res; }, error => { console.log(error); }, () => { this.contentProvidersCalculated = true; } )); this.subscriptions.push(this._searchResearchResultsService.countResults("communityid", this.community.communityId).subscribe(res => { this.resultCounts = res; })); } } )); } ngOnInit() { if (this.community) { this.getLayout(this.community.communityId); } } isEntityEnabled(entity: string) { return this.portal.entities.some(x => x['pid'] == entity && x['isEnabled'] === true); } isRouteEnabled(route: string) { return this.portal && this.portal.pages.some(x => x['route'] == route && x['isEnabled'] === true); } buildProjectsTooltip(): string { let tooltipContent: string = "
"; if (this.projectTotal != null && this.projectTotal > 0 && this.isEntityEnabled('project') && this.isRouteEnabled(this.searchLinkToProjects)) { tooltipContent += "Projects"; } tooltipContent += " have been selected as relevant for your community by the gateway curators."; tooltipContent += "
"; return tooltipContent; } public buildContentProvidersTooltip(): string { let tooltipContent: string = "
"; if (this.contentProviderTotal != null && this.contentProviderTotal > 0 && this.isEntityEnabled('datasource') && this.isRouteEnabled(this.searchLinkToDataProviders)) { tooltipContent += "Content Providers"; } tooltipContent += " have been selected as relevant for your community by the gateway curators."; tooltipContent += "
"; return tooltipContent; } public buildZenodoCommunitiesTooltip(): string { let tooltipContent: string = "
"; tooltipContent += "Zenodo is a catch-all repository for OpenAIRE."; tooltipContent += "
A Zenodo Community is created and curated by Zenodo users.
"; tooltipContent += "
"; return tooltipContent; } public getParamsForSearchLink(type: string = "") { if (type) { return this.routerHelper.createQueryParams(['type', 'qf', 'sortBy'], [type, 'false', 'resultdateofacceptance,descending']); } else { return {}; } } entityChanged($event) { this.selectedEntity = $event.entity; this.selectedEntitySimpleUrl = $event.simpleUrl; this.selectedEntityAdvancedUrl = $event.advancedUrl; if (this.selectedEntity == 'result') { this.placeholderText = "Search by title, author, abstract, DOI, orcid... "; } else if (this.selectedEntity == 'project') { this.placeholderText = "Search by project title, grant id, funder..."; } else if (this.selectedEntity == 'dataprovider') { this.placeholderText = "Search by name..."; } else { this.placeholderText = "Search community content"; } } goTo(simple: boolean) { let url = (simple) ? this.selectedEntitySimpleUrl : this.selectedEntityAdvancedUrl; let parameterNames = []; let parameterValues = []; if (this.selectedEntity == "result" && this.resultsQuickFilter && this.resultsQuickFilter.selected) { parameterNames.push(this.resultsQuickFilter.filterId); parameterValues.push('"'+ encodeURIComponent(this.resultsQuickFilter.value)+'"'); } if (this.keyword.length > 0) { parameterNames.push("fv0"); parameterValues.push(this.keyword); parameterNames.push("f0"); parameterValues.push("q"); } this._router.navigate([url], {queryParams: this.routerHelper.createQueryParams(parameterNames, parameterValues)}); } disableSelectChange(event: boolean) { this.disableSelect = event; this.cdr.detectChanges(); } }