2023-02-17 18:40:05 +01:00
import { Component , Input } from "@angular/core" ;
import { EnvProperties } from "../../utils/properties/env-properties" ;
import { properties } from "../../../../environments/environment" ;
import { OpenaireEntities } from "../../utils/properties/searchFields" ;
2023-02-20 17:17:30 +01:00
import { Organization , Project } from "../../utils/result-preview/result-preview" ;
2023-02-17 18:40:05 +01:00
@Component ( {
selector : 'entity-metadata' ,
template : `
< div class = "uk-text-xsmall uk-text-emphasis uk-flex uk-flex-middle uk-flex-wrap" >
<!-- oa -- >
2023-02-20 15:59:07 +01:00
< ng - container
* ngIf = "(openAccessMandatePublications != undefined && openAccessMandatePublications) || (openAccessMandateDatasets != undefined && openAccessMandateDatasets)" >
2023-02-17 18:40:05 +01:00
< span class = "uk-margin-xsmall-right open-access" >
< icon name = "open_access" [ flex ] = " true " [ ratio ] = " 0.8 " > < / icon >
< / span >
< span class = "uk-text-bolder"
* ngIf = "openAccessMandatePublications != undefined && openAccessMandatePublications && openAccessMandateDatasets != undefined && openAccessMandateDatasets" >
Open Access Mandate for { { openaireEntities . PUBLICATIONS } } and { { openaireEntities . DATASETS } }
< / span >
< span class = "uk-text-bolder"
* ngIf = "openAccessMandatePublications != undefined && openAccessMandatePublications && (openAccessMandateDatasets == undefined || !openAccessMandateDatasets)" >
Open Access Mandate for { { openaireEntities . PUBLICATIONS } }
< / span >
< span class = "uk-text-bolder"
* ngIf = "openAccessMandateDatasets != undefined && openAccessMandateDatasets && (openAccessMandatePublications == undefined || !openAccessMandatePublications)" >
Open Access Mandate for { { openaireEntities . DATASETS } }
< / span >
< span class = "uk-margin-xsmall-left uk-margin-xsmall-right bullet" > < / span >
< / n g - c o n t a i n e r >
<!-- types -- >
< span * ngIf = "entityType" class = "uk-margin-xsmall-right" >
2023-02-20 15:59:07 +01:00
< icon * ngIf = "entityType.toLowerCase() == 'publication'" name = "description" type = "outlined"
[ flex ] = "true" [ ratio ] = "0.8" > < / icon >
< icon * ngIf = "entityType.toLowerCase() == 'research data'" name = "database" type = "outlined"
[ flex ] = "true" [ ratio ] = "0.8" > < / icon >
< icon * ngIf = "entityType.toLowerCase() == 'research software'" name = "integration_instructions"
type = "outlined" [ flex ] = "true" [ ratio ] = "0.8" > < / icon >
< icon * ngIf = "entityType.toLowerCase() == 'other research product'" name = "apps" type = "outlined"
[ flex ] = "true" [ ratio ] = "0.8" > < / icon >
< icon * ngIf = "entityType.toLowerCase() == 'project'" name = "assignment_turned_in" type = "outlined"
[ flex ] = "true" [ ratio ] = "0.8" > < / icon >
< icon * ngIf = "entityType.toLowerCase() == 'data source'" name = "note_add" type = "outlined"
[ flex ] = "true" [ ratio ] = "0.8" > < / icon >
< icon * ngIf = "entityType.toLowerCase() == 'organization'" name = "corporate_fare" type = "outlined"
[ flex ] = "true" [ ratio ] = "0.8" > < / icon >
< / span >
2023-02-17 18:40:05 +01:00
< u * ngIf = "entityType" class = "uk-text-capitalize uk-text-bolder" > { { entityType } } < / u >
< span * ngIf = "entityType && types && removeUnknown(types, true).length > 0" >
2023-02-20 15:59:07 +01:00
< icon name = "keyboard_double_arrow_right" [ flex ] = " true " [ ratio ] = " 0.8 " > < / icon >
< / span >
2023-02-17 18:40:05 +01:00
< span * ngIf = "types && removeUnknown(types, true).length > 0" class = "uk-text-italic" >
2023-02-20 15:59:07 +01:00
{ { removeUnknown ( types , true ) . join ( ' , ' ) } }
< / span >
2023-02-17 18:40:05 +01:00
<!-- years -- >
< ng - container * ngIf = "year" >
< span class = "uk-margin-xsmall-left uk-margin-xsmall-right bullet" > < / span >
< span > { { year } } < / span >
< / n g - c o n t a i n e r >
< ng - container * ngIf = "startYear && !endYear" >
< span class = "uk-margin-xsmall-left uk-margin-xsmall-right bullet" > < / span >
< span > { { startYear } } < / span >
< / n g - c o n t a i n e r >
< ng - container * ngIf = "!startYear && endYear" >
< span class = "uk-margin-xsmall-left uk-margin-xsmall-right bullet" > < / span >
< span > { { endYear } } < / span >
< / n g - c o n t a i n e r >
< ng - container * ngIf = "startYear && endYear" >
< span class = "uk-margin-xsmall-left uk-margin-xsmall-right bullet" > < / span >
2023-02-20 15:59:07 +01:00
< ng - container >
2023-02-17 18:40:05 +01:00
< span > { { startYear } } - { { endYear } } < / span >
< / n g - c o n t a i n e r >
< / n g - c o n t a i n e r >
<!-- dates -- >
< ng - container * ngIf = "startDate && !endDate" >
< span class = "uk-margin-xsmall-left uk-margin-xsmall-right bullet" > < / span >
< span class = "uk-margin-xsmall-right" > From < / span >
< span > { { startDate | date : 'dd MMM yyyy' } } < / span >
< / n g - c o n t a i n e r >
< ng - container * ngIf = "!startDate && endDate" >
< span class = "uk-margin-xsmall-left uk-margin-xsmall-right bullet" > < / span >
< span class = "uk-margin-xsmall-right" > Until < / span >
< span > { { endDate | date : 'dd MMM yyyy' } } < / span >
< / n g - c o n t a i n e r >
< ng - container * ngIf = "startDate && endDate" >
< span class = "uk-margin-xsmall-left uk-margin-xsmall-right bullet" > < / span >
< ng - container * ngIf = "startDate" >
< span > { { startDate | date : 'dd MMM yyyy' } } < / span >
< span class = "uk-margin-xsmall-left" > ( Started ) < / span >
< / n g - c o n t a i n e r >
< span * ngIf = "startDate && endDate" class = "uk-margin-xsmall-left uk-margin-xsmall-right" > - < / span >
< ng - container * ngIf = "endDate" >
< span > { { endDate | date : 'dd MMM yyyy' } } < / span >
< span class = "uk-margin-xsmall-left" > { { currentDate >= endDate ? '(Ended)' : '(Ending)' } } < / span >
< / n g - c o n t a i n e r >
< / n g - c o n t a i n e r >
2023-02-20 15:59:07 +01:00
< ng - container * ngIf = "status" >
2023-02-17 18:40:05 +01:00
< span class = "uk-margin-xsmall-left uk-margin-xsmall-right bullet" > < / span >
< span > { { status } } < / span >
< / n g - c o n t a i n e r >
< ng - container * ngIf = "date" >
< span class = "uk-margin-xsmall-left uk-margin-xsmall-right bullet" > < / span >
< span > { { date | date : 'dd MMM yyyy' : 'UTC' } } < / span >
< / n g - c o n t a i n e r >
< ng - container * ngIf = "embargoEndDate" >
< span class = "uk-margin-xsmall-left uk-margin-xsmall-right bullet" > < / span >
< span > Embargo end date : { { embargoEndDate | date : 'dd MMM yyyy' } } < / span >
< / n g - c o n t a i n e r >
< span * ngIf = "underCuration" >
2023-02-20 15:59:07 +01:00
< span class = "uk-margin-xsmall-left uk-margin-xsmall-right bullet" > < / span >
< span title = "{{buildCurationTooltip()}}" uk - tooltip = "pos:bottom-right; delay:10;"
class = "uk-text-primary" > Under curation < / span >
< / span >
2023-02-17 18:40:05 +01:00
<!-- countries -- >
< ng - container * ngIf = "countries && removeUnknown(countries).length > 0" >
< span class = "uk-margin-xsmall-left uk-margin-xsmall-right bullet" > < / span >
< ng - container * ngFor = "let country of removeUnknown(countries)" >
< span > { { country } } < / span >
< / n g - c o n t a i n e r >
< / n g - c o n t a i n e r >
<!-- languages -- >
< ng - container * ngIf = "languages && removeUnknown(languages).length > 0" >
< span class = "uk-margin-xsmall-left uk-margin-xsmall-right bullet" > < / span >
< ng - container * ngFor = "let language of removeUnknown(languages)" >
< span > { { language } } < / span >
< / n g - c o n t a i n e r >
< / n g - c o n t a i n e r >
<!-- programming languages -- >
< ng - container * ngIf = "programmingLanguages && programmingLanguages.length > 0" >
< span class = "uk-margin-xsmall-left uk-margin-xsmall-right bullet" > < / span >
< ng - container * ngFor = "let programmingLanguage of programmingLanguages" >
< span > { { programmingLanguage } } < / span >
< / n g - c o n t a i n e r >
< / n g - c o n t a i n e r >
<!-- published info -- >
< showPublisher [ publisher ] = " publisher " [ journal ] = " journal " [ properties ] = " properties " > < / showPublisher >
<!-- data provider labels -- >
< ng - container * ngIf = "compatibility && !(compatibility.info == 'not available' && type == 'service')" >
< span class = "uk-margin-xsmall-left uk-margin-xsmall-right bullet" > < / span >
2023-02-20 15:59:07 +01:00
< span uk - tooltip title = "Compatibility" >
< a * ngIf = "compatibility.id"
[ queryParams ] = "{datasourceId: compatibility.id}" routerLinkActive = "router-link-active"
[ routerLink ] = "properties.searchLinkToDataProvider.split('?')[0]" >
{ { compatibility . info } }
< ng - container * ngIf = "compatibility.name" > { { compatibility . name } } < / n g - c o n t a i n e r >
< / a >
< span * ngIf = "!compatibility.id && compatibility.info" >
< ng - container
* ngIf = "compatibility.info.toLowerCase() != 'not yet registered'" > { { compatibility . info } } < / n g - c o n t a i n e r >
< ng - container * ngIf = "compatibility.info.toLowerCase() == 'not yet registered'" >
{ { compatibility . info } } < span * ngIf = "properties.adminToolsPortalType == 'eosc'" > in OpenAIRE < / span >
< / n g - c o n t a i n e r >
< / span >
< span * ngIf = "compatibility.name && !compatibility.id" >
{ { compatibility . name } }
< / span >
< / span >
< / n g - c o n t a i n e r >
< ng - container * ngIf = "compatibilityString" >
< span class = "uk-margin-xsmall-left uk-margin-xsmall-right bullet" > < / span >
< span uk - tooltip title = "Compatibility" > { { compatibilityString } } < / span >
2023-02-17 18:40:05 +01:00
< / n g - c o n t a i n e r >
< ng - container
* ngIf = "aggregationStatus && aggregationStatus.fulltexts && aggregationStatus.fulltexts > 0" >
< span class = "uk-margin-xsmall-left uk-margin-xsmall-right bullet" > < / span >
< span > OpenAIRE Text Mining < / span >
< / n g - c o n t a i n e r >
< ng - container * ngIf = "thematic" >
< span class = "uk-margin-xsmall-left uk-margin-xsmall-right bullet" > < / span >
< span > Thematic < / span >
< / n g - c o n t a i n e r >
2023-02-20 17:17:30 +01:00
<!-- Projects -- >
< ng - container * ngIf = "projects && projects.length > 0" >
< span class = "uk-margin-xsmall-left uk-margin-xsmall-right bullet" > < / span >
< span uk - tooltip = "Project" * ngFor = "let project of projects.slice(0,10) let i=index" >
< span class = "space" >
{ { project . funderShortname ? project.funderShortname : project.funderName } }
< / span >
< span * ngIf = "project.acronym || project.title" >
| { { project . acronym ? project . acronym : ( project . title . length > 25 ?
project . title . substring ( 0 , 25 ) + '...' : project . title ) } }
< / span >
< span * ngIf = "project.code" > ( { { project . code } } ) < / span >
< span * ngIf = "i < projects.length-1" > , < / span >
< / span >
< span * ngIf = "projects.length > 10" > . . . < / span >
< / n g - c o n t a i n e r >
<!-- Organizations -- >
< ng - container * ngIf = "organizations && organizations.length > 0" >
< span class = "uk-margin-xsmall-left uk-margin-xsmall-right bullet" > < / span >
< span uk - tooltip = "Partner" * ngFor = "let organization of organizations.slice(0,10) let i=index" >
< span class = "space" > { { organization . name } } < / span >
< span * ngIf = "(i < organizations.length-1) && (i < 9)" > , < / span >
< / span >
< span * ngIf = "organizations.length > 10" > . . . < / span >
< / n g - c o n t a i n e r >
<!-- Subjects -- >
< ng - container * ngIf = "subjects && subjects.length > 0" >
< span class = "uk-margin-xsmall-left uk-margin-xsmall-right bullet" > < / span >
< span uk - tooltip = "Subject" * ngFor = "let subject of subjects.slice(0,10) let i = index" >
< span class = "space" > { { subject } } < / span >
< span > { { ( i < ( subjects . slice ( 0 , 10 ) . length - 1 ) ) ? "," : "" } } < / span >
< / span >
< span * ngIf = "subjects.length > 10" > . . . < / span >
< / n g - c o n t a i n e r >
2023-02-17 18:40:05 +01:00
< ng - container * ngIf = "provenanceAction" >
< span class = "uk-margin-xsmall-left uk-margin-xsmall-right bullet" > < / span >
< span > { { provenanceAction } } < / span >
< / n g - c o n t a i n e r >
< ng - container * ngIf = "relationName" >
< span class = "uk-margin-xsmall-left uk-margin-xsmall-right bullet" > < / span >
< span > { { relationName } } < / span >
< / n g - c o n t a i n e r >
< / div >
2023-02-20 15:59:07 +01:00
`
2023-02-17 18:40:05 +01:00
} )
export class EntityMetadataComponent {
@Input ( ) entityType : string ;
@Input ( ) types : string [ ] ;
@Input ( ) year : string ; // search result
@Input ( ) startDate : number ; // project landing
@Input ( ) startYear : string ; // search result
@Input ( ) endDate : number ; // project landing
@Input ( ) endYear : string ; // search result
@Input ( ) currentDate : number ; // project landing
@Input ( ) status : string ; // project landing
@Input ( ) openAccessMandatePublications : boolean // project landing
@Input ( ) openAccessMandateDatasets : boolean // project landing
@Input ( ) date : Date ;
@Input ( ) embargoEndDate : Date | string ;
@Input ( ) underCuration : boolean = false ;
@Input ( ) publisher ; // showPublisher component
@Input ( ) journal ; // showPublisher component
@Input ( ) countries ;
@Input ( ) languages ;
@Input ( ) programmingLanguages ;
2023-02-20 15:59:07 +01:00
@Input ( ) compatibilityString : string ;
2023-02-17 18:40:05 +01:00
@Input ( ) compatibility ; // data provider landing
@Input ( ) aggregationStatus ; // data provider landing
@Input ( ) thematic : boolean ; // data provider landing
@Input ( ) type ; // data provider landing
@Input ( ) provenanceAction : string ; // search result
@Input ( ) relationName : string ; // search result
2023-02-20 15:59:07 +01:00
@Input ( ) projects : Project [ ] ;
2023-02-20 17:17:30 +01:00
@Input ( ) organizations : Organization [ ] ;
2023-02-20 15:59:07 +01:00
@Input ( ) subjects : string [ ] ;
2023-02-17 18:40:05 +01:00
properties : EnvProperties = properties ;
public openaireEntities = OpenaireEntities ;
public removeUnknown ( array : string [ ] , type : boolean = false ) : string [ ] {
if ( type ) {
return this . removeDuplicates ( array ) . filter ( value = > value . toLowerCase ( ) !== 'unknown' ) ;
} else {
return array . filter ( value = > value . toLowerCase ( ) !== 'unknown' ) ;
}
}
public removeDuplicates ( array : string [ ] ) : string [ ] {
return array . filter ( value = > value . toLowerCase ( ) !== this . entityType ) ;
}
public buildCurationTooltip ( ) : string {
let tooltipContent : string = "<div class='uk-padding-small'>" ;
tooltipContent += "<h5>Record in preview</h5>" ;
tooltipContent += "<p>Bibliographic record accepted by the system, but not yet processed by <br> OpenAIRE tools for information quality improvement and de-duplication</p>" ;
tooltipContent += "</div>" ;
return tooltipContent ;
}
}