Merge remote-tracking branch 'origin/develop' into develop
This commit is contained in:
commit
93897534dc
|
@ -228,11 +228,13 @@
|
|||
class="uk-link-text" [innerHTML]="highlightKeyword(searchFieldsHelper.getFosParameter() == 'foslabel' ? subSubItem.label : subSubItem.id)">
|
||||
</a>
|
||||
|
||||
<div *ngFor="let level4 of subSubItem?.children" class="uk-margin-left">
|
||||
<a [routerLink]="properties.searchLinkToResults" [queryParams]="buildFosQueryParam(level4)"
|
||||
class="uk-text-small uk-text-meta uk-margin-xsmall-bottom" [innerHTML]="highlightKeyword(searchFieldsHelper.getFosParameter() == 'foslabel' ? level4.label : level4.id)">
|
||||
</a>
|
||||
</div>
|
||||
<ng-container *ngIf="properties.environment == 'development'">
|
||||
<div *ngFor="let level4 of subSubItem?.children" class="uk-margin-left">
|
||||
<a [routerLink]="properties.searchLinkToResults" [queryParams]="buildFosQueryParam(level4)"
|
||||
class="uk-text-small uk-text-meta uk-margin-xsmall-bottom" [innerHTML]="highlightKeyword(searchFieldsHelper.getFosParameter() == 'foslabel' ? level4.label : level4.id)">
|
||||
</a>
|
||||
</div>
|
||||
</ng-container>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
|
|
@ -1,4 +1,9 @@
|
|||
import {HostedByCollectedFrom, Project, RelationResult} from "../../utils/result-preview/result-preview";
|
||||
import {
|
||||
HostedByCollectedFrom,
|
||||
Project,
|
||||
RelationDatasource,
|
||||
RelationResult
|
||||
} from "../../utils/result-preview/result-preview";
|
||||
import {Context, Measure, Metric, MetricPerDatasource, Reference} from "../../utils/entities/resultLandingInfo";
|
||||
import {Injectable} from '@angular/core';
|
||||
import {properties} from "../../../../environments/environment";
|
||||
|
@ -527,6 +532,56 @@ export class ParsingFunctions {
|
|||
return researchResults;
|
||||
}
|
||||
|
||||
// publication & dataset & software & orp landing : for relatedResearchResults
|
||||
parseDatasources(datasources: RelationDatasource[], relation, provenanceAction: string, relationName: string): RelationDatasource[] {
|
||||
let datasource: RelationDatasource = {
|
||||
name: "",
|
||||
id: "",
|
||||
percentage: null,
|
||||
percentageName: null,
|
||||
class: "",
|
||||
provenanceAction: provenanceAction,
|
||||
relationName: relationName,
|
||||
openaireCompatibility: ""
|
||||
};
|
||||
|
||||
datasource['id'] = relation['to'].content;
|
||||
if(relation["officialname"])
|
||||
datasource.name = relation.officialname;
|
||||
else {
|
||||
datasource['name'] = "[no title available]";
|
||||
}
|
||||
|
||||
let percentageName: string;
|
||||
if (relation.trust) {
|
||||
percentageName = "trust";
|
||||
} else if (relation.similarity) {
|
||||
percentageName = "similarity";
|
||||
}
|
||||
if (percentageName) {
|
||||
datasource['percentage'] = Math.round(relation[percentageName] * 100);
|
||||
datasource['percentageName'] = percentageName;
|
||||
}
|
||||
|
||||
// type
|
||||
if(relation.hasOwnProperty('datasourcetype') && relation['datasourcetype'].hasOwnProperty("classname")) {
|
||||
datasource.class = relation['datasourcetype'].classname;
|
||||
}
|
||||
|
||||
// compatibility
|
||||
if(relation.hasOwnProperty("openairecompatibility")) {
|
||||
datasource.openaireCompatibility = relation['openairecompatibility'].classname;
|
||||
}
|
||||
|
||||
if(datasource.class !== "service" || properties.adminToolsPortalType == "eosc") {
|
||||
if (datasources == undefined) {
|
||||
datasources = [];
|
||||
}
|
||||
datasources.push(datasource);
|
||||
}
|
||||
return datasources;
|
||||
}
|
||||
|
||||
sortByPercentage(results: RelationResult[]): RelationResult[] {
|
||||
if (results) {
|
||||
return results.sort(function (a, b) {
|
||||
|
|
|
@ -19,28 +19,30 @@ import {HelperFunctions} from "../../../utils/HelperFunctions.class";
|
|||
template: `
|
||||
<div id="versions_container">
|
||||
<errorMessages [status]="[status]" [type]="type" tab_error_class=true></errorMessages>
|
||||
<no-load-paging *ngIf="results.length > pageSize" [type]="type"
|
||||
<no-load-paging *ngIf="resultsPreview.length > pageSize" [type]="type"
|
||||
(pageChange)="updatePage($event)"
|
||||
[page]="page" [pageSize]="pageSize"
|
||||
[totalResults]="results.length">
|
||||
[totalResults]="resultsPreview.length">
|
||||
</no-load-paging>
|
||||
<ul class="uk-list uk-list-divider uk-margin">
|
||||
<li *ngFor="let result of results.slice((page-1)*pageSize, page*pageSize)">
|
||||
<result-preview [modal]="modal" [properties]="properties" [hasLink]="false" [result]="getResultPreview(result)"
|
||||
<li *ngFor="let result of resultsPreview.slice((page-1)*pageSize, page*pageSize)">
|
||||
<result-preview [modal]="modal" [properties]="properties" [hasLink]="false" [result]="result"
|
||||
[isCard]="false" [prevPath]="prevPath" [isDeletedByInferenceModal]="true"></result-preview>
|
||||
</li>
|
||||
</ul>
|
||||
<no-load-paging *ngIf="results.length > pageSize" [type]="type"
|
||||
<no-load-paging *ngIf="resultsPreview.length > pageSize" [type]="type"
|
||||
(pageChange)="updatePage($event)"
|
||||
[page]="page" [pageSize]="pageSize"
|
||||
[totalResults]="results.length">
|
||||
[totalResults]="resultsPreview.length">
|
||||
</no-load-paging>
|
||||
</div>
|
||||
`
|
||||
})
|
||||
export class OrganizationsDeletedByInferenceComponent {
|
||||
@Input() prevPath: string = "";
|
||||
public results: OrganizationInfo[] = [];
|
||||
public resultsPreview: ResultPreview[] = [];
|
||||
@Input() children = [];
|
||||
|
||||
@Input() id: string;
|
||||
@Input() ids: string[] = [];
|
||||
@Input() type: string;
|
||||
|
@ -67,10 +69,10 @@ export class OrganizationsDeletedByInferenceComponent {
|
|||
this.properties = properties;
|
||||
|
||||
this.subscriptions.push(this.route.queryParams.subscribe(data => {
|
||||
this.errorCodes = new ErrorCodes();
|
||||
this.status = this.errorCodes.LOADING;
|
||||
this.errorCodes = new ErrorCodes();
|
||||
this.status = this.errorCodes.LOADING;
|
||||
|
||||
this.getDeletedByInference();
|
||||
this.parseDeletedByInference();
|
||||
}));
|
||||
}
|
||||
|
||||
|
@ -81,25 +83,36 @@ export class OrganizationsDeletedByInferenceComponent {
|
|||
}
|
||||
});
|
||||
}
|
||||
getDeletedByInference() {
|
||||
this.results = [];
|
||||
this.status = this.errorCodes.LOADING;
|
||||
|
||||
this.subscriptions.push(this._deletedByInferenceService.getDeletedByInferenceResults(this.id, String(this.ids.length), this.properties).subscribe(
|
||||
data => {
|
||||
this.results = data;
|
||||
this.status = this.errorCodes.DONE;
|
||||
},
|
||||
error => {
|
||||
if(error.status == '404') {
|
||||
this.status = this.errorCodes.NOT_FOUND;
|
||||
} else if(error.status == '500') {
|
||||
this.status = this.errorCodes.ERROR;
|
||||
public parseDeletedByInference() {
|
||||
let length = Array.isArray(this.children) ? this.children.length : 1;
|
||||
for (let i = 0; i < length; i++) {
|
||||
let result = Array.isArray(this.children) ? this.children[i] : this.children;
|
||||
let preview = new ResultPreview();
|
||||
|
||||
if(result.hasOwnProperty("websiteurl")) {
|
||||
preview.websiteURL = result.websiteurl;
|
||||
}
|
||||
if(result.hasOwnProperty("legalshortname")) {
|
||||
preview.title = result.legalshortname;
|
||||
}
|
||||
if(result.hasOwnProperty("legalname")) {
|
||||
if(preview.title && preview.title != result.legalname) {
|
||||
preview.title += "("+result.legalname+")";
|
||||
} else {
|
||||
this.status = this.errorCodes.NOT_AVAILABLE;
|
||||
preview.title = result.legalname;
|
||||
}
|
||||
}
|
||||
));
|
||||
|
||||
if(result.hasOwnProperty("country")) {
|
||||
preview.countries = [result['country'].classname];
|
||||
}
|
||||
|
||||
preview.resultType = 'organization';
|
||||
|
||||
this.resultsPreview.push(preview);
|
||||
}
|
||||
this.status = this.errorCodes.DONE;
|
||||
}
|
||||
|
||||
public getResultPreview(result: OrganizationInfo): ResultPreview {
|
||||
|
|
|
@ -370,7 +370,8 @@
|
|||
[id]="organizationInfo.objIdentifier"
|
||||
[ids]="organizationInfo.deletedByInferenceIds"
|
||||
[modal]="AlertModalDeletedByInference"
|
||||
[type]="'organizations'" [prevPath]="prevPath">
|
||||
[type]="'organizations'" [prevPath]="prevPath"
|
||||
[children]="organizationInfo.children">
|
||||
</organizationsDeletedByInference>
|
||||
</modal-alert>
|
||||
|
||||
|
@ -484,7 +485,8 @@
|
|||
<organizationsDeletedByInference *ngIf="deleteByInferenceOpened"
|
||||
[id]="organizationInfo.objIdentifier"
|
||||
[ids]="organizationInfo.deletedByInferenceIds"
|
||||
[type]="'organizations'" [prevPath]="prevPath">
|
||||
[type]="'organizations'" [prevPath]="prevPath"
|
||||
[children]="organizationInfo.children">
|
||||
</organizationsDeletedByInference>
|
||||
</fs-modal>
|
||||
<!-- Share -->
|
||||
|
|
|
@ -8,33 +8,36 @@ import {RouterHelper} from '../../../utils/routerHelper.class';
|
|||
import {ErrorCodes} from '../../../utils/properties/errorCodes';
|
||||
|
||||
import {DeletedByInferenceService} from './deletedByInference.service';
|
||||
import {ResultPreview} from "../../../utils/result-preview/result-preview";
|
||||
import {HostedByCollectedFrom, ResultPreview} from "../../../utils/result-preview/result-preview";
|
||||
import {AlertModal} from "../../../utils/modal/alert";
|
||||
import {Subscriber} from "rxjs";
|
||||
import {properties} from "../../../../../environments/environment";
|
||||
import {HelperFunctions} from "../../../utils/HelperFunctions.class";
|
||||
import {Dates, StringUtils} from "../../../utils/string-utils.class";
|
||||
import {ParsingFunctions} from "../../landing-utils/parsingFunctions.class";
|
||||
|
||||
@Component({
|
||||
selector: 'deletedByInference',
|
||||
template: `
|
||||
<div id="versions_container">
|
||||
<errorMessages [status]="[status]" [type]="type" tab_error_class=true></errorMessages>
|
||||
<no-load-paging *ngIf="results.length > pageSize" [type]="type"
|
||||
|
||||
<no-load-paging *ngIf="resultsPreview.length > pageSize" [type]="type"
|
||||
(pageChange)="updatePage($event)"
|
||||
[page]="page" [pageSize]="pageSize"
|
||||
[totalResults]="results.length">
|
||||
[totalResults]="resultsPreview.length">
|
||||
</no-load-paging>
|
||||
<ul class="uk-list uk-margin">
|
||||
<li *ngFor="let result of results.slice((page-1)*pageSize, page*pageSize)">
|
||||
<result-preview [modal]="modal" [properties]="properties" [hasLink]="false" [result]="getResultPreview(result)"
|
||||
<li *ngFor="let result of resultsPreview.slice((page-1)*pageSize, page*pageSize)">
|
||||
<result-preview [modal]="modal" [properties]="properties" [hasLink]="false" [result]="result"
|
||||
[showOrcid]="false" [prevPath]="prevPath" [showInline]="true"
|
||||
[isDeletedByInferenceModal]="true" [isMobile]="isMobile"></result-preview>
|
||||
</li>
|
||||
</ul>
|
||||
<no-load-paging *ngIf="results.length > pageSize" [type]="type"
|
||||
<no-load-paging *ngIf="resultsPreview.length > pageSize" [type]="type"
|
||||
(pageChange)="updatePage($event)"
|
||||
[page]="page" [pageSize]="pageSize"
|
||||
[totalResults]="results.length">
|
||||
[totalResults]="resultsPreview.length">
|
||||
</no-load-paging>
|
||||
</div>
|
||||
`
|
||||
|
@ -42,7 +45,8 @@ import {HelperFunctions} from "../../../utils/HelperFunctions.class";
|
|||
export class DeletedByInferenceComponent {
|
||||
@Input() isMobile: boolean = false;
|
||||
@Input() prevPath: string = "";
|
||||
public results: ResultLandingInfo[] = [];
|
||||
public resultsPreview: ResultPreview[] = [];
|
||||
@Input() children = [];
|
||||
@Input() id: string;
|
||||
@Input() ids: string[] = [];
|
||||
@Input() type: string;
|
||||
|
@ -74,7 +78,7 @@ export class DeletedByInferenceComponent {
|
|||
this.errorCodes = new ErrorCodes();
|
||||
this.status = this.errorCodes.LOADING;
|
||||
|
||||
this.getDeletedByInference();
|
||||
this.parseDeletedByInference();
|
||||
}));
|
||||
}
|
||||
|
||||
|
@ -86,24 +90,88 @@ export class DeletedByInferenceComponent {
|
|||
});
|
||||
}
|
||||
|
||||
getDeletedByInference() {
|
||||
this.results = [];
|
||||
this.status = this.errorCodes.LOADING;
|
||||
this.subscriptions.push(this._deletedByInferenceService.getDeletedByInferenceResults(this.id, String(this.ids.length), this.properties).subscribe(
|
||||
data => {
|
||||
this.results = data;
|
||||
this.status = this.errorCodes.DONE;
|
||||
},
|
||||
error => {
|
||||
if (error.status == '404') {
|
||||
this.status = this.errorCodes.NOT_FOUND;
|
||||
} else if (error.status == '500') {
|
||||
this.status = this.errorCodes.ERROR;
|
||||
} else {
|
||||
this.status = this.errorCodes.NOT_AVAILABLE;
|
||||
public parseDeletedByInference() {
|
||||
let parsingFunctions: ParsingFunctions = new ParsingFunctions();
|
||||
let length = Array.isArray(this.children) ? this.children.length : 1;
|
||||
for (let i = 0; i < length; i++) {
|
||||
let result = Array.isArray(this.children) ? this.children[i] : this.children;
|
||||
let preview = new ResultPreview();
|
||||
if(result.hasOwnProperty("creator")) {
|
||||
preview.authors = [];
|
||||
let authorsLength = Array.isArray(result.creator) ? result.creator.length : 1;
|
||||
for (let j = 0; j < authorsLength; j++) {
|
||||
let author = {"fullName": Array.isArray(result.creator) ? result.creator[j] : result.creator, "orcid": null, "orcid_pending": null};
|
||||
preview.authors.push(author);
|
||||
}
|
||||
}
|
||||
));
|
||||
if(result.hasOwnProperty("dateofacceptance")) {
|
||||
preview.year = new Date(result.dateofacceptance).getFullYear().toString();
|
||||
}
|
||||
if(result.hasOwnProperty("title")) {
|
||||
let titleLength = Array.isArray(result.title) ? result.title.length : 1;
|
||||
for (let j = 0; j < titleLength; j++) {
|
||||
let title = Array.isArray(result.title) ? result.title[j] : result.title;
|
||||
if (!preview.title || title.classid == "main title") {
|
||||
preview.title = StringUtils.HTMLToString(String(title.content));
|
||||
}
|
||||
}
|
||||
}
|
||||
if(result.hasOwnProperty("description")) {
|
||||
preview.description = result.description;
|
||||
}
|
||||
preview.resultType = result?.resulttype?.classid ? result.resulttype.classid : this.resultType;
|
||||
|
||||
|
||||
if (result.hasOwnProperty("instance")) {
|
||||
preview.hostedBy_collectedFrom = new Array<HostedByCollectedFrom>();
|
||||
|
||||
preview.types = new Array<string>();
|
||||
let types = new Set<string>();
|
||||
|
||||
let counter = 0;
|
||||
let instance;
|
||||
|
||||
let instanesLength = Array.isArray(result['instance']) ? result['instance'].length : 1;
|
||||
|
||||
for (let j = 0; j < instanesLength; j++) {
|
||||
instance = Array.isArray(result['instance']) ? result['instance'][j] : result['instance'];
|
||||
if(result.hasOwnProperty('collectedfrom')) {
|
||||
if(Array.isArray(result['collectedfrom'])) {
|
||||
// not sure if this is correct mapping
|
||||
instance['collectedfrom'] = result['collectedfrom'].length >= j ? result['collectedfrom'][j] : result['collectedfrom'][result['collectedfrom'].length - 1];
|
||||
} else {
|
||||
instance['collectedfrom'] = result['collectedfrom'];
|
||||
}
|
||||
}
|
||||
|
||||
parsingFunctions.parseTypes(preview.types, types, instance);
|
||||
|
||||
if (instance.hasOwnProperty("webresource")) {
|
||||
let url;
|
||||
if (!Array.isArray(instance['webresource'])) {
|
||||
url = instance['webresource'].url;
|
||||
} else {
|
||||
url = instance['webresource'][0].url;
|
||||
}
|
||||
if (url.includes('&')) {
|
||||
url = url.replace(/&/gmu, '&');
|
||||
}
|
||||
|
||||
/**********************************************************/
|
||||
if (instance.hasOwnProperty("hostedby")) {
|
||||
parsingFunctions.parseHostedBy_collectedFrom(preview.hostedBy_collectedFrom, instance, url, null);
|
||||
}
|
||||
/**********************************************************/
|
||||
}
|
||||
}
|
||||
|
||||
// /* Order Download from via openness*/
|
||||
preview.hostedBy_collectedFrom.sort(parsingFunctions.compareHostedByCollectedFrom);
|
||||
}
|
||||
|
||||
this.resultsPreview.push(preview);
|
||||
}
|
||||
this.status = this.errorCodes.DONE;
|
||||
}
|
||||
|
||||
public getResultPreview(result: ResultLandingInfo): ResultPreview {
|
||||
|
|
|
@ -153,6 +153,10 @@
|
|||
[tabTitle]="'Related research'" [tabId]="'all_related'"
|
||||
[tabNumber]="resultLandingInfo.relatedResults.length">
|
||||
</my-tab>
|
||||
<my-tab *ngIf="resultLandingInfo.relatedServices?.length > 0"
|
||||
[tabTitle]="openaireEntities.DATASOURCES" [tabId]="'dataProviders'"
|
||||
[tabNumber]="resultLandingInfo.relatedServices.length">
|
||||
</my-tab>
|
||||
<my-tab *ngIf="resultLandingInfo.bioentities && bioentitiesNum> 0"
|
||||
[tabTitle]="'External Databases'" [tabId]="'bioentities'" [tabNumber]="bioentitiesNum">
|
||||
</my-tab>
|
||||
|
@ -179,9 +183,13 @@
|
|||
</ng-container>
|
||||
<ng-container *ngIf="resultLandingInfo.relatedResults?.length > 0">
|
||||
<div id="all_related" class="landing-section">
|
||||
<ng-container *ngTemplateOutlet="relation_in_tab; context: { researchResults: filteredRelatedResults, header: ''}"></ng-container>
|
||||
<ng-container *ngTemplateOutlet="relation_in_tab; context: { related: filteredRelatedResults, props: relatedResults, header: ''}"></ng-container>
|
||||
</div>
|
||||
</ng-container>
|
||||
<div *ngIf="resultLandingInfo.relatedServices?.length > 0"
|
||||
id="dataProviders" class="landing-section">
|
||||
<ng-container *ngTemplateOutlet="relation_in_tab; context: { related: filteredRelatedServices, props: relatedServices, type: 'datasource', header: ''}"></ng-container>
|
||||
</div>
|
||||
<ng-container *ngIf="resultLandingInfo.bioentities && bioentitiesNum> 0">
|
||||
<div id="bioentities" class="landing-section">
|
||||
<ng-container *ngTemplateOutlet="bioentities_content"></ng-container>
|
||||
|
@ -457,6 +465,14 @@
|
|||
</div>
|
||||
<hr>
|
||||
</ng-container>
|
||||
<ng-container *ngIf="resultLandingInfo.relatedServices?.length > 0">
|
||||
<div class="clickable uk-flex uk-flex-middle uk-flex-between"
|
||||
(click)="openFsModal(servicesFsModal, openaireEntities.DATASOURCES); onSelectActiveTab('dataProviders')">
|
||||
<span>{{openaireEntities.DATASOURCES}}</span>
|
||||
<icon name="chevron_right" [ratio]="1.5" [flex]="true"></icon>
|
||||
</div>
|
||||
<hr>
|
||||
</ng-container>
|
||||
<ng-container *ngIf="resultLandingInfo.bioentities && bioentitiesNum> 0">
|
||||
<div class="clickable uk-flex uk-flex-middle uk-flex-between" (click)="openFsModal(bioentitiesFsModal, 'External Databases'); onSelectActiveTab('bioentities')">
|
||||
<span>External Databases</span>
|
||||
|
@ -638,7 +654,15 @@
|
|||
<fs-modal #relatedResearchFsModal classTitle="uk-tile-default uk-border-bottom"
|
||||
*ngIf="resultLandingInfo.relatedResults?.length > 0">
|
||||
<div class="landing-section">
|
||||
<ng-container *ngTemplateOutlet="relation_in_tab; context: { researchResults: filteredRelatedResults, header: ''}"></ng-container>
|
||||
<ng-container *ngTemplateOutlet="relation_in_tab; context: { related: filteredRelatedResults, props: relatedResults, header: ''}"></ng-container>
|
||||
</div>
|
||||
</fs-modal>
|
||||
|
||||
|
||||
<fs-modal *ngIf="isMobile" #servicesFsModal classTitle="uk-tile-default uk-border-bottom">
|
||||
<div *ngIf="activeTab == 'dataProviders' && resultLandingInfo.relatedServices?.length > 0"
|
||||
class="landing-section">
|
||||
<ng-container *ngTemplateOutlet="relation_in_tab; context: { related: filteredRelatedServices, props: relatedServices, type: 'datasource', header: ''}"></ng-container>
|
||||
</div>
|
||||
</fs-modal>
|
||||
|
||||
|
@ -700,22 +724,26 @@
|
|||
[id]="resultLandingInfo.record['result']['header']['dri:objIdentifier']"
|
||||
[ids]="resultLandingInfo.deletedByInferenceIds"
|
||||
[modal]="AlertModalDeletedByInference"
|
||||
[resultType]="type" [type]="openaireEntities.PUBLICATIONS" [prevPath]="prevPath"></deletedByInference>
|
||||
[resultType]="type" [type]="openaireEntities.PUBLICATIONS" [prevPath]="prevPath"
|
||||
[children]="resultLandingInfo.children"></deletedByInference>
|
||||
<deletedByInference *ngIf="type == 'dataset' && deleteByInferenceOpened"
|
||||
[id]="resultLandingInfo.record['result']['header']['dri:objIdentifier']"
|
||||
[ids]="resultLandingInfo.deletedByInferenceIds"
|
||||
[modal]="AlertModalDeletedByInference"
|
||||
[resultType]="'dataset'" [type]="openaireEntities.DATASETS" [prevPath]="prevPath"></deletedByInference>
|
||||
[resultType]="'dataset'" [type]="openaireEntities.DATASETS" [prevPath]="prevPath"
|
||||
[children]="resultLandingInfo.children"></deletedByInference>
|
||||
<deletedByInference *ngIf="type == 'software' && deleteByInferenceOpened"
|
||||
[id]="resultLandingInfo.record['result']['header']['dri:objIdentifier']"
|
||||
[ids]="resultLandingInfo.deletedByInferenceIds"
|
||||
[modal]="AlertModalDeletedByInference"
|
||||
[resultType]="type" [type]="openaireEntities.SOFTWARE" [prevPath]="prevPath"></deletedByInference>
|
||||
[resultType]="type" [type]="openaireEntities.SOFTWARE" [prevPath]="prevPath"
|
||||
[children]="resultLandingInfo.children"></deletedByInference>
|
||||
<deletedByInference *ngIf="type == 'orp' && deleteByInferenceOpened"
|
||||
[id]="resultLandingInfo.record['result']['header']['dri:objIdentifier']"
|
||||
[ids]="resultLandingInfo.deletedByInferenceIds"
|
||||
[modal]="AlertModalDeletedByInference"
|
||||
[resultType]="'other'" [type]="openaireEntities.OTHER" [prevPath]="prevPath"></deletedByInference>
|
||||
[resultType]="'other'" [type]="openaireEntities.OTHER" [prevPath]="prevPath"
|
||||
[children]="resultLandingInfo.children"></deletedByInference>
|
||||
</modal-alert>
|
||||
<modal-alert *ngIf="resultLandingInfo" #citeModal>
|
||||
<citeThis *ngIf="citeThisClicked" [result]="resultLandingInfo" [id]="id"
|
||||
|
@ -763,34 +791,32 @@
|
|||
</ul>
|
||||
</ng-template>
|
||||
|
||||
<ng-template #relation_in_tab let-researchResults="researchResults" let-header="header">
|
||||
<div
|
||||
*ngIf="researchResults && researchResults.length > 0"
|
||||
class="uk-margin-bottom">
|
||||
<ng-template #relation_in_tab let-related="related" let-props="props" let-type="type" let-header="header">
|
||||
<div *ngIf="related && related.length > 0" class="uk-margin-bottom">
|
||||
<h6 *ngIf="header">{{header}}</h6>
|
||||
<div *ngIf="relatedClassFilters?.length > 1" class="uk-margin-medium-bottom"
|
||||
<div *ngIf="props.classFilters?.length > 1" class="uk-margin-medium-bottom"
|
||||
input type="select" placeholder="Filter by relation" inputClass="flat x-small"
|
||||
[options]="relatedClassFilters" [(value)]="relatedClassSelected"
|
||||
(valueChange)="relatedClassChanged()"></div>
|
||||
[options]="props.classFilters" [(value)]="props.selectedClass"
|
||||
(valueChange)="relatedClassChanged(type)"></div>
|
||||
|
||||
<results-and-pages
|
||||
[type]="openaireEntities.RESULTS"
|
||||
[page]="relatedPage" [pageSize]="pageSize"
|
||||
[totalResults]="researchResults.length">
|
||||
[type]="((type == 'datasource') ? openaireEntities.DATASOURCES : openaireEntities.RESULTS)"
|
||||
[page]="props.page" [pageSize]="pageSize"
|
||||
[totalResults]="related.length">
|
||||
</results-and-pages>
|
||||
<ul class="uk-list uk-list-divider uk-margin">
|
||||
<li *ngFor="let item of researchResults.slice((relatedPage-1)*pageSize, relatedPage*pageSize)">
|
||||
<li *ngFor="let item of related.slice((props.page-1)*pageSize, props.page*pageSize)">
|
||||
<result-preview [properties]="properties"
|
||||
[result]="getResultPreview(item)" [provenanceActionVocabulary]="provenanceActionVocabulary"
|
||||
[result]="getResultPreview(item, type)" [provenanceActionVocabulary]="provenanceActionVocabulary"
|
||||
[relationsVocabulary]="relationsVocabulary"
|
||||
[isCard]="false" [prevPath]="prevPath"></result-preview>
|
||||
</li>
|
||||
</ul>
|
||||
<paging-no-load *ngIf="researchResults.length > pageSize"
|
||||
<paging-no-load *ngIf="related.length > pageSize"
|
||||
class="uk-margin-top"
|
||||
(pageChange)="updateRelatedPage($event)"
|
||||
[currentPage]="relatedPage" [size]="pageSize"
|
||||
[totalResults]="researchResults.length">
|
||||
(pageChange)="updateRelatedPage($event, type)"
|
||||
[currentPage]="props.page" [size]="pageSize"
|
||||
[totalResults]="related.length">
|
||||
</paging-no-load>
|
||||
</div>
|
||||
</ng-template>
|
||||
|
@ -1130,7 +1156,7 @@
|
|||
</div>
|
||||
</ng-container>
|
||||
</div>
|
||||
<div *ngIf="resultLandingInfo.measure.countsPerDatasource" class="uk-margin-medium-top uk-width-auto">
|
||||
<div *ngIf="properties.environment != 'production' && resultLandingInfo.measure.countsPerDatasource" class="uk-margin-medium-top uk-width-auto">
|
||||
<table class="uk-table uk-table-striped">
|
||||
<thead>
|
||||
<tr>
|
||||
|
@ -1173,25 +1199,29 @@
|
|||
[ids]="resultLandingInfo.deletedByInferenceIds"
|
||||
[resultType]="type" [type]="openaireEntities.PUBLICATIONS"
|
||||
[isMobile]="isMobile"
|
||||
[modal]="alertModalDeletedByInferenceFS"></deletedByInference>
|
||||
[modal]="alertModalDeletedByInferenceFS"
|
||||
[children]="resultLandingInfo.children"></deletedByInference>
|
||||
<deletedByInference *ngIf="type == 'dataset' && deleteByInferenceOpened"
|
||||
[id]="resultLandingInfo.record['result']['header']['dri:objIdentifier']"
|
||||
[ids]="resultLandingInfo.deletedByInferenceIds"
|
||||
[resultType]="'dataset'" [type]="openaireEntities.DATASETS"
|
||||
[isMobile]="isMobile"
|
||||
[modal]="alertModalDeletedByInferenceFS"></deletedByInference>
|
||||
[modal]="alertModalDeletedByInferenceFS"
|
||||
[children]="resultLandingInfo.children"></deletedByInference>
|
||||
<deletedByInference *ngIf="type == 'software' && deleteByInferenceOpened"
|
||||
[id]="resultLandingInfo.record['result']['header']['dri:objIdentifier']"
|
||||
[ids]="resultLandingInfo.deletedByInferenceIds"
|
||||
[resultType]="type" [type]="openaireEntities.SOFTWARE"
|
||||
[isMobile]="isMobile"
|
||||
[modal]="alertModalDeletedByInferenceFS"></deletedByInference>
|
||||
[modal]="alertModalDeletedByInferenceFS"
|
||||
[children]="resultLandingInfo.children"></deletedByInference>
|
||||
<deletedByInference *ngIf="type == 'orp' && deleteByInferenceOpened"
|
||||
[id]="resultLandingInfo.record['result']['header']['dri:objIdentifier']"
|
||||
[ids]="resultLandingInfo.deletedByInferenceIds"
|
||||
[resultType]="'other'" [type]="openaireEntities.OTHER"
|
||||
[isMobile]="isMobile"
|
||||
[modal]="alertModalDeletedByInferenceFS"></deletedByInference>
|
||||
[modal]="alertModalDeletedByInferenceFS"
|
||||
[children]="resultLandingInfo.children"></deletedByInference>
|
||||
</fs-modal>
|
||||
|
||||
<fs-modal *ngIf="resultLandingInfo" #citeFsModal classTitle="uk-tile-default uk-border-bottom">
|
||||
|
|
|
@ -13,7 +13,7 @@ import {HelperFunctions} from '../../utils/HelperFunctions.class';
|
|||
import {HelperService} from '../../utils/helper/helper.service';
|
||||
import {Location} from "@angular/common";
|
||||
import {MetricsService} from "../../services/metrics.service";
|
||||
import {RelationResult, ResultPreview} from "../../utils/result-preview/result-preview";
|
||||
import {RelationDatasource, RelationResult, ResultPreview} from "../../utils/result-preview/result-preview";
|
||||
import {IndexInfoService} from "../../utils/indexInfo.service";
|
||||
import {Identifier, StringUtils} from "../../utils/string-utils.class";
|
||||
import {properties} from "../../../../environments/environment";
|
||||
|
@ -95,12 +95,7 @@ export class ResultLandingComponent {
|
|||
// Custom tab paging variables
|
||||
public referencesPage: number = 1;
|
||||
public bioentitiesPage: number = 1;
|
||||
public relatedPage: number = 1;
|
||||
public similarPage: number = 1;
|
||||
public supplementaryPage: number = 1;
|
||||
public supplementedByPage: number = 1;
|
||||
public organizationsPage: number = 1;
|
||||
public openCitationsPage: number = 1;
|
||||
|
||||
public pageSize: number = 10;
|
||||
|
||||
// Map counting variables
|
||||
|
@ -139,9 +134,28 @@ export class ResultLandingComponent {
|
|||
public pid: string;
|
||||
public contextsWithLink: any;
|
||||
|
||||
public relatedClassFilters: Option[]=[{"label": "All relations", "value": ""}];
|
||||
public relatedClassSelected: string = "";
|
||||
public filteredRelatedResults: RelationResult[];
|
||||
public relatedResults: {
|
||||
classFilters: Option[],
|
||||
selectedClass: string,
|
||||
page: number
|
||||
} = {
|
||||
classFilters: [{"label": "All relations", "value": ""}],
|
||||
selectedClass: "",
|
||||
page: 1,
|
||||
};
|
||||
filteredRelatedResults: RelationResult[];
|
||||
|
||||
public relatedServices: {
|
||||
classFilters: Option[],
|
||||
selectedClass: string,
|
||||
page: number
|
||||
} = {
|
||||
classFilters: [{"label": "All relations", "value": ""}],
|
||||
selectedClass: "",
|
||||
page: 1
|
||||
}
|
||||
filteredRelatedServices: RelationDatasource[];
|
||||
|
||||
|
||||
public provenanceActionVocabulary = null;
|
||||
public relationsVocabulary = null;
|
||||
|
@ -168,6 +182,7 @@ export class ResultLandingComponent {
|
|||
@ViewChild('subjectsFsModal') subjectsFsModal: FullScreenModalComponent;
|
||||
@ViewChild('referencesFsModal') referencesFsModal: FullScreenModalComponent;
|
||||
@ViewChild('relatedResearchFsModal') relatedResearchFsModal: FullScreenModalComponent;
|
||||
@ViewChild('servicesFsModal') servicesFsModal: FullScreenModalComponent;
|
||||
@ViewChild('bioentitiesFsModal') bioentitiesFsModal: FullScreenModalComponent;
|
||||
@ViewChild('compatibleEOSCFsModal') compatibleEOSCFsModal: FullScreenModalComponent;
|
||||
@ViewChild('fundedByFsModal') fundedByFsModal: FullScreenModalComponent;
|
||||
|
@ -558,20 +573,34 @@ export class ResultLandingComponent {
|
|||
}
|
||||
}
|
||||
}
|
||||
this.relatedClassFilters = [{"label": "All relations", "value": ""}];
|
||||
this.relatedResults.classFilters = [{"label": "All relations", "value": ""}];
|
||||
if (this.resultLandingInfo.relatedClassFilters.size > 1) {
|
||||
for (let relClass of this.resultLandingInfo.relatedClassFilters) {
|
||||
this.relatedClassFilters.push({
|
||||
this.relatedResults.classFilters.push({
|
||||
"label": HelperFunctions.getVocabularyLabel(relClass, this.relationsVocabulary),
|
||||
"value": relClass
|
||||
});
|
||||
}
|
||||
} else {
|
||||
this.relatedClassFilters.pop();
|
||||
this.relatedResults.classFilters.pop();
|
||||
}
|
||||
this.relatedClassSelected = "";
|
||||
this.relatedResults.selectedClass = "";
|
||||
this.filteredRelatedResults = this.resultLandingInfo.relatedResults;
|
||||
|
||||
this.relatedServices.classFilters = [{"label": "All relations", "value": ""}];
|
||||
if (this.resultLandingInfo.relatedServicesClassFilters.size > 1) {
|
||||
for (let relClass of this.resultLandingInfo.relatedServicesClassFilters) {
|
||||
this.relatedServices.classFilters.push({
|
||||
"label": HelperFunctions.getVocabularyLabel(relClass, this.relationsVocabulary),
|
||||
"value": relClass
|
||||
});
|
||||
}
|
||||
} else {
|
||||
this.relatedServices.classFilters.pop();
|
||||
}
|
||||
this.relatedServices.selectedClass = "";
|
||||
this.filteredRelatedServices = this.resultLandingInfo.relatedServices
|
||||
|
||||
this.hasViews = false;
|
||||
this.hasDownloads = false;
|
||||
if (this.resultLandingInfo.measure && this.resultLandingInfo.measure.counts) {
|
||||
|
@ -711,25 +740,14 @@ export class ResultLandingComponent {
|
|||
this.scrollToTabTop('bioentities');
|
||||
}
|
||||
|
||||
public updateRelatedPage($event) {
|
||||
this.relatedPage = $event.value;
|
||||
this.scrollToTabTop('all_related');
|
||||
}
|
||||
|
||||
public updateSimilarPage($event) {
|
||||
this.similarPage = $event.value;
|
||||
}
|
||||
|
||||
public updateSupplementaryPage($event) {
|
||||
this.supplementaryPage = $event.value;
|
||||
}
|
||||
|
||||
public updateSupplementedByPage($event) {
|
||||
this.supplementedByPage = $event.value;
|
||||
}
|
||||
|
||||
public updateOrganizationsPage($event) {
|
||||
this.organizationsPage = $event.value;
|
||||
public updateRelatedPage($event, type) {
|
||||
if(type == "datasource") {
|
||||
this.relatedServices.page = $event.value;
|
||||
this.scrollToTabTop("dataProviders");
|
||||
} else {
|
||||
this.relatedResults.page = $event.value;
|
||||
this.scrollToTabTop('all_related');
|
||||
}
|
||||
}
|
||||
|
||||
scrollToTabTop(tabId:string){
|
||||
|
@ -788,8 +806,11 @@ export class ResultLandingComponent {
|
|||
this.alertModalDeletedByInference.open();
|
||||
}
|
||||
|
||||
public getResultPreview(result: RelationResult): ResultPreview {
|
||||
return ResultPreview.relationResultConvert(result);
|
||||
public getResultPreview(result: RelationResult|RelationDatasource, type: string): ResultPreview {
|
||||
if(type == "datasource") {
|
||||
return ResultPreview.relationDatasourceConvert(<RelationDatasource>result);
|
||||
}
|
||||
return ResultPreview.relationResultConvert(<RelationResult>result);
|
||||
}
|
||||
|
||||
updateUrlWithType(pid) {
|
||||
|
@ -983,9 +1004,14 @@ export class ResultLandingComponent {
|
|||
this.contextsWithLink = contextsWithLink;
|
||||
}
|
||||
|
||||
public relatedClassChanged() {
|
||||
this.relatedPage = 1;
|
||||
this.filteredRelatedResults = this.resultLandingInfo.relatedResults.filter(result => !this.relatedClassSelected || result.relationName.toLowerCase() == this.relatedClassSelected.toLowerCase());
|
||||
public relatedClassChanged(type) {
|
||||
if(type == "datasource") {
|
||||
this.relatedServices.page = 1;
|
||||
this.filteredRelatedServices = this.resultLandingInfo.relatedServices.filter(result => !this.relatedServices.selectedClass || result.relationName.toLowerCase() == this.relatedServices.selectedClass.toLowerCase());
|
||||
} else {
|
||||
this.relatedResults.page = 1;
|
||||
this.filteredRelatedResults = this.resultLandingInfo.relatedResults.filter(result => !this.relatedResults.selectedClass || result.relationName.toLowerCase() == this.relatedResults.selectedClass.toLowerCase());
|
||||
}
|
||||
}
|
||||
|
||||
public viewAllOrganizationsClick() {
|
||||
|
|
|
@ -210,6 +210,19 @@ export class ResultLandingService {
|
|||
this.resultLandingInfo.relatedResults = this.parsingFunctions.parseResults(this.resultLandingInfo.relatedResults, relation, provenanceAction, relationName);
|
||||
} else if (relation['to'].class && relation['to'].class.toLowerCase() == "hasauthorinstitution") {
|
||||
this.resultLandingInfo.organizations = this.parseRelatedOrganizations(this.resultLandingInfo.organizations, relation);
|
||||
} else if (relation['to'].scheme && relation['to'].scheme == "dnet:result_datasource_relations") {
|
||||
let relationName: string = relation.to.class;
|
||||
if (!this.resultLandingInfo.relatedServicesClassFilters.has(relationName)) {
|
||||
this.resultLandingInfo.relatedServicesClassFilters.add(relationName);
|
||||
}
|
||||
|
||||
let provenanceAction: string = relation.provenanceaction;
|
||||
|
||||
// this.resultLandingInfo.relatedResults = this.parsingFunctions.parseResults(this.resultLandingInfo.relatedResults, relation, provenanceAction, relationName);
|
||||
if (this.resultLandingInfo.relatedServices == undefined) {
|
||||
this.resultLandingInfo.relatedServices = [];
|
||||
}
|
||||
this.resultLandingInfo.relatedServices = this.parsingFunctions.parseDatasources(this.resultLandingInfo.relatedServices, relation, provenanceAction, relationName);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -225,6 +238,7 @@ export class ResultLandingService {
|
|||
let result = Array.isArray(data[3]['result']) ? data[3]['result'][i] : data[3]['result'];
|
||||
this.resultLandingInfo.deletedByInferenceIds.push(result.objidentifier);
|
||||
}
|
||||
this.resultLandingInfo.children = data[3]['result'];
|
||||
|
||||
}
|
||||
|
||||
|
|
|
@ -93,6 +93,7 @@ export class OrganizationService {
|
|||
this.organizationInfo.deletedByInferenceIds.push(result.objidentifier);
|
||||
}
|
||||
}
|
||||
this.organizationInfo.children = children['organization'];
|
||||
}
|
||||
|
||||
if(organization['pid']) {
|
||||
|
|
|
@ -11,8 +11,7 @@ export class DataproviderProvenance {
|
|||
this.provenance.set("fairsharing_::", {"urlPrefix": properties.fairSharingURL, "name": "FAIRsharing"});
|
||||
this.provenance.set("eosc________::", {
|
||||
"urlPrefix": properties.eoscMarketplaceURL,
|
||||
"name": "EOSC Service Catalogue"
|
||||
});
|
||||
"name": "EOSC Resource Hub" });
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -28,6 +28,7 @@ export class OrganizationInfo {
|
|||
// organizations: {name: string; url: string}[]}[];
|
||||
|
||||
deletedByInferenceIds: string[];
|
||||
children;
|
||||
identifiers: Map<string, string[]>; //key is the classname
|
||||
belongsTo: boolean = true;
|
||||
message: string;
|
||||
|
|
|
@ -3,7 +3,7 @@ import {
|
|||
HostedByCollectedFrom,
|
||||
Journal, OARoutes,
|
||||
Organization,
|
||||
Project,
|
||||
Project, RelationDatasource,
|
||||
RelationResult
|
||||
} from "../result-preview/result-preview";
|
||||
import {isArray} from "rxjs/internal-compatibility";
|
||||
|
@ -185,6 +185,7 @@ export class ResultLandingInfo {
|
|||
contexts: Context[];
|
||||
|
||||
deletedByInferenceIds: string[];
|
||||
children;
|
||||
|
||||
// PUBLICATION, DATASET, ORP
|
||||
references: Reference[];
|
||||
|
@ -194,6 +195,9 @@ export class ResultLandingInfo {
|
|||
organizations: Organization[];
|
||||
openCitations: { "url": string, "title": string, "year": string, "doi": string, "authors": string[] }[];
|
||||
|
||||
relatedServices: RelationDatasource[];
|
||||
relatedServicesClassFilters: Set<string> = new Set();
|
||||
|
||||
// DATASET
|
||||
subtitle: string;
|
||||
|
||||
|
|
|
@ -25,7 +25,7 @@ export let common: EnvProperties = {
|
|||
wikiDataURL: "https://www.wikidata.org/wiki/",
|
||||
fundRefURL: "https://data.crossref.org/fundingdata/funder/",
|
||||
fairSharingURL: "https://fairsharing.org/",
|
||||
eoscMarketplaceURL: "https://marketplace.eosc-portal.eu/services/",
|
||||
eoscMarketplaceURL: "https://open-science-cloud.ec.europa.eu/resources/services/",
|
||||
sherpaURL: "http://sherpa.ac.uk/romeo/issn/",
|
||||
sherpaURLSuffix: "/",
|
||||
zenodo: "https://zenodo.org/",
|
||||
|
|
|
@ -37,6 +37,17 @@ export interface RelationResult {
|
|||
relationName?: string;
|
||||
}
|
||||
|
||||
export interface RelationDatasource {
|
||||
name: string;
|
||||
id: string;
|
||||
percentage: number;
|
||||
percentageName?: string;
|
||||
class: string
|
||||
provenanceAction?: string;
|
||||
relationName?: string;
|
||||
openaireCompatibility: string;
|
||||
}
|
||||
|
||||
export interface Project {
|
||||
id: string;
|
||||
acronym: string;
|
||||
|
@ -271,6 +282,20 @@ export class ResultPreview {
|
|||
return resultPreview;
|
||||
}
|
||||
|
||||
public static relationDatasourceConvert(result: RelationDatasource): ResultPreview {
|
||||
let resultPreview: ResultPreview = new ResultPreview();
|
||||
resultPreview.id = result.id;
|
||||
resultPreview.title = result.name;
|
||||
resultPreview.resultType = "dataprovider";
|
||||
resultPreview.types = [result.class];
|
||||
resultPreview.relationName = result.relationName;
|
||||
resultPreview.relation = result.percentageName;
|
||||
resultPreview.percentage = result.percentage;
|
||||
resultPreview.provenanceAction = result.provenanceAction;
|
||||
resultPreview.compatibility = result.openaireCompatibility;
|
||||
return resultPreview;
|
||||
}
|
||||
|
||||
public static organizationConvert(result: Organization, relation: string = 'trust'): ResultPreview {
|
||||
let resultPreview: ResultPreview = new ResultPreview();
|
||||
resultPreview.id = result.id;
|
||||
|
|
Loading…
Reference in New Issue