2020-03-30 16:24:56 +02:00
import { ChangeDetectorRef , Component , Input , ViewChild } from '@angular/core' ;
2020-02-19 16:35:48 +01:00
import { ActivatedRoute , Router } from '@angular/router' ;
import { Location } from '@angular/common' ;
2022-09-21 09:29:11 +02:00
import { Meta , Title } from '@angular/platform-browser' ;
2020-02-19 16:35:48 +01:00
import { FetchResearchResults } from '../../utils/fetchEntitiesClasses/fetchResearchResults.class' ;
import { FetchDataproviders } from '../../utils/fetchEntitiesClasses/fetchDataproviders.class' ;
import { FetchProjects } from '../../utils/fetchEntitiesClasses/fetchProjects.class' ;
import { FetchOrganizations } from '../../utils/fetchEntitiesClasses/fetchOrganizations.class' ;
import { SearchResearchResultsService } from '../../services/searchResearchResults.service' ;
import { SearchDataprovidersService } from '../../services/searchDataproviders.service' ;
import { SearchProjectsService } from '../../services/searchProjects.service' ;
import { SearchOrganizationsService } from '../../services/searchOrganizations.service' ;
2022-04-15 23:49:35 +02:00
import { OpenaireEntities , SearchFields } from '../../utils/properties/searchFields' ;
2020-02-19 16:35:48 +01:00
import { ErrorCodes } from '../../utils/properties/errorCodes' ;
import { RouterHelper } from '../../utils/routerHelper.class' ;
import { RefineFieldResultsService } from '../../services/refineFieldResults.service' ;
import { PiwikService } from '../../utils/piwik/piwik.service' ;
import { ConfigurationService } from '../../utils/configuration/configuration.service' ;
import { EnvProperties } from '../../utils/properties/env-properties' ;
import { SEOService } from '../../sharedComponents/SEO/SEO.service' ;
import { StringUtils } from '../../utils/string-utils.class' ;
import { SearchCustomFilter } from "../searchUtils/searchUtils.class" ;
2024-02-27 18:15:39 +01:00
import { combineLatest , Subscription } from "rxjs" ;
import { debounceTime , map } from "rxjs/operators" ;
2020-02-19 16:35:48 +01:00
import { AdvancedField , Filter } from "../searchUtils/searchHelperClasses.class" ;
2020-03-30 16:24:56 +02:00
import { SearchResearchResultsComponent } from "../searchResearchResults.component" ;
import { SearchProjectsComponent } from "../searchProjects.component" ;
import { SearchOrganizationsComponent } from "../searchOrganizations.component" ;
import { SearchDataProvidersComponent } from "../searchDataProviders.component" ;
2022-04-15 23:49:35 +02:00
import { NewSearchPageComponent , SearchForm } from "../searchUtils/newSearchPage.component" ;
2020-11-18 17:06:27 +01:00
import { properties } from "../../../../environments/environment" ;
2022-04-15 23:49:35 +02:00
import { Breadcrumb } from "../../utils/breadcrumbs/breadcrumbs.component" ;
2023-05-19 16:49:38 +02:00
import { LayoutService } from "../../dashboard/sharedComponents/sidebar/layout.service" ;
2024-02-07 21:50:13 +01:00
import { GroupedRequestsService } from "../../services/groupedRequests.service" ;
2020-02-19 16:35:48 +01:00
@Component ( {
selector : 'search-all' ,
templateUrl : 'searchAll.component.html'
} )
export class SearchAllComponent {
2023-05-19 16:49:38 +02:00
isMobile : boolean = false ;
2024-02-07 21:50:13 +01:00
reload : { result :boolean , projects :boolean , datasources : boolean , services : boolean , organizations :boolean , all : boolean } =
{ result :true , projects :true , datasources : true , services : true , organizations : true , all : true } ;
allCounts = null ;
2020-02-19 16:35:48 +01:00
public pageTitle = "Search in OpenAIRE"
public keyword : string = "" ;
public publications : string [ ] ;
public datasets : string [ ] ;
public software : string [ ] ;
public orps : string [ ] ;
public projectsTab : string [ ] ;
public dataproviders : string [ ] ;
public organizations : string [ ] ;
public activeEntity = null ;
public linkToSearchPublications = "" ;
public linkToSearchProjects = "" ;
public linkToSearchDataproviders = "" ;
public linkToSearchOrganizations = "" ;
public fetchPublications : FetchResearchResults ;
public fetchDataproviders : FetchDataproviders ;
2022-05-13 14:57:31 +02:00
public fetchServices : FetchDataproviders ;
2020-02-19 16:35:48 +01:00
public fetchProjects : FetchProjects ;
public fetchDatasets : FetchResearchResults ;
public fetchSoftware : FetchResearchResults ;
public fetchOrps : FetchResearchResults ;
public fetchOrganizations : FetchOrganizations ;
public searchFields : SearchFields = new SearchFields ( ) ;
public errorCodes : ErrorCodes = new ErrorCodes ( ) ;
public routerHelper : RouterHelper = new RouterHelper ( ) ;
2022-04-15 23:49:35 +02:00
public resultsName = OpenaireEntities . RESULTS ;
public projectName = OpenaireEntities . PROJECTS ;
public organizationsName = OpenaireEntities . ORGANIZATIONS ;
public dataSourcesName = OpenaireEntities . DATASOURCES ;
2022-05-13 14:57:31 +02:00
public servicesName = OpenaireEntities . SERVICES ;
2020-02-19 16:35:48 +01:00
showPublications : boolean = false ;
showDatasets : boolean = false ;
showSoftware : boolean = false ;
showOrps : boolean = false ;
showProjects : boolean = false ;
showDataProviders : boolean = false ;
2022-05-13 14:57:31 +02:00
showServices : boolean = false ;
2020-02-19 16:35:48 +01:00
showOrganizations : boolean = false ;
2023-05-16 11:28:35 +02:00
advancedSearchLink : string = properties . searchLinkToAdvancedResults ;
2024-07-02 12:51:15 +02:00
properties : EnvProperties = properties ;
2023-05-11 11:42:28 +02:00
offset : number ;
[Monitor Dashboard & Library | new-theme]: Renaming entity types using OpenaireEntities.
Files updated: develop.component.ts, methodology.component.ts, claimEntitiesSelection.component.ts, directLinking.component.ts, linkingGeneric.component.html, linkingGeneric.component.ts, approved.component.ts, searchDataprovidersToDeposit.component.ts, errorPage.component.ts, dataProvider.component.html, dataProvider.component.ts, dataProvider.service.ts, relatedDatasourcesTab.component.ts, project.component.ts, myOrcidLinks.component.ts, searchMyOrcidResults.component.html, searchMyOrcidResults.component.ts, searchAll.component.html, searchAll.component.ts, advancedSearchForm.component.html, advancedSearchForm.component.ts, searchDataProviders.component.ts, searchResearchResults.service.ts, numbers.component.ts, other-portals.component.html, other-portals.component.ts, fetchDataproviders.class.ts, fetchResearchResults.class.ts, searchFields.ts, result-preview.component.ts
2022-05-09 12:13:44 +02:00
public openaireEntities = OpenaireEntities ;
2020-02-19 16:35:48 +01:00
@Input ( ) logoURL ;
@Input ( ) name ;
2020-04-22 15:00:13 +02:00
@Input ( ) customFilter : SearchCustomFilter = null ;
2023-07-12 14:05:25 +02:00
2023-07-24 15:25:20 +02:00
@Input ( ) formPlaceholderText = "Search"
2023-04-21 10:04:43 +02:00
// @Input() formPlaceholderText = "Search for "+OpenaireEntities.RESULTS+", "+OpenaireEntities.PROJECTS+", "+OpenaireEntities.DATASOURCES+" & "+OpenaireEntities.ORGANIZATIONS+" in OpenAIRE";
2022-04-15 23:49:35 +02:00
@Input ( ) searchForm : SearchForm = { class : 'search-form' , dark : true }
@Input ( ) breadcrumbs : Breadcrumb [ ] = [ ] ;
2023-07-11 14:11:37 +02:00
@Input ( ) openAccess : boolean = true ;
2020-07-13 00:19:30 +02:00
subs : Subscription [ ] = [ ] ;
2020-02-19 16:35:48 +01:00
2024-02-07 20:28:45 +01:00
quickFilter : { filter : Filter , selected : boolean , filterId : string , value : string } = null ; //{
// filter: null,
// selected: true,
// filterId: "resultbestaccessright",
// value: "Open Access"
// };
2020-02-19 16:35:48 +01:00
resultTypes = { publication : true , dataset : true , software : true , other : true } ;
//adv Search Form
2022-09-08 23:46:44 +02:00
public fieldIds : string [ ] = this . searchFields . getResultAdvancedFields ( ) ;
2020-02-19 16:35:48 +01:00
public fieldIdsMap = this . searchFields . RESULT_FIELDS ;
public selectedFields : AdvancedField [ ] = [ ] ;
//new
parameters = { } ;
disableForms : boolean = true ;
2021-07-14 13:19:57 +02:00
@ViewChild ( SearchResearchResultsComponent ) searchResearchResultsComponent : SearchResearchResultsComponent ;
@ViewChild ( SearchProjectsComponent ) searchProjectsComponent : SearchProjectsComponent ;
@ViewChild ( SearchDataProvidersComponent ) searchDataprovidersComponent : SearchDataProvidersComponent ;
2022-05-13 14:57:31 +02:00
@ViewChild ( SearchDataProvidersComponent ) searchServicesComponent : SearchDataProvidersComponent ;
2021-07-14 13:19:57 +02:00
@ViewChild ( SearchOrganizationsComponent ) searchOrganizationsComponent : SearchOrganizationsComponent ;
2020-02-19 16:35:48 +01:00
constructor ( private route : ActivatedRoute ,
private _router : Router ,
private _searchResearchResultsService : SearchResearchResultsService ,
private _searchDataprovidersService : SearchDataprovidersService ,
private _searchProjectsService : SearchProjectsService ,
private _searchOrganizationsService : SearchOrganizationsService ,
private _refineFieldResultsService : RefineFieldResultsService ,
2024-02-07 21:50:13 +01:00
private groupedRequestsService : GroupedRequestsService ,
2020-02-19 16:35:48 +01:00
private location : Location ,
private _meta : Meta ,
private _title : Title ,
private _piwikService : PiwikService ,
private config : ConfigurationService ,
2023-05-19 16:49:38 +02:00
private layoutService : LayoutService ,
2020-02-19 16:35:48 +01:00
private seoService : SEOService , private router : Router , private cdr :ChangeDetectorRef ) {
this . fetchPublications = new FetchResearchResults ( this . _searchResearchResultsService ) ;
this . fetchDataproviders = new FetchDataproviders ( this . _searchDataprovidersService ) ;
2022-05-13 14:57:31 +02:00
this . fetchServices = new FetchDataproviders ( this . _searchDataprovidersService ) ;
2020-02-19 16:35:48 +01:00
this . fetchProjects = new FetchProjects ( this . _searchProjectsService ) ;
this . fetchDatasets = new FetchResearchResults ( this . _searchResearchResultsService ) ;
this . fetchSoftware = new FetchResearchResults ( this . _searchResearchResultsService ) ;
this . fetchOrps = new FetchResearchResults ( this . _searchResearchResultsService ) ;
this . fetchOrganizations = new FetchOrganizations ( this . _searchOrganizationsService ) ;
2022-06-23 16:30:45 +02:00
this . searchFields . sortFieldsByName ( this . fieldIds , this . fieldIdsMap ) ;
2020-02-19 16:35:48 +01:00
this . selectedFields . push ( new AdvancedField ( this . fieldIds [ 0 ] , this . fieldIdsMap [ this . fieldIds [ 0 ] ] . param , this . fieldIdsMap [ this . fieldIds [ 0 ] ] . name , this . fieldIdsMap [ this . fieldIds [ 0 ] ] . type , '' , "and" ) ) ;
}
public ngOnInit() {
2020-11-18 17:06:27 +01:00
2023-05-15 16:28:33 +02:00
var description = "Search for " + OpenaireEntities . RESULTS + " (" + OpenaireEntities . PUBLICATIONS + ", " + OpenaireEntities . DATASETS + ", " + OpenaireEntities . SOFTWARE + ", " + OpenaireEntities . OTHER + "), " + OpenaireEntities . PROJECTS + ", " + OpenaireEntities . ORGANIZATIONS + ", " + OpenaireEntities . DATASOURCES + " in the OpenAIRE Graph. " ;
[Monitor Dashboard & Library | new-theme]: Renaming entity types using OpenaireEntities.
Files updated: develop.component.ts, methodology.component.ts, claimEntitiesSelection.component.ts, directLinking.component.ts, linkingGeneric.component.html, linkingGeneric.component.ts, approved.component.ts, searchDataprovidersToDeposit.component.ts, errorPage.component.ts, dataProvider.component.html, dataProvider.component.ts, dataProvider.service.ts, relatedDatasourcesTab.component.ts, project.component.ts, myOrcidLinks.component.ts, searchMyOrcidResults.component.html, searchMyOrcidResults.component.ts, searchAll.component.html, searchAll.component.ts, advancedSearchForm.component.html, advancedSearchForm.component.ts, searchDataProviders.component.ts, searchResearchResults.service.ts, numbers.component.ts, other-portals.component.html, other-portals.component.ts, fetchDataproviders.class.ts, fetchResearchResults.class.ts, searchFields.ts, result-preview.component.ts
2022-05-09 12:13:44 +02:00
var title = "OpenAIRE |Search for " + OpenaireEntities . RESULTS + ", " + OpenaireEntities . PROJECTS + ", " + OpenaireEntities . DATASOURCES + " & " + OpenaireEntities . ORGANIZATIONS ;
2020-09-18 12:10:18 +02:00
var url = this . properties . domain + this . properties . baseLink + this . _router . url ;
2020-02-19 16:35:48 +01:00
this . _title . setTitle ( title ) ;
this . _meta . updateTag ( { content : description } , "name='description'" ) ;
this . _meta . updateTag ( { content : description } , "property='og:description'" ) ;
this . _meta . updateTag ( { content : title } , "property='og:title'" ) ;
this . _meta . updateTag ( { content : url } , "property='og:url'" ) ;
2020-09-18 09:57:42 +02:00
this . seoService . createLinkForCanonicalURL ( this . properties . domain + this . properties . baseLink + this . _router . url , false ) ;
2023-07-12 14:05:25 +02:00
this . subs . push ( this . _piwikService . trackView ( this . properties , title ) . subscribe ( ) ) ;
2020-04-03 18:00:19 +02:00
if ( ( this . customFilter && this . customFilter . queryFieldName == "communityId" ) || this . properties . adminToolsCommunity ) {
2020-07-13 00:19:30 +02:00
//this.config.getCommunityInformation(this.properties, (this.customFilter && this.customFilter.queryFieldName == "communityId") ? this.customFilter.valueId : this.properties.adminToolsCommunity).subscribe(data => {
2023-04-26 13:10:45 +02:00
this . subs . push ( this . config . portalAsObservable . subscribe ( data = > {
2020-12-07 11:22:24 +01:00
if ( data && data [ 'entities' ] ) {
2020-07-13 00:19:30 +02:00
var showEntity = { } ;
for ( var i = 0 ; i < data [ 'entities' ] . length ; i ++ ) {
showEntity [ "" + data [ 'entities' ] [ i ] [ "pid" ] + "" ] = data [ 'entities' ] [ i ] [ "isEnabled" ] ;
}
this . showPublications = showEntity [ "publication" ] ;
this . showDatasets = showEntity [ "dataset" ] ;
this . showProjects = showEntity [ "project" ] ;
this . showOrganizations = showEntity [ "organization" ] ;
this . showDataProviders = showEntity [ "datasource" ] ;
2022-05-13 14:57:31 +02:00
this . showServices = showEntity [ "service" ] ;
2020-07-13 00:19:30 +02:00
this . showSoftware = showEntity [ "software" ] ;
this . showOrps = showEntity [ "orp" ] ;
if ( this . customFilter && this . customFilter . queryFieldName == "communityId" ) {
this . showProjects = false ;
this . showOrganizations = false ;
this . showDataProviders = false ;
2022-05-13 14:57:31 +02:00
this . showServices = false ;
2020-07-13 00:19:30 +02:00
}
this . loadAll ( ) ;
2020-02-19 16:35:48 +01:00
}
2020-07-13 00:19:30 +02:00
} ) ) ;
2020-02-19 16:35:48 +01:00
} else {
if ( ( this . customFilter && this . customFilter . queryFieldName == "country" ) ) {
this . showPublications = true ;
this . showDatasets = true ;
this . showSoftware = true ;
this . showOrps = true ;
this . showProjects = true ;
this . showOrganizations = true ;
this . showDataProviders = true ;
2022-05-13 14:57:31 +02:00
this . showServices = false ;
2020-02-19 16:35:48 +01:00
}
2023-05-15 16:28:33 +02:00
this . loadAll ( ) ;
2020-02-19 16:35:48 +01:00
}
2020-11-18 17:06:27 +01:00
2023-05-19 16:49:38 +02:00
this . subs . push ( this . layoutService . isMobile . subscribe ( isMobile = > {
this . isMobile = isMobile ;
2020-02-19 16:35:48 +01:00
2023-05-19 16:49:38 +02:00
if ( typeof document !== 'undefined' ) {
if ( ! this . isMobile && document . getElementById ( "main-menu" ) ) {
this . offset = Number . parseInt ( getComputedStyle ( document . documentElement ) . getPropertyValue ( '--header-height' ) ) ;
this . cdr . detectChanges ( ) ;
} else {
this . offset = 0 ;
this . cdr . detectChanges ( ) ;
}
2023-05-11 11:42:28 +02:00
}
2023-05-19 16:49:38 +02:00
} ) )
2020-02-19 16:35:48 +01:00
}
loadAll() {
this . reloadTabs ( ) ;
2024-02-27 18:15:39 +01:00
// https://github.com/angular/angular/issues/26764
this . subs . push ( combineLatest ( [ this . route . params , this . route . queryParams ] )
. pipe ( debounceTime ( 0 ) )
. pipe ( map ( results = > ( { params : results [ 0 ] , query : results [ 1 ] } ) ) )
. subscribe ( results = > {
let params = results [ 'params' ] ;
let queryParams = results [ 'query' ] ;
2024-02-07 21:50:13 +01:00
this . parameters = Object . assign ( { } , queryParams ) ;
this . keyword = ( queryParams [ 'keyword' ] ) ? queryParams [ 'keyword' ] : ( queryParams [ "q" ] ? queryParams [ "q" ] : ( queryParams [ "f0" ] && queryParams [ "f0" ] == "q" && queryParams [ "fv0" ] ? queryParams [ "fv0" ] : "" ) ) ;
this . selectedFields [ 0 ] . value = StringUtils . URIDecode ( this . keyword ) ;
// this.quickFilter.selected = ((queryParams['qf']== undefined || queryParams["qf"] == "true") == true);
if ( queryParams [ "type" ] && queryParams [ "type" ] . length > 0 ) {
this . resultTypes [ 'publication' ] = ( queryParams [ "type" ] . split ( "," ) . indexOf ( "publications" ) != - 1 ) ;
this . resultTypes [ 'dataset' ] = ( queryParams [ "type" ] . split ( "," ) . indexOf ( "datasets" ) != - 1 ) ;
this . resultTypes [ 'software' ] = ( queryParams [ "type" ] . split ( "," ) . indexOf ( "software" ) != - 1 ) ;
this . resultTypes [ 'other' ] = ( queryParams [ "type" ] . split ( "," ) . indexOf ( "other" ) != - 1 ) ;
}
let active = null ;
if ( queryParams [ "active" ] && queryParams [ "active" ] . length > 0 ) {
active = ( ( [ "result" , "projects" , "organizations" , "datasources" , "services" ] ) . indexOf ( queryParams [ "active" ] ) != - 1 ) ? queryParams [ "active" ] : null ;
delete this . parameters [ 'active' ] ;
}
2024-02-27 18:15:39 +01:00
// if(this.activeEntity == null) {
if ( this . activeEntity == null && ( ! params [ "entity" ] || params [ "entity" ] . length == 0 ) && ( ! active || this . activeEntity != active ) ) {
2024-02-07 21:50:13 +01:00
if ( active ) {
this . activeEntity = active ;
if ( ( typeof document !== 'undefined' ) ) {
if ( active == "result" ) {
active = "research-outcomes" ;
}
let query = location . search . replace ( /(active=)([^&]*)&?/ , '' ) ;
this . location . go ( location . pathname + '/' + active , query == '?' ? '' : query ) ;
2023-05-10 15:35:20 +02:00
}
2024-02-07 21:50:13 +01:00
} else {
this . activeEntity = this . getDefaultEntityToShow ( ) ;
2023-05-10 15:35:20 +02:00
}
2024-02-07 21:50:13 +01:00
} else if ( params [ "entity" ] && params [ "entity" ] . length > 0 ) {
let entity = params [ "entity" ] ;
if ( entity == "research-outcomes" ) {
entity = "result" ;
} else if ( entity == "dataproviders" ) {
entity = "datasources" ;
}
this . activeEntity = ( ( [ "result" , "projects" , "organizations" , "datasources" , "services" ] ) . indexOf ( entity ) != - 1 ) ? entity : this.getDefaultEntityToShow ( ) ;
2023-05-10 14:10:00 +02:00
}
2024-02-27 18:15:39 +01:00
// }
2023-05-10 14:10:00 +02:00
if ( this . activeEntity == "result" ) {
this . searchResults ( ) ;
} else if ( this . activeEntity == "projects" ) {
this . searchProjects ( ) ;
} else if ( this . activeEntity == "datasources" ) {
this . searchDataProviders ( ) ;
} else if ( this . activeEntity == "services" ) {
this . searchServices ( ) ;
} else if ( this . activeEntity == "organizations" ) {
this . searchOrganizations ( ) ;
}
this . count ( ) ;
2024-02-27 18:15:39 +01:00
// }));
2020-07-13 00:19:30 +02:00
} ) ) ;
2020-02-19 16:35:48 +01:00
}
getDefaultEntityToShow ( ) {
if ( this . showPublications || this . showDatasets || this . showSoftware || this . showOrps ) {
return "result" ;
} else if ( this . showProjects ) {
return "projects" ;
} else if ( this . showDataProviders ) {
2022-09-21 09:29:11 +02:00
return "datasources" ;
2020-02-19 16:35:48 +01:00
} else if ( this . showOrganizations ) {
return "organizations" ;
}
}
public ngOnDestroy() {
2020-07-13 00:19:30 +02:00
for ( let sub of this . subs ) {
sub . unsubscribe ( ) ;
2020-02-19 16:35:48 +01:00
}
2020-11-11 15:43:13 +01:00
this . fetchDatasets . clearSubscriptions ( ) ;
this . fetchPublications . clearSubscriptions ( ) ;
this . fetchSoftware . clearSubscriptions ( ) ;
2024-02-07 20:28:45 +01:00
this . fetchOrps . clearSubscriptions ( ) ;
2020-11-11 15:43:13 +01:00
this . fetchOrganizations . clearSubscriptions ( ) ;
this . fetchDataproviders . clearSubscriptions ( ) ;
2022-05-13 14:57:31 +02:00
this . fetchServices . clearSubscriptions ( ) ;
2020-11-11 15:43:13 +01:00
this . fetchProjects . clearSubscriptions ( ) ;
2020-02-19 16:35:48 +01:00
}
public searchResults() {
2023-05-16 11:28:35 +02:00
this . advancedSearchLink = this . properties . searchLinkToAdvancedResults ; //"/search/advanced/research-outcomes";
2023-05-19 18:09:37 +02:00
this . formPlaceholderText = "Search by title, author, abstract, DOI, orcid..." ;
2020-02-19 16:35:48 +01:00
if ( this . reload [ this . activeEntity ] &&
this . fetchPublications . searchUtils . status != this . errorCodes . NONE ) {
this . reload [ this . activeEntity ] = false ;
this . linkToSearchPublications = this . properties . searchLinkToPublications ; // + "?keyword=" + this.keyword;
}
}
public searchProjects() {
this . advancedSearchLink = this . properties . searchLinkToAdvancedProjects ; //"/search/advanced/projects";
2023-05-19 18:09:37 +02:00
this . formPlaceholderText = "Search by title, acronym, project code..." ;
2020-02-19 16:35:48 +01:00
if ( this . reload [ this . activeEntity ] &&
this . fetchProjects . searchUtils . status != this . errorCodes . NONE ) {
this . reload [ this . activeEntity ] = false ;
this . linkToSearchProjects = this . properties . searchLinkToProjects ; // + "?keyword=" + this.keyword;
}
}
public searchDataProviders() {
this . advancedSearchLink = this . properties . searchLinkToAdvancedDataProviders ; //"/search/advanced/dataproviders";
2023-05-19 18:09:37 +02:00
this . formPlaceholderText = "Search by name, description, subject..." ;
2020-02-19 16:35:48 +01:00
if ( this . reload [ this . activeEntity ] &&
this . fetchDataproviders . searchUtils . status != this . errorCodes . NONE ) {
this . reload [ this . activeEntity ] = false ;
this . linkToSearchDataproviders = this . properties . searchLinkToDataProviders ; // + "?keyword=" + this.keyword;
}
}
2022-05-13 14:57:31 +02:00
public searchServices() {
this . advancedSearchLink = this . properties . searchLinkToAdvancedServices ; //"/search/advanced/services";
2023-05-19 18:09:37 +02:00
this . formPlaceholderText = "Search by name, description, subject..." ;
2022-05-13 14:57:31 +02:00
if ( this . reload [ this . activeEntity ] &&
this . fetchServices . searchUtils . status != this . errorCodes . NONE ) {
this . reload [ this . activeEntity ] = false ;
this . linkToSearchDataproviders = this . properties . searchLinkToServices ; // + "?keyword=" + this.keyword;
}
}
2020-02-19 16:35:48 +01:00
public searchOrganizations() {
this . advancedSearchLink = this . properties . searchLinkToAdvancedOrganizations ; //"/search/advanced/organizations";
2023-05-19 18:09:37 +02:00
this . formPlaceholderText = "Search by organization name..." ;
2020-02-19 16:35:48 +01:00
if ( this . reload [ this . activeEntity ] &&
this . fetchOrganizations . searchUtils . status != this . errorCodes . NONE ) {
this . reload [ this . activeEntity ] = false ;
this . linkToSearchOrganizations = this . properties . searchLinkToOrganizations ; // + "?keyword=" + this.keyword;
}
}
private prepareKeywordParam ( keyword ) {
2020-04-07 13:11:31 +02:00
if ( this . parameters [ "q" ] ) {
2020-02-19 16:35:48 +01:00
delete this . parameters [ 'q' ] ;
delete this . parameters [ 'op' ] ;
2020-04-07 13:11:31 +02:00
}
if ( keyword . length > 0 ) {
2020-03-27 13:39:18 +01:00
this . parameters [ "fv0" ] = keyword ;
this . parameters [ "f0" ] = "q" ;
2020-04-07 13:11:31 +02:00
} else if ( keyword . length == 0 && this . parameters [ "f0" ] == "q" ) {
delete this . parameters [ 'f0' ] ;
delete this . parameters [ 'fv0' ] ;
}
2020-02-19 16:35:48 +01:00
}
2020-04-23 09:33:23 +02:00
/ *
//quickSelection moved inside the searchpage
2020-02-19 16:35:48 +01:00
private prepareResultParameters() {
//quickSelections
if ( this . resultTypes && this . activeEntity == "result" ) {
let values = [ ] ;
if ( this . resultTypes . publication ) {
values . push ( "publications" ) ;
}
if ( this . resultTypes . dataset ) {
values . push ( "datasets" ) ;
}
if ( this . resultTypes . software ) {
values . push ( "software" ) ;
}
if ( this . resultTypes . other ) {
values . push ( "other" ) ;
}
if ( values . length > 0 ) {
this . parameters [ "type" ] = values . join ( "," ) ;
}
}
if ( this . quickFilter && this . activeEntity == "result" ) {
this . parameters [ "qf" ] = this . quickFilter . selected ;
}
}
public quickSelectionsChanged() {
this . prepareResultParameters ( ) ;
2020-04-07 13:11:31 +02:00
this . parameters [ "page" ] = 1 ;
2020-02-19 16:35:48 +01:00
this . reload [ this . activeEntity ] = true ;
this . router . navigate ( [ location . pathname ] , { queryParams : this.parameters } ) ;
2020-04-23 09:33:23 +02:00
} * /
2020-02-19 16:35:48 +01:00
public keywordChanged ( $event ) {
this . prepareKeywordParam ( this . selectedFields [ 0 ] . value ) ;
2020-04-07 13:11:31 +02:00
this . parameters [ "page" ] = 1 ;
2020-02-19 16:35:48 +01:00
this . reloadTabs ( ) ;
this . router . navigate ( [ location . pathname ] , { queryParams : this.parameters } ) ;
}
private count() {
var refineParams = null ;
2024-02-07 21:50:13 +01:00
let groupedQuery : boolean = false ;
let reload = JSON . parse ( JSON . stringify ( this . reload ) ) ;
2020-02-19 16:35:48 +01:00
if ( this . customFilter ) {
refineParams = ( refineParams ? ( refineParams + '&' ) : '' ) + "&fq=" + StringUtils . URIEncode ( this . customFilter . queryFieldName + " exact " + StringUtils . quote ( ( this . customFilter . valueId ) ) ) ;
2024-02-07 21:50:13 +01:00
} else if ( ! this . keyword || this . keyword . length == 0 ) {
groupedQuery = true ;
2020-02-19 16:35:48 +01:00
}
if ( this . activeEntity != "result" && this . reload [ "result" ] && ( this . showPublications || this . showSoftware || this . datasets || this . showOrps ) ) {
this . fetchPublications . searchUtils . status = this . errorCodes . LOADING ;
this . reload [ "result" ] = false ;
this . fetchPublications . results = [ ] ;
2024-02-07 21:50:13 +01:00
if ( ! groupedQuery ) {
//Add Open Access Filter
this . subs . push ( this . numOfSearchResults ( this . fetchPublications , ( refineParams ? ( refineParams ) : '' ) ) ) ;
}
2020-02-19 16:35:48 +01:00
}
if ( this . activeEntity != "projects" && this . reload [ "projects" ] && this . showProjects ) {
this . fetchProjects . searchUtils . status = this . errorCodes . LOADING ;
this . fetchProjects . results = [ ] ;
this . reload [ "projects" ] = false ;
2024-02-07 21:50:13 +01:00
if ( ! groupedQuery ) {
this . subs . push ( this . _searchProjectsService . numOfSearchProjects2 ( this . keyword . length > 0 ? NewSearchPageComponent . createKeywordQuery ( "project" , this . keyword , "q" , "=" ) : "" , this . properties , refineParams ) . subscribe (
data = > {
this . fetchProjects . searchUtils . totalResults = data ;
this . fetchProjects . searchUtils . status = this . errorCodes . DONE ;
if ( this . fetchProjects . searchUtils . totalResults == 0 ) {
this . fetchProjects . searchUtils . status = this . errorCodes . NONE ;
}
} ,
err = > {
//console.log(err);
this . handleError ( "Error getting number of " + OpenaireEntities . PROJECTS , err ) ;
this . fetchProjects . searchUtils . status = this . errorCodes . ERROR ;
this . fetchProjects . searchUtils . totalResults = null ;
2020-02-19 16:35:48 +01:00
}
2024-02-07 21:50:13 +01:00
) ) ;
}
2020-02-19 16:35:48 +01:00
}
if ( this . activeEntity != "datasources" && this . reload [ "datasources" ] && this . showDataProviders ) {
this . fetchDataproviders . results = [ ] ;
this . reload [ "datasources" ] = false ;
2024-02-07 21:50:13 +01:00
if ( ! groupedQuery ) {
// this.fetchDataproviders.getNumForSearch(this.keyword, this.properties, refineParams);
this . subs . push ( this . _searchDataprovidersService . numOfSearchDataproviders2 ( this . keyword . length > 0 ? NewSearchPageComponent . createKeywordQuery ( "dataprovider" , this . keyword , "q" , "=" ) : "" , this . properties , refineParams ) . subscribe (
data = > {
this . fetchDataproviders . searchUtils . totalResults = data ;
this . fetchDataproviders . searchUtils . status = this . errorCodes . DONE ;
if ( this . fetchDataproviders . searchUtils . totalResults == 0 ) {
this . fetchDataproviders . searchUtils . status = this . errorCodes . NONE ;
}
} ,
err = > {
//console.log(err);
this . handleError ( "Error getting number of " + OpenaireEntities . DATASOURCES , err ) ;
this . fetchDataproviders . searchUtils . status = this . errorCodes . ERROR ;
this . fetchDataproviders . searchUtils . totalResults = null ;
2020-04-07 13:11:31 +02:00
}
2024-02-07 21:50:13 +01:00
) ) ;
}
2020-02-19 16:35:48 +01:00
}
2022-05-13 14:57:31 +02:00
if ( this . activeEntity != "services" && this . reload [ "services" ] && this . showServices ) {
this . fetchServices . results = [ ] ;
this . reload [ "services" ] = false ;
2024-02-07 21:50:13 +01:00
if ( ! groupedQuery ) {
this . subs . push ( this . _searchDataprovidersService . numOfSearchDataproviders2 ( this . keyword . length > 0 ? NewSearchPageComponent . createKeywordQuery ( "service" , this . keyword , "q" , "=" ) : "" , this . properties , refineParams , "services" ) . subscribe (
data = > {
this . fetchServices . searchUtils . totalResults = data ;
this . fetchServices . searchUtils . status = this . errorCodes . DONE ;
if ( this . fetchServices . searchUtils . totalResults == 0 ) {
this . fetchServices . searchUtils . status = this . errorCodes . NONE ;
}
} ,
err = > {
//console.log(err);
this . handleError ( "Error getting number of " + OpenaireEntities . SERVICES , err ) ;
this . fetchServices . searchUtils . status = this . errorCodes . ERROR ;
this . fetchServices . searchUtils . totalResults = null ;
2022-05-13 14:57:31 +02:00
}
2024-02-07 21:50:13 +01:00
) ) ;
}
2022-05-13 14:57:31 +02:00
}
2020-02-19 16:35:48 +01:00
if ( this . activeEntity != "organizations" && this . reload [ "organizations" ] && this . showOrganizations ) {
this . fetchOrganizations . searchUtils . status = this . errorCodes . LOADING ;
this . fetchOrganizations . results = [ ] ;
this . reload [ "organizations" ] = false ;
2024-02-07 21:50:13 +01:00
if ( ! groupedQuery ) {
this . subs . push ( this . _searchOrganizationsService . numOfSearchOrganizations2 ( this . keyword . length > 0 ? NewSearchPageComponent . createKeywordQuery ( "organizations" , this . keyword , "q" , "=" ) : "" , this . properties , refineParams ) . subscribe (
data = > {
this . fetchOrganizations . searchUtils . totalResults = data ;
this . fetchOrganizations . searchUtils . status = this . errorCodes . DONE ;
if ( this . fetchOrganizations . searchUtils . totalResults == 0 ) {
this . fetchOrganizations . searchUtils . status = this . errorCodes . NONE ;
}
} ,
err = > {
//console.log(err);
this . handleError ( "Error getting number of " + OpenaireEntities . ORGANIZATIONS , err ) ;
this . fetchOrganizations . searchUtils . status = this . errorCodes . ERROR ;
this . fetchOrganizations . searchUtils . totalResults = null ;
2020-02-19 16:35:48 +01:00
2024-02-07 21:50:13 +01:00
}
) ) ;
}
2020-02-19 16:35:48 +01:00
}
2024-02-07 21:50:13 +01:00
if ( groupedQuery && ( reload [ "result" ] || reload [ "datasources" ] || reload [ "projects" ] || reload [ "organizations" ] ) ) {
if ( this . reload [ "all" ] ) {
this . reload [ "all" ] = false ;
this . subs . push ( this . groupedRequestsService . search ( ) . subscribe (
data = > {
this . allCounts = data ;
this . setDefaultCounts ( ) ;
} ,
err = > {
this . handleError ( "Error getting number of search entities" , err ) ;
this . numErrorReturned ( this . fetchPublications ) ;
this . numErrorReturned ( this . fetchDataproviders ) ;
this . numErrorReturned ( this . fetchOrganizations ) ;
this . numErrorReturned ( this . fetchProjects ) ;
}
) ) ;
} else {
this . setDefaultCounts ( ) ;
}
}
2020-02-19 16:35:48 +01:00
}
2020-07-13 00:19:30 +02:00
private numOfSearchResults ( fetchClass : FetchResearchResults , refineParams ) : Subscription {
2020-04-07 13:11:31 +02:00
return this . _searchResearchResultsService . numOfResearchOutcomes ( this . keyword . length > 0 ? NewSearchPageComponent . createKeywordQuery ( "result" , this . keyword , "q" , "=" ) : "" , this . properties , refineParams ) . subscribe (
2020-02-19 16:35:48 +01:00
data = > {
2024-02-07 21:50:13 +01:00
this . numReturned ( fetchClass , data ) ;
2020-02-19 16:35:48 +01:00
} ,
err = > {
this . handleError ( "Error getting number of research results" , err ) ;
2024-02-07 21:50:13 +01:00
this . numErrorReturned ( fetchClass ) ;
2020-02-19 16:35:48 +01:00
}
) ;
}
2024-02-07 21:50:13 +01:00
private setDefaultCounts() {
if ( this . activeEntity != "result" && this . allCounts . hasOwnProperty ( "results" ) && this . allCounts [ 'results' ] > 0 ) {
this . numReturned ( this . fetchPublications , this . allCounts [ 'results' ] ) ;
}
if ( this . allCounts . hasOwnProperty ( this . activeEntity != "datasources" && "datasources" ) && this . allCounts [ 'datasources' ] > 0 ) {
this . numReturned ( this . fetchDataproviders , this . allCounts [ 'datasources' ] ) ;
}
if ( this . allCounts . hasOwnProperty ( this . activeEntity != "organizations" && "organizations" ) && this . allCounts [ 'organizations' ] > 0 ) {
this . numReturned ( this . fetchOrganizations , this . allCounts [ 'organizations' ] ) ;
}
if ( this . allCounts . hasOwnProperty ( this . activeEntity != "projects" && "projects" ) && this . allCounts [ 'projects' ] > 0 ) {
this . numReturned ( this . fetchProjects , this . allCounts [ 'projects' ] ) ;
}
}
private numReturned ( fetchClass , num ) {
fetchClass . searchUtils . totalResults = num ;
fetchClass . searchUtils . status = this . errorCodes . DONE ;
if ( fetchClass . searchUtils . totalResults == 0 ) {
fetchClass . searchUtils . status = this . errorCodes . NONE ;
}
}
private numErrorReturned ( fetchClass ) {
fetchClass . searchUtils . status = this . errorCodes . ERROR ;
fetchClass . searchUtils . totalResults = null ;
}
2020-02-19 16:35:48 +01:00
private reloadTabs() {
2024-02-07 21:50:13 +01:00
this . reload = { result :true , projects :true , datasources : true , services : true , organizations :true , all : ! this . allCounts } ;
2020-02-19 16:35:48 +01:00
this . fetchOrganizations . searchUtils . status = this . errorCodes . LOADING ;
this . fetchDataproviders . searchUtils . status = this . errorCodes . LOADING ;
2022-05-13 14:57:31 +02:00
this . fetchServices . searchUtils . status = this . errorCodes . LOADING ;
2020-02-19 16:35:48 +01:00
this . fetchProjects . searchUtils . status = this . errorCodes . LOADING ;
this . fetchPublications . searchUtils . status = this . errorCodes . LOADING ;
this . fetchDatasets . searchUtils . status = this . errorCodes . LOADING ;
this . fetchSoftware . searchUtils . status = this . errorCodes . LOADING ;
this . fetchOrps . searchUtils . status = this . errorCodes . LOADING ;
}
private handleError ( message : string , error ) {
console . error ( "General Search Page: " + message , error ) ;
}
activeEntityUpdate ( $event ) {
2020-12-15 13:45:02 +01:00
if ( $event . searchUtils . status != this . errorCodes . LOADING ) {
this . disableForms = $event . disableForms ;
}
let updated = true ;
2020-02-19 16:35:48 +01:00
if ( this . activeEntity == "result" ) {
if ( $event . searchUtils . status != this . errorCodes . LOADING ) {
this . fetchPublications . searchUtils . totalResults = $event . searchUtils . totalResults ;
}
this . fetchPublications . searchUtils . status = $event . searchUtils . status ;
} else if ( this . activeEntity == "projects" ) {
if ( $event . searchUtils . status != this . errorCodes . LOADING ) {
this . fetchProjects . searchUtils . totalResults = $event . searchUtils . totalResults ;
}
this . fetchProjects . searchUtils . status = $event . searchUtils . status ;
} else if ( this . activeEntity == "datasources" ) {
if ( $event . searchUtils . status != this . errorCodes . LOADING ) {
this . fetchDataproviders . searchUtils . totalResults = $event . searchUtils . totalResults ;
}
this . fetchDataproviders . searchUtils . status = $event . searchUtils . status ;
2022-05-13 14:57:31 +02:00
} else if ( this . activeEntity == "services" ) {
if ( $event . searchUtils . status != this . errorCodes . LOADING ) {
this . fetchServices . searchUtils . totalResults = $event . searchUtils . totalResults ;
}
this . fetchServices . searchUtils . status = $event . searchUtils . status ;
2020-02-19 16:35:48 +01:00
} else if ( this . activeEntity == "organizations" ) {
if ( $event . searchUtils . status != this . errorCodes . LOADING ) {
this . fetchOrganizations . searchUtils . totalResults = $event . searchUtils . totalResults ;
}
this . fetchOrganizations . searchUtils . status = $event . searchUtils . status ;
} else {
updated = false ;
}
if ( updated ) {
this . cdr . detectChanges ( ) ;
}
}
2023-05-16 11:28:35 +02:00
entityChanged ( entity ) {
if ( this . activeEntity !== entity ) {
if ( this . activeEntity == "result" ) {
this . resultTypes = { publication : true , dataset : true , software : true , other : true } ;
}
if ( this . activeEntity == "result" && this . searchResearchResultsComponent ) {
this . searchResearchResultsComponent . ngOnDestroy ( ) ;
} else if ( this . activeEntity == "projects" && this . searchProjectsComponent ) {
this . searchProjectsComponent . ngOnDestroy ( ) ;
} else if ( this . activeEntity == "datasources" && this . searchDataprovidersComponent ) {
this . searchDataprovidersComponent . ngOnDestroy ( ) ;
} else if ( this . activeEntity == "services" && this . searchDataprovidersComponent ) {
this . searchDataprovidersComponent . ngOnDestroy ( ) ;
} else if ( this . activeEntity == "organizations" && this . searchOrganizationsComponent ) {
this . searchOrganizationsComponent . ngOnDestroy ( ) ;
}
this . activeEntity = entity ;
2020-02-19 16:35:48 +01:00
this . parameters = { } ;
2023-05-16 11:28:35 +02:00
this . reload [ entity ] = true ;
if ( this . keyword . length > 0 ) {
this . parameters [ "fv0" ] = this . keyword ;
this . parameters [ "f0" ] = "q" ;
}
if ( this . customFilter ) {
this . parameters = this . customFilter . getParameters ( this . parameters ) ;
}
if ( entity == "result" ) {
entity = "research-outcomes" ;
2024-02-07 20:28:45 +01:00
// if(!!this.openAccess) {
// this.parameters["resultbestaccessright"] = '"' + encodeURIComponent("Open Access") + '"';
// }
2023-05-16 11:28:35 +02:00
}
this . router . navigate ( [ "/search/find" , entity ] , { queryParams : this.parameters } ) ;
2020-02-19 16:35:48 +01:00
}
2023-05-16 11:28:35 +02:00
}
2020-02-19 16:35:48 +01:00
}