[Monitor|Trunk]

-remove isPublic/isActive and their funtionalities
-add visibility
-update stakeholder and indicator cards

-add beta version of stats tool



git-svn-id: https://svn.driver.research-infrastructures.eu/driver/dnet40/modules/uoa-monitor-portal/trunk/monitor_dashboard@59675 d315682c-612b-4755-9ff5-7f18f6832af3
This commit is contained in:
Argiro Kokogiannaki 2020-10-23 13:58:16 +00:00
parent 2f2c55cef7
commit 264a16c9bf
20 changed files with 444 additions and 1215 deletions

View File

@ -8,9 +8,10 @@ import {StakeholderService} from "./openaireLibrary/monitor/services/stakeholder
import {BehaviorSubject, Subscriber} from "rxjs"; import {BehaviorSubject, Subscriber} from "rxjs";
import {LayoutService} from "./openaireLibrary/dashboard/sharedComponents/sidebar/layout.service"; import {LayoutService} from "./openaireLibrary/dashboard/sharedComponents/sidebar/layout.service";
import {MenuItem, RootMenuItem} from "./openaireLibrary/sharedComponents/menu"; import {MenuItem, RootMenuItem} from "./openaireLibrary/sharedComponents/menu";
import {Stakeholder, Topic} from "./openaireLibrary/monitor/entities/stakeholder"; import {Stakeholder, Topic, Visibility} from "./openaireLibrary/monitor/entities/stakeholder";
import {LinksResolver} from "./search/links-resolver"; import {LinksResolver} from "./search/links-resolver";
import {Header} from "./openaireLibrary/sharedComponents/navigationBar.component"; import {Header} from "./openaireLibrary/sharedComponents/navigationBar.component";
import {arrow_left} from "./openaireLibrary/utils/icons/icons";
@Component({ @Component({
@ -107,9 +108,9 @@ export class AppComponent implements OnInit, OnDestroy {
if (isSearch) { if (isSearch) {
this.activeTopic = null; this.activeTopic = null;
} else if (params && params['topic'] && !this.activeTopic) { } else if (params && params['topic'] && !this.activeTopic) {
this.activeTopic = this.stakeholder.topics.find(topic => topic.alias === decodeURIComponent(params['topic']) && this.isPublicOrIsMember(topic.isPublic) && topic.isActive); this.activeTopic = this.stakeholder.topics.find(topic => topic.alias === decodeURIComponent(params['topic']) && this.isPublicOrIsMember(topic.visibility));
} else { } else {
this.activeTopic = this.stakeholder.topics.find(topic => this.isPublicOrIsMember(topic.isPublic) && topic.isActive); this.activeTopic = this.stakeholder.topics.find(topic => this.isPublicOrIsMember(topic.visibility));
} }
this.setSideBar(); this.setSideBar();
} else { } else {
@ -129,9 +130,9 @@ export class AppComponent implements OnInit, OnDestroy {
if(isSearch) { if(isSearch) {
this.activeTopic = null; this.activeTopic = null;
} else if (params && params['topic']) { } else if (params && params['topic']) {
this.activeTopic = this.stakeholder.topics.find(topic => topic.alias === decodeURIComponent(params['topic']) && this.isPublicOrIsMember(topic.isPublic) && topic.isActive); this.activeTopic = this.stakeholder.topics.find(topic => topic.alias === decodeURIComponent(params['topic']) && this.isPublicOrIsMember(topic.visibility));
} else { } else {
this.activeTopic = this.stakeholder.topics.find(topic => this.isPublicOrIsMember(topic.isPublic) && topic.isActive); this.activeTopic = this.stakeholder.topics.find(topic => this.isPublicOrIsMember(topic.visibility));
} }
} }
@ -145,7 +146,9 @@ export class AppComponent implements OnInit, OnDestroy {
})); }));
this.subscriptions.push(this.userManagementService.getUserInfo().subscribe(user => { this.subscriptions.push(this.userManagementService.getUserInfo().subscribe(user => {
this.user = user; this.user = user;
this.buildMenu(); if(user){
this.buildMenu();
}
}, error => { }, error => {
console.log("App couldn't fetch properties"); console.log("App couldn't fetch properties");
console.log(error); console.log(error);
@ -177,7 +180,7 @@ export class AppComponent implements OnInit, OnDestroy {
private setSideBar() { private setSideBar() {
let items: MenuItem[] = []; let items: MenuItem[] = [];
this.stakeholder.topics.forEach((topic) => { this.stakeholder.topics.forEach((topic) => {
if (this.isPublicOrIsMember(topic.isPublic) && topic.isActive) { if (this.isPublicOrIsMember(topic.visibility)) {
let topicItem: MenuItem = new MenuItem(topic.alias, topic.name, "", ( let topicItem: MenuItem = new MenuItem(topic.alias, topic.name, "", (
'/' + this.stakeholder.alias + '/' + topic.alias), '/' + this.stakeholder.alias + '/' + topic.alias),
null, [], [], {}); null, [], [], {});
@ -234,7 +237,7 @@ export class AppComponent implements OnInit, OnDestroy {
this.adminMenuItems.push(new MenuItem("indicators", "Indicators", "", "/admin/"+this.stakeholder.alias + '/indicators', false, [], [], {}, "<i uk-icon=\"image\"></i>")); this.adminMenuItems.push(new MenuItem("indicators", "Indicators", "", "/admin/"+this.stakeholder.alias + '/indicators', false, [], [], {}, "<i uk-icon=\"image\"></i>"));
this.adminMenuItems.push(new MenuItem("users", "Users", "", "/admin/"+this.stakeholder.alias+"/users", false, [], [], {}, "<i uk-icon=\"users\"></i>")); this.adminMenuItems.push(new MenuItem("users", "Users", "", "/admin/"+this.stakeholder.alias+"/users", false, [], [], {}, "<i uk-icon=\"users\"></i>"));
this.specialSideBarMenuItem = new MenuItem("back", "Manage profiles", "", "/admin",false, [], null, {}); this.specialSideBarMenuItem = new MenuItem("back", "Manage profiles", "", "/admin",false, [], null, {});
this.specialSideBarMenuItem.icon = '<span class="uk-icon-button uk-icon portal-button " uk-icon="chevron-left"></span>'; this.specialSideBarMenuItem.icon = '<span class="uk-icon-button uk-icon portal-button " >' + arrow_left.data + '</span>'; // '<span class="uk-icon-button uk-icon portal-button " uk-icon="chevron-left"></span>';
} }
this.userMenuItems = []; this.userMenuItems = [];
@ -246,7 +249,6 @@ export class AppComponent implements OnInit, OnDestroy {
if (this.isAdmin()) { if (this.isAdmin()) {
this.userMenuItems.push(new MenuItem("", "Manage profiles", this.userMenuItems.push(new MenuItem("", "Manage profiles",
"", "/admin", true, [], [], {})) "", "/admin", true, [], [], {}))
this.specialSideBarMenuItem = null;
} }
if (this.user) { if (this.user) {
this.userMenuItems.push(new MenuItem("", "User information", "", "/user-info", false, [], [], {})); this.userMenuItems.push(new MenuItem("", "User information", "", "/user-info", false, [], [], {}));
@ -282,14 +284,17 @@ export class AppComponent implements OnInit, OnDestroy {
public isAdmin() { public isAdmin() {
return this.user && (Session.isPortalAdministrator(this.user) || Session.isCommunityCurator(this.user) || Session.isMonitorCurator(this.user)); return this.user && (Session.isPortalAdministrator(this.user) || Session.isCommunityCurator(this.user) || Session.isMonitorCurator(this.user));
} }
public isPublicOrIsMember(isPublic: boolean): boolean { public isPublicOrIsMember(visibility: Visibility): boolean {
if (isPublic) { if(visibility == "PRIVATE"){
return false;
}
if (visibility == "PUBLIC") {
return true; return true;
} else { } else {
if (this.isViewPublic) { // preview for not members if (this.isViewPublic) { // preview for not members
return false; return false;
} else if (this.isAdmin()) { } else if(this.isAdmin()) {
// if user is member, return true // if user is member, return true
return true; return true;
} }

View File

@ -2,15 +2,10 @@
<div id="page_content_inner"> <div id="page_content_inner">
<div class="uk-padding-small md-bg-white" uk-grid> <div class="uk-padding-small md-bg-white" uk-grid>
<div *ngIf="filters" class="uk-width-2-3@m uk-width-1-1 uk-child-width-1-3@m uk-child-width-1-1" uk-grid> <div *ngIf="filters" class="uk-width-2-3@m uk-width-1-1 uk-child-width-1-3@m uk-child-width-1-1" uk-grid>
<div>
<div dashboard-input [formInput]="filters.get('privacy')"
type="select" [options]="[all].concat(stakeholderUtils.isPublic)"
label="Privacy"></div>
</div>
<div> <div>
<div dashboard-input [formInput]="filters.get('status')" <div dashboard-input [formInput]="filters.get('status')"
type="select" [options]="[all].concat(stakeholderUtils.isActive)" type="select" [options]="[all].concat(stakeholderUtils.visibility)"
label="Status"></div> label="Visibility"></div>
</div> </div>
</div> </div>
<div class="uk-width-expand@m uk-width-1-1 uk-flex uk-flex-middle uk-flex-right"> <div class="uk-width-expand@m uk-width-1-1 uk-flex uk-flex-middle uk-flex-right">
@ -18,189 +13,110 @@
<span class="uk-position-center-right"><i class="material-icons">search</i></span> <span class="uk-position-center-right"><i class="material-icons">search</i></span>
<div dashboard-input [formInput]="filters.get('keyword')" label="Locate profile"></div> <div dashboard-input [formInput]="filters.get('keyword')" label="Locate profile"></div>
</div> </div>
<div [class.uk-active]="grid" class="uk-margin-small-left">
<a [routerLink]="" class="uk-icon-button" (click)="changeGrid(true)"><i
class="material-icons">view_module</i></a>
</div>
<div [class.uk-active]="!grid" class="uk-margin-small-left">
<a [routerLink]="" class="uk-icon-button" (click)="changeGrid(false)"><i class="material-icons">list</i></a>
</div>
</div> </div>
</div> </div>
<h4 class="uk-text-bold main">Default Profiles</h4> <h6 class="main">Default Profiles</h6>
<div [class.uk-child-width-1-4@m]="grid" <div class = "uk-child-width-1-4@m uk-child-width-1-3@s uk-grid-match uk-grid-small"
[class.uk-child-width-1-3@s]="grid"
[class.uk-child-width-1-1]="!grid"
[class.list-view]="!grid"
class="uk-grid-match uk-grid-small"
uk-grid> uk-grid>
<loading *ngIf="loading"></loading> <loading *ngIf="loading"></loading>
<ng-template ngFor [ngForOf]="defaultStakeholders" let-stakeholder let-i="index"> <ng-template ngFor [ngForOf]="displayDefaultStakeholders" let-stakeholder let-i="index">
<a *ngIf="stakeholder" [routerLink]="stakeholder.alias"> <ng-container *ngTemplateOutlet="stakeholderBox; context: {stakeholder:stakeholder}"></ng-container>
<div class="uk-card uk-card-default">
<div class=" uk-padding-small uk-card-header">
<div class="md-card-toolbar-actions uk-float-right" [class.uk-flex-middle]="!grid" [class.uk-flex]="!grid">
<span *ngIf="!grid" class="uk-margin-medium-right uk-flex uk-flex-middle">
<i class="material-icons md-24 uk-margin-small-right">{{stakeholderUtils.isPublicIcon.get(stakeholder.isPublic)}}</i>
{{(stakeholder.isPublic) ? 'Public' : 'Private'}}
</span>
<span *ngIf="!grid" class="uk-margin-medium-right uk-flex uk-flex-middle">
<i class="material-icons md-24 uk-margin-small-right"
[class.md-color-green-300]="stakeholder.isActive">{{stakeholderUtils.isActiveIcon}}</i>
{{(stakeholder.isActive) ? 'Active' : 'Inactive'}}
</span>
<div class="md-card-dropdown uk-inline">
<i uk-icon="more-vertical"
(click)="$event.stopPropagation();$event.preventDefault()"></i>
<div #element uk-dropdown="mode: click; pos: bottom-right; delay-hide: 0; flip: false">
<ul class="uk-nav uk-dropdown-nav">
<li><a (click)="$event.stopPropagation();editStakeholder(stakeholder, true);hide(element);$event.preventDefault()">Edit</a>
</li>
<li><a (click)="$event.stopPropagation();toggleStakeholderStatus(stakeholder);hide(element);$event.preventDefault()">
{{stakeholder.isActive ? 'Inactive' : 'Active'}}</a>
</li>
<li><a (click)="$event.stopPropagation();toggleStakeholderAccess(stakeholder);hide(element);$event.preventDefault()">
{{stakeholder.isPublic ? 'Private' : 'Public'}}</a>
</li>
<hr *ngIf="isAdministrator()" class="uk-nav-divider">
<li *ngIf="isAdministrator()"><a
(click)="$event.stopPropagation();deleteStakeholderOpen(stakeholder);hide(element);$event.preventDefault()">Delete</a>
</li>
</ul>
</div>
</div>
</div>
<div class="uk-card-title">{{stakeholder.name}}</div>
</div>
<div *ngIf="grid" class="uk-card-body">
<div class="uk-flex uk-flex-center" uk-grid>
<div class="uk-width-1-2 uk-text-center">
<i class="material-icons md-24">{{stakeholderUtils.isPublicIcon.get(stakeholder.isPublic)}}</i>
<div>{{(stakeholder.isPublic) ? 'Public' : 'Private'}}</div>
</div>
<div class="uk-width-1-2 uk-text-center">
<i class="material-icons md-24"
[class.md-color-green-300]="stakeholder.isActive">{{stakeholderUtils.isActiveIcon}}</i>
<div>{{(stakeholder.isActive) ? 'Active' : 'Inactive'}}</div>
</div>
</div>
</div>
</div>
</a>
</ng-template> </ng-template>
<div *ngIf="!loading"> <div *ngIf="!loading">
<div class="uk-card uk-card-default clickable" (click)="editStakeholder(null, true)"> <ng-container *ngTemplateOutlet="newBox; context:
<div class=" uk-padding-small uk-card-header"> {text:'Create a new default profile.', isDefault:true}"></ng-container>
<div class="uk-card-title"
[class.uk-flex-middle]="!grid"
[class.uk-flex]="!grid"
[class.uk-flex-center]="!grid">
<i *ngIf="!grid" class="material-icons md-36" uk-icon="plus"></i>
<span>Create a default profile</span>
</div>
</div>
<div *ngIf="grid" class="uk-card-body">
<div uk-grid>
<div class="uk-width-1-1">
Create a new default profile.
</div>
<div class="uk-width-1-1 uk-flex uk-flex-center">
<i class="material-icons md-48" uk-icon="plus"></i>
</div>
</div>
</div>
</div>
</div> </div>
</div> </div>
<h4 class="uk-text-bold">Profiles</h4> <h4 class="uk-text-bold">Profiles</h4>
<div [class.uk-child-width-1-4@m]="grid" <div class="uk-grid-match uk-grid-small uk-child-width-1-4@m uk-child-width-1-3@s"
[class.uk-child-width-1-3@s]="grid"
[class.uk-child-width-1-1]="!grid"
[class.list-view]="!grid"
class="uk-grid-match uk-grid-small"
uk-grid> uk-grid>
<loading *ngIf="loading"></loading> <loading *ngIf="loading"></loading>
<ng-template ngFor [ngForOf]="displayStakeholders" let-stakeholder let-i="index"> <ng-template ngFor [ngForOf]="displayStakeholders" let-stakeholder let-i="index">
<a *ngIf="stakeholder" [routerLink]="stakeholder.alias"> <ng-container *ngTemplateOutlet="stakeholderBox; context: {stakeholder:stakeholder}"></ng-container>
<div class="uk-card uk-card-default">
<div class=" uk-padding-small uk-card-header">
<div class="md-card-toolbar-actions uk-float-right" [class.uk-flex-middle]="!grid" [class.uk-flex]="!grid">
<span *ngIf="!grid" class="uk-margin-medium-right uk-flex uk-flex-middle">
<i class="material-icons md-24 uk-margin-small-right">{{stakeholderUtils.isPublicIcon.get(stakeholder.isPublic)}}</i>
{{(stakeholder.isPublic) ? 'Public' : 'Private'}}
</span>
<span *ngIf="!grid" class="uk-margin-medium-right uk-flex uk-flex-middle">
<i class="material-icons md-24 uk-margin-small-right"
[class.md-color-green-300]="stakeholder.isActive">{{stakeholderUtils.isActiveIcon}}</i>
{{(stakeholder.isActive) ? 'Active' : 'Inactive'}}
</span>
<div class="md-card-dropdown uk-inline">
<i uk-icon="more-vertical"
(click)="$event.stopPropagation();$event.preventDefault()"></i>
<div #element uk-dropdown="mode: click; pos: bottom-right; delay-hide: 0; flip: false">
<ul class="uk-nav uk-dropdown-nav">
<li><a
(click)="$event.stopPropagation();editStakeholder(stakeholder);hide(element);$event.preventDefault()">Edit</a>
</li>
<li><a (click)="$event.stopPropagation();toggleStakeholderStatus(stakeholder);hide(element);$event.preventDefault()">
{{stakeholder.isActive ? 'Inactive' : 'Active'}}</a>
</li>
<li><a (click)="$event.stopPropagation();toggleStakeholderAccess(stakeholder);hide(element);$event.preventDefault()">
{{stakeholder.isPublic ? 'Private' : 'Public'}}</a>
</li>
<hr class="uk-nav-divider">
<li><a
(click)="$event.stopPropagation();deleteStakeholderOpen(stakeholder);hide(element);$event.preventDefault()">Delete</a>
</li>
</ul>
</div>
</div>
</div>
<div class="uk-card-title">{{stakeholder.name}}</div>
</div>
<div *ngIf="grid" class="uk-card-body">
<div class="uk-flex uk-flex-center" uk-grid>
<div class="uk-width-1-2 uk-text-center">
<i class="material-icons md-24">{{stakeholderUtils.isPublicIcon.get(stakeholder.isPublic)}}</i>
<div>{{(stakeholder.isPublic) ? 'Public' : 'Private'}}</div>
</div>
<div class="uk-width-1-2 uk-text-center">
<i class="material-icons md-24"
[class.md-color-green-300]="stakeholder.isActive">{{stakeholderUtils.isActiveIcon}}</i>
<div>{{(stakeholder.isActive) ? 'Active' : 'Inactive'}}</div>
</div>
</div>
</div>
</div>
</a>
</ng-template> </ng-template>
<div *ngIf="!loading"> <div *ngIf="!loading">
<div class="uk-card uk-card-default clickable" (click)="editStakeholder()"> <ng-container *ngTemplateOutlet="newBox; context:
<div class=" uk-padding-small uk-card-header"> {text:'Create a new profile by selecting the type (Funder, Organization, Research Initiative or Project) and '+
<div class="uk-card-title" ' select indicators based on a default or a blank profile.', isDefault:false}"></ng-container>
[class.uk-flex-middle]="!grid" </div>
[class.uk-flex]="!grid" </div>
[class.uk-flex-center]="!grid"> </div>
<i *ngIf="!grid" class="material-icons md-36" uk-icon="plus"></i> </div>
<span>Create a profile</span>
<ng-template #stakeholderBox let-stakeholder="stakeholder" >
<div>
<div *ngIf="stakeholder" class="uk-card uk-card-default">
<div class="uk-padding-small uk-padding-remove-bottom">
<div class="md-card-toolbar-actions uk-float-right" >
<div class="md-card-dropdown uk-inline clickable">
<i uk-icon="more-vertical"
(click)="$event.stopPropagation();$event.preventDefault()"></i>
<div #element uk-dropdown="mode: click; pos: bottom-right; delay-hide: 0; flip: false">
<ul class="uk-nav uk-dropdown-nav">
<li><a (click)="$event.stopPropagation();editStakeholder(stakeholder, true);hide(element);$event.preventDefault()">Edit</a>
</li>
<ng-template ngFor [ngForOf]="stakeholderUtils.visibility" let-v>
<li *ngIf="stakeholder.visibility != v.value"><a (click)="changeStakeholderStatus(stakeholder, v.value);
hide(element)">
{{'Make ' + v.label.toLowerCase()}}</a>
</li>
</ng-template>
<hr *ngIf="isAdministrator()" class="uk-nav-divider">
<li *ngIf="isAdministrator()"><a
(click)="$event.stopPropagation();deleteStakeholderOpen(stakeholder);hide(element);$event.preventDefault()">Delete</a>
</li>
</ul>
</div> </div>
</div> </div>
<div *ngIf="grid" class="uk-card-body"> </div>
<div uk-grid> <div class="md-card-dropdown uk-inline clickable">
<div class="uk-width-1-1"> <i [attr.uk-icon]="stakeholderUtils.isPublicIcon.get(stakeholder.visibility)"
Create a new profile by selecting the type (Funder, Organization, Research Initiative or Project) and (click)="$event.stopPropagation();$event.preventDefault()"></i>
select indicators based on a default or a blank profile. <div #element uk-dropdown="mode: click; pos: bottom-right; delay-hide: 0; flip: false">
</div> <ul class="uk-nav uk-dropdown-nav">
<div class="uk-width-1-1 uk-flex uk-flex-center"> <li *ngFor="let v of stakeholderUtils.visibility" [class.selectedVisibility]="v.value ==
<i class="material-icons md-48" uk-icon="plus"></i> stakeholder.visibility">
</div> <a
</div> *ngIf="stakeholder.visibility != v.value"
(click)="$event.stopPropagation();changeStakeholderStatus(stakeholder,v.value);hide(element);$event.preventDefault()">
<i [attr.uk-icon]="stakeholderUtils.isPublicIcon.get( v.value)"></i> {{v.label}}</a>
<a *ngIf="stakeholder.visibility == v.value">
<i [attr.uk-icon]="stakeholderUtils.isPublicIcon.get( v.value)"></i> {{v.label}} <icon
customClass="uk-text-secondary uk-float-right" [ratio]="0.5"
name="bullet"></icon></a>
</li>
</ul>
</div>
</div>
</div>
<div class="uk-padding-small uk-padding-remove-top">
<a class="" [routerLink]="stakeholder.alias">
<div class="uk-flex uk-flex-center" uk-grid>
{{stakeholder.name}}
</div>
</a>
</div>
</div>
</div>
</ng-template>
<ng-template #newBox let-text="text" let-isDefault="isDefault" >
<div *ngIf="!loading">
<div class="uk-card uk-card-default clickable" (click)="editStakeholder(null, isDefault)">
<div class="uk-card-body">
<div uk-grid>
<div class="uk-width-1-1">
{{text}}
</div>
<div class="uk-width-1-1 uk-flex uk-flex-center">
<i class="material-icons md-48" uk-icon="plus"></i>
</div> </div>
</div> </div>
</div> </div>
</div> </div>
</div> </div>
</div> </ng-template>
<modal-alert #editStakeholderModal <modal-alert #editStakeholderModal
id="edit_modal" [large]="true" id="edit_modal" [large]="true"
(alertOutput)="editStakeholderComponent.save(callback)" (alertOutput)="editStakeholderComponent.save(callback)"

View File

@ -2,7 +2,7 @@ import {Component, OnDestroy, OnInit, ViewChild} from "@angular/core";
import {StakeholderService} from "../openaireLibrary/monitor/services/stakeholder.service"; import {StakeholderService} from "../openaireLibrary/monitor/services/stakeholder.service";
import {EnvProperties} from "../openaireLibrary/utils/properties/env-properties"; import {EnvProperties} from "../openaireLibrary/utils/properties/env-properties";
import {EnvironmentSpecificService} from "../openaireLibrary/utils/properties/environment-specific.service"; import {EnvironmentSpecificService} from "../openaireLibrary/utils/properties/environment-specific.service";
import {Stakeholder} from "../openaireLibrary/monitor/entities/stakeholder"; import {Stakeholder, Visibility} from "../openaireLibrary/monitor/entities/stakeholder";
import {Subscriber, zip} from "rxjs"; import {Subscriber, zip} from "rxjs";
import {StakeholderUtils} from "../utils/indicator-utils"; import {StakeholderUtils} from "../utils/indicator-utils";
import {FormBuilder, FormGroup} from "@angular/forms"; import {FormBuilder, FormGroup} from "@angular/forms";
@ -48,7 +48,6 @@ export class ManageStakeholdersComponent implements OnInit, OnDestroy {
/** /**
* Grid or List View * Grid or List View
*/ */
public grid: boolean = true;
private subscriptions: any[] = []; private subscriptions: any[] = [];
@ViewChild('editStakeholderModal') editStakeholderModal: AlertModal; @ViewChild('editStakeholderModal') editStakeholderModal: AlertModal;
@ViewChild('deleteStakeholderModal') deleteStakeholderModal: AlertModal; @ViewChild('deleteStakeholderModal') deleteStakeholderModal: AlertModal;
@ -100,33 +99,22 @@ export class ManageStakeholdersComponent implements OnInit, OnDestroy {
hide(element: any) { hide(element: any) {
UIkit.dropdown(element).hide(); UIkit.dropdown(element).hide();
} }
public changeGrid(value) {
this.grid = value;
}
private buildFilters() { private buildFilters() {
this.filters = this.fb.group({ this.filters = this.fb.group({
privacy: this.fb.control('all'),
status: this.fb.control('all'), status: this.fb.control('all'),
keyword: this.fb.control('') keyword: this.fb.control('')
}); });
this.subscriptions.push(this.filters.get('privacy').valueChanges.subscribe(value => {
this.onPrivacyChange(value);
}));
this.subscriptions.push(this.filters.get('status').valueChanges.subscribe(value => { this.subscriptions.push(this.filters.get('status').valueChanges.subscribe(value => {
console.debug(value);
this.onStatusChange(value); this.onStatusChange(value);
})); }));
this.subscriptions.push(this.filters.get('keyword').valueChanges.subscribe(value => { this.subscriptions.push(this.filters.get('keyword').valueChanges.subscribe(value => {
this.onKeywordChange(value); this.onKeywordChange(value);
})); }));
} }
onPrivacyChange(value) {
this.displayDefaultStakeholders = this.filterPrivacy(this.defaultStakeholders, value);
this.displayStakeholders = this.filterPrivacy(this.stakeholders, value);
}
onStatusChange(value) { onStatusChange(value) {
this.displayDefaultStakeholders = this.filterStatus(this.defaultStakeholders, value); this.displayDefaultStakeholders = this.filterStatus(this.defaultStakeholders, value);
this.displayStakeholders = this.filterStatus(this.stakeholders, value); this.displayStakeholders = this.filterStatus(this.stakeholders, value);
@ -136,21 +124,12 @@ export class ManageStakeholdersComponent implements OnInit, OnDestroy {
this.displayDefaultStakeholders = this.filterByKeyword(this.defaultStakeholders, value); this.displayDefaultStakeholders = this.filterByKeyword(this.defaultStakeholders, value);
this.displayStakeholders = this.filterByKeyword(this.stakeholders, value); this.displayStakeholders = this.filterByKeyword(this.stakeholders, value);
} }
private filterPrivacy(stakeholders: Stakeholder[], value): Stakeholder[] {
if (value === 'all') {
return stakeholders;
} else {
return stakeholders.filter(stakeholder => stakeholder.isPublic === value);
}
}
private filterStatus(stakeholders: Stakeholder[], value): Stakeholder[] { private filterStatus(stakeholders: Stakeholder[], value): Stakeholder[] {
if (value === 'all') { if (value === 'all') {
return stakeholders; return stakeholders;
} else { } else {
return stakeholders.filter(stakeholder => stakeholder.isActive === value); return stakeholders.filter(stakeholder => stakeholder.visibility == value);
} }
} }
@ -227,7 +206,14 @@ export class ManageStakeholdersComponent implements OnInit, OnDestroy {
} }
}); });
} }
changeStakeholderStatus(stakeholder: Stakeholder, visibility:Visibility) {
let path = [
stakeholder._id
];
this.stakeholderService.toggleStatus(this.properties.monitorServiceAPIURL, path).subscribe(isActive => {
stakeholder.isActive = isActive;
});
}
toggleStakeholderStatus(stakeholder: Stakeholder) { toggleStakeholderStatus(stakeholder: Stakeholder) {
let path = [ let path = [
stakeholder._id stakeholder._id

View File

@ -10,6 +10,9 @@ import {AlertModalModule} from "../openaireLibrary/utils/modal/alertModal.module
import {ReactiveFormsModule} from "@angular/forms"; import {ReactiveFormsModule} from "@angular/forms";
import {AdminDashboardGuard} from "../utils/adminDashboard.guard"; import {AdminDashboardGuard} from "../utils/adminDashboard.guard";
import {EditStakeholderModule} from "../general/edit-stakeholder/edit-stakeholder.module"; import {EditStakeholderModule} from "../general/edit-stakeholder/edit-stakeholder.module";
import {IconsModule} from "../openaireLibrary/utils/icons/icons.module";
import {IconsService} from "../openaireLibrary/utils/icons/icons.service";
import {bullet} from "../openaireLibrary/utils/icons/icons";
@NgModule({ @NgModule({
declarations: [ManageStakeholdersComponent], declarations: [ManageStakeholdersComponent],
@ -21,7 +24,8 @@ import {EditStakeholderModule} from "../general/edit-stakeholder/edit-stakeholde
LoadingModule, LoadingModule,
AlertModalModule, AlertModalModule,
ReactiveFormsModule, ReactiveFormsModule,
EditStakeholderModule EditStakeholderModule,
IconsModule
], ],
providers: [ providers: [
AdminDashboardGuard, PreviousRouteRecorder, AdminDashboardGuard, PreviousRouteRecorder,
@ -29,5 +33,7 @@ import {EditStakeholderModule} from "../general/edit-stakeholder/edit-stakeholde
exports: [ManageStakeholdersComponent] exports: [ManageStakeholdersComponent]
}) })
export class ManageStakeholdersModule { export class ManageStakeholdersModule {
constructor(private iconsService: IconsService) {
this.iconsService.registerIcons([ bullet]);
}
} }

View File

@ -48,7 +48,9 @@
<ul *ngIf="activeTopic && activeTopic.categories.length > 1" <ul *ngIf="activeTopic && activeTopic.categories.length > 1"
class="categoriesTabs uk-tab "> class="categoriesTabs uk-tab ">
<ng-template ngFor [ngForOf]="activeTopic.categories" let-category let-i="index"> <ng-template ngFor [ngForOf]="activeTopic.categories" let-category let-i="index">
<li *ngIf="isPublicOrIsMember(category.isPublic) && category.isActive" [class.uk-active]="category.alias === activeCategory.alias"> <li *ngIf="isPublicOrIsMember(category.visibility)"
[class.uk-active]="category.alias ===
activeCategory.alias">
<a (click)="navigateTo(stakeholder.alias,activeTopic.alias, category.alias)" <a (click)="navigateTo(stakeholder.alias,activeTopic.alias, category.alias)"
class="uk-margin-remove-bottom uk-h4" class="uk-margin-remove-bottom uk-h4"
><span>{{category.name}}</span></a> ><span>{{category.name}}</span></a>
@ -60,7 +62,7 @@
<ul *ngIf="activeCategory && countSubCategoriesToShow(activeCategory) > 1" <ul *ngIf="activeCategory && countSubCategoriesToShow(activeCategory) > 1"
class="uk-subnav uk-subnav-pill subCategoriesTabs "> class="uk-subnav uk-subnav-pill subCategoriesTabs ">
<ng-template ngFor [ngForOf]="activeCategory.subCategories" let-subCategory let-i="index"> <ng-template ngFor [ngForOf]="activeCategory.subCategories" let-subCategory let-i="index">
<li *ngIf="isPublicOrIsMember(subCategory.isPublic) && subCategory.isActive" <li *ngIf="isPublicOrIsMember(subCategory.visibility)"
[ngClass]="(subCategory.alias === activeSubCategory.alias)?'uk-active':''"> [ngClass]="(subCategory.alias === activeSubCategory.alias)?'uk-active':''">
<a (click)="navigateTo(stakeholder.alias,activeTopic.alias,activeCategory.alias, subCategory.alias)" <a (click)="navigateTo(stakeholder.alias,activeTopic.alias,activeCategory.alias, subCategory.alias)"
class="uk-margin-remove-bottom uk-h3" class="uk-margin-remove-bottom uk-h3"
@ -79,7 +81,7 @@
activeCategory.subCategories.length > 1?40:0)+(activeTopic && activeCategory.subCategories.length > 1?40:0)+(activeTopic &&
activeTopic.categories.length > 1?20:0)+(countSelectedFilters() activeTopic.categories.length > 1?20:0)+(countSelectedFilters()
> 0?40:0))"> > 0?40:0))">
<div class="uk-margin-large-top uk-padding-large indicators"> <div class=" indicators">
<div *ngIf="privateStakeholder"> <div *ngIf="privateStakeholder">
<div class="uk-text-center uk-height-medium"> <div class="uk-text-center uk-height-medium">
<div class="uk-h3 "><i> <div class="uk-h3 "><i>
@ -129,7 +131,7 @@
<ng-template ngFor [ngForOf]="activeSubCategory.numbers" let-number let-i="index"> <ng-template ngFor [ngForOf]="activeSubCategory.numbers" let-number let-i="index">
<h4 class="uk-width-1-1">{{number.title}}</h4> <h4 class="uk-width-1-1">{{number.title}}</h4>
<ng-template ngFor [ngForOf]="number.indicators" let-indicator let-j="index"> <ng-template ngFor [ngForOf]="number.indicators" let-indicator let-j="index">
<div *ngIf="indicator.isActive && isPublicOrIsMember(indicator.isPublic)" <div *ngIf="isPublicOrIsMember(indicator.visibility)"
[class.uk-width-1-3@m]="indicator.width === 'small'" [class.uk-width-1-3@m]="indicator.width === 'small'"
[class.uk-width-1-2@m]="indicator.width === 'medium'" [class.uk-width-1-2@m]="indicator.width === 'medium'"
[class.uk-width-1-1]="indicator.width === 'large'" class=" uk-margin-bottom"> [class.uk-width-1-1]="indicator.width === 'large'" class=" uk-margin-bottom">
@ -160,7 +162,7 @@
<h3 *ngIf="chart.title && chart.title.length > 0" class="uk-width-1-1 uk-margin-top">{{chart.title}}</h3> <h3 *ngIf="chart.title && chart.title.length > 0" class="uk-width-1-1 uk-margin-top">{{chart.title}}</h3>
<ng-template ngFor [ngForOf]="chart.indicators" let-indicator let-j="index"> <ng-template ngFor [ngForOf]="chart.indicators" let-indicator let-j="index">
<div <div
*ngIf="indicator.isActive && isPublicOrIsMember(indicator.isPublic) && chartsActiveType.get(i + '-' + j)" *ngIf="isPublicOrIsMember(indicator.visibility) && chartsActiveType.get(i + '-' + j)"
[class.uk-width-1-3@m]="indicator.width === 'small'" [class.uk-width-1-3@m]="indicator.width === 'small'"
[class.uk-width-1-2@m]="indicator.width === 'medium'" [class.uk-width-1-2@m]="indicator.width === 'medium'"
[class.uk-width-1-1]="indicator.width === 'large'" class="uk-margin-bottom"> [class.uk-width-1-1]="indicator.width === 'large'" class="uk-margin-bottom">

View File

@ -10,7 +10,14 @@ import {ErrorMessagesComponent} from '../openaireLibrary/utils/errorMessages.com
import {HelperService} from "../openaireLibrary/utils/helper/helper.service"; import {HelperService} from "../openaireLibrary/utils/helper/helper.service";
import {SEOService} from "../openaireLibrary/sharedComponents/SEO/SEO.service"; import {SEOService} from "../openaireLibrary/sharedComponents/SEO/SEO.service";
import {StakeholderService} from "../openaireLibrary/monitor/services/stakeholder.service"; import {StakeholderService} from "../openaireLibrary/monitor/services/stakeholder.service";
import {Category, IndicatorPath, Stakeholder, SubCategory, Topic} from "../openaireLibrary/monitor/entities/stakeholder"; import {
Category,
IndicatorPath,
Stakeholder,
SubCategory,
Topic,
Visibility
} from "../openaireLibrary/monitor/entities/stakeholder";
import {StatisticsService} from "../utils/services/statistics.service"; import {StatisticsService} from "../utils/services/statistics.service";
import {IndicatorUtils, StakeholderUtils} from "../utils/indicator-utils"; import {IndicatorUtils, StakeholderUtils} from "../utils/indicator-utils";
import {LayoutService} from "../openaireLibrary/dashboard/sharedComponents/sidebar/layout.service"; import {LayoutService} from "../openaireLibrary/dashboard/sharedComponents/sidebar/layout.service";
@ -123,7 +130,7 @@ export class MonitorComponent implements OnInit, OnDestroy {
,filterOperator: "or", valueIsExact: true, filterType: "checkbox", radioValue:""}); ,filterOperator: "or", valueIsExact: true, filterType: "checkbox", radioValue:""});
} }
this.initializeFilters(); this.initializeFilters();
if(stakeholder.isActive && (stakeholder.isPublic || this.isPublicOrIsMember(stakeholder.isPublic))) { if(this.isPublicOrIsMember(stakeholder.visibility)) {
this.seoService.createLinkForCanonicalURL(url, false); this.seoService.createLinkForCanonicalURL(url, false);
this._meta.updateTag({content: url}, "property='og:url'"); this._meta.updateTag({content: url}, "property='og:url'");
var description = "Monitor Dashboard | " + this.stakeholder.name; var description = "Monitor Dashboard | " + this.stakeholder.name;
@ -253,20 +260,20 @@ export class MonitorComponent implements OnInit, OnDestroy {
private setView(params: Params) { private setView(params: Params) {
this.loading = false; this.loading = false;
if (params['topic']) { if (params['topic']) {
this.activeTopic = this.stakeholder.topics.find(topic => topic.alias === decodeURIComponent(params['topic']) && this.isPublicOrIsMember(topic.isPublic) && topic.isActive); this.activeTopic = this.stakeholder.topics.find(topic => topic.alias === decodeURIComponent(params['topic']) && this.isPublicOrIsMember(topic.visibility));
if (this.activeTopic) { if (this.activeTopic) {
if (params['category']) { if (params['category']) {
this.activeCategory = this.activeTopic.categories.find(category => this.activeCategory = this.activeTopic.categories.find(category =>
(category.alias === params['category']) && this.isPublicOrIsMember(category.isPublic) && category.isActive); (category.alias === params['category']) && this.isPublicOrIsMember(category.visibility));
if (!this.activeCategory) { if (!this.activeCategory) {
this.navigateToError(); this.navigateToError();
return; return;
} }
} else { } else {
this.activeCategory = this.activeTopic.categories.find(category => this.isPublicOrIsMember(category.isPublic) && category.isActive); this.activeCategory = this.activeTopic.categories.find(category => this.isPublicOrIsMember(category.visibility));
if (this.activeCategory) { if (this.activeCategory) {
this.activeSubCategory = this.activeCategory.subCategories.find(subCategory => this.activeSubCategory = this.activeCategory.subCategories.find(subCategory =>
this.isPublicOrIsMember(subCategory.isPublic) && subCategory.isActive); this.isPublicOrIsMember(subCategory.visibility));
if (this.activeSubCategory) { if (this.activeSubCategory) {
this.setIndicators(); this.setIndicators();
} }
@ -276,14 +283,14 @@ export class MonitorComponent implements OnInit, OnDestroy {
if (this.activeCategory) { if (this.activeCategory) {
if (params['subCategory']) { if (params['subCategory']) {
this.activeSubCategory = this.activeCategory.subCategories.find(subCategory => this.activeSubCategory = this.activeCategory.subCategories.find(subCategory =>
(subCategory.alias === params['subCategory'] && this.isPublicOrIsMember(subCategory.isPublic) && subCategory.isActive)); (subCategory.alias === params['subCategory'] && this.isPublicOrIsMember(subCategory.visibility)));
if (!this.activeSubCategory) { if (!this.activeSubCategory) {
this.navigateToError(); this.navigateToError();
return; return;
} }
} else { } else {
this.activeSubCategory = this.activeCategory.subCategories.find(subCategory => this.activeSubCategory = this.activeCategory.subCategories.find(subCategory =>
this.isPublicOrIsMember(subCategory.isPublic) && subCategory.isActive); this.isPublicOrIsMember(subCategory.visibility));
} }
if (this.activeSubCategory) { if (this.activeSubCategory) {
this.setIndicators(); this.setIndicators();
@ -299,11 +306,11 @@ export class MonitorComponent implements OnInit, OnDestroy {
return; return;
} }
} else { } else {
this.activeTopic = this.stakeholder.topics.find(topic => this.isPublicOrIsMember(topic.isPublic) && topic.isActive); this.activeTopic = this.stakeholder.topics.find(topic => this.isPublicOrIsMember(topic.visibility));
if (this.activeTopic) { if (this.activeTopic) {
this.activeCategory = this.activeTopic.categories.find(category => this.isPublicOrIsMember(category.isPublic) && category.isActive); this.activeCategory = this.activeTopic.categories.find(category => this.isPublicOrIsMember(category.visibility));
if (this.activeCategory) { if (this.activeCategory) {
this.activeSubCategory = this.activeCategory.subCategories.find(subCategory => this.isPublicOrIsMember(subCategory.isPublic) && subCategory.isActive); this.activeSubCategory = this.activeCategory.subCategories.find(subCategory => this.isPublicOrIsMember(subCategory.visibility));
if (this.activeSubCategory) { if (this.activeSubCategory) {
this.setIndicators(); this.setIndicators();
} }
@ -362,7 +369,7 @@ export class MonitorComponent implements OnInit, OnDestroy {
let urls: Map<string, [number, number][]> = new Map<string, [number, number][]>(); let urls: Map<string, [number, number][]> = new Map<string, [number, number][]>();
this.activeSubCategory.numbers.forEach((section, i) => { this.activeSubCategory.numbers.forEach((section, i) => {
section.indicators.forEach((number, j) => { section.indicators.forEach((number, j) => {
if (number.isActive && this.isPublicOrIsMember(number.isPublic)) { if (this.isPublicOrIsMember(number.visibility)) {
let url =this.indicatorUtils.getFullUrlWithFilters(this.stakeholder, number.indicatorPaths[0], this.getfl0(), this.periodFilter.selectedFromValue, this.periodFilter.selectedToValue, this.getCoFunded()); let url =this.indicatorUtils.getFullUrlWithFilters(this.stakeholder, number.indicatorPaths[0], this.getfl0(), this.periodFilter.selectedFromValue, this.periodFilter.selectedToValue, this.getCoFunded());
const pair = JSON.stringify([number.indicatorPaths[0].source, url]); const pair = JSON.stringify([number.indicatorPaths[0].source, url]);
const indexes = urls.get(pair) ? urls.get(pair) : []; const indexes = urls.get(pair) ? urls.get(pair) : [];
@ -433,8 +440,11 @@ export class MonitorComponent implements OnInit, OnDestroy {
return this.user && (Session.isPortalAdministrator(this.user) || Session.isCommunityCurator(this.user) || Session.isMonitorCurator(this.user)); return this.user && (Session.isPortalAdministrator(this.user) || Session.isCommunityCurator(this.user) || Session.isMonitorCurator(this.user));
} }
public isPublicOrIsMember(isPublic: boolean): boolean { public isPublicOrIsMember(visibility: Visibility): boolean {
if (isPublic) { if(visibility == "PRIVATE"){
return false;
}
if (visibility == "PUBLIC") {
return true; return true;
} else { } else {
if (this.isViewPublic) { // preview for not members if (this.isViewPublic) { // preview for not members
@ -449,8 +459,8 @@ export class MonitorComponent implements OnInit, OnDestroy {
public countSubCategoriesToShow(category:Category): number { public countSubCategoriesToShow(category:Category): number {
let counter = 0; let counter = 0;
for (let sub of category.subCategories) { for (let sub of category.subCategories) {
if(sub.isActive) { if(sub.visibility != "PRIVATE") {
if (sub.isPublic) { if (sub.visibility == "PUBLIC") {
// return true; // return true;
counter++; counter++;
}else if (this.isAdmin()) { }else if (this.isAdmin()) {

View File

@ -40,7 +40,7 @@
<div class="menu_title uk-width-expand"> <div class="menu_title uk-width-expand">
{{topic.name}} {{topic.name}}
<!--<i <!--<i
class="material-icons md-18 uk-margin-small-left">{{topic.isPublic ? 'public' : 'lock'}}</i> class="material-icons md-18 uk-margin-small-left">{{topic.visibility ? 'public' : 'lock'}}</i>
<i class="material-icons md-18" <i class="material-icons md-18"
[class.md-color-green-300]="topic.isActive">brightness_1</i>--> [class.md-color-green-300]="topic.isActive">brightness_1</i>-->
</div> </div>
@ -50,12 +50,12 @@
class="uk-padding-remove-horizontal"> class="uk-padding-remove-horizontal">
<ul class="uk-nav uk-dropdown-nav uk-list"> <ul class="uk-nav uk-dropdown-nav uk-list">
<li><a (click)="editTopicOpen(i); hide(element)">Edit</a></li> <li><a (click)="editTopicOpen(i); hide(element)">Edit</a></li>
<li><a (click)="toggleTopicStatus(topic); hide(element)"> <!--<li><a (click)="toggleTopicStatus(topic); hide(element)">
{{topic.isActive ? 'Inactive' : 'Active'}}</a> {{topic.isActive ? 'Inactive' : 'Active'}}</a>
</li> </li>
<li><a (click)="toggleTopicAccess(topic); hide(element)"> <li><a (click)="toggleTopicStatus(topic); hide(element)">
{{topic.isPublic?'Private':'Public'}}</a> {{topic.isPublic?'Private':'Public'}}</a>
</li> </li>-->
<hr *ngIf="!topic.defaultId" class="uk-nav-divider"> <hr *ngIf="!topic.defaultId" class="uk-nav-divider">
<li *ngIf="!topic.defaultId"><a (click)="deleteTopicOpen(i, 'delete'); hide(element)">Delete</a> <li *ngIf="!topic.defaultId"><a (click)="deleteTopicOpen(i, 'delete'); hide(element)">Delete</a>
<!-- <ng-container *ngIf="!stakeholder.defaultId">--> <!-- <ng-container *ngIf="!stakeholder.defaultId">-->
@ -117,7 +117,7 @@
<!--<div class="md-card-toolbar-actions" > <!--<div class="md-card-toolbar-actions" >
<div class="md-card-dropdown uk-inline"> <div class="md-card-dropdown uk-inline">
<i uk-icon="more-vertical"></i> <i uk-icon="more-vertical" class="clickable"></i>
<div #element uk-dropdown="mode: click; pos: bottom-right; delay-hide: 0; flip: false" <div #element uk-dropdown="mode: click; pos: bottom-right; delay-hide: 0; flip: false"
class="uk-padding-remove-horizontal"> class="uk-padding-remove-horizontal">
<ul class="uk-nav uk-dropdown-nav"> <ul class="uk-nav uk-dropdown-nav">
@ -127,7 +127,7 @@
{{indicator.isActive ? 'Inactive' : 'Active'}}</a> {{indicator.isActive ? 'Inactive' : 'Active'}}</a>
</li> </li>
<li *ngIf="!editing"><a (click)="toggleIndicatorAccess(chart._id, indicator);hide(element)"> <li *ngIf="!editing"><a (click)="toggleIndicatorAccess(chart._id, indicator);hide(element)">
{{indicator.isPublic ? 'Private' : 'Public'}}</a> {{indicator.visibility ? 'Private' : 'Public'}}</a>
</li> </li>
<hr *ngIf="!indicator.defaultId " class="uk-nav-divider"> <hr *ngIf="!indicator.defaultId " class="uk-nav-divider">
<li *ngIf="!editing && !indicator.defaultId "><a <li *ngIf="!editing && !indicator.defaultId "><a
@ -190,8 +190,8 @@
label="Icon(SVG)" type="textarea"> label="Icon(SVG)" type="textarea">
</div> </div>
<div class="uk-form-row uk-flex uk-flex-middle"> <div class="uk-form-row uk-flex uk-flex-middle">
<div dashboard-input class="uk-width-small" [formInput]="form.get('isPublic')" <div dashboard-input class="uk-width-small" [formInput]="form.get('visibility')"
label="Accessibility" [options]="stakeholderUtils.isPublic" type="select"> label="Accessibility" [options]="stakeholderUtils.visibility" type="select">
</div> </div>
<div dashboard-input class="uk-margin-small-left uk-width-small" [formInput]="form.get('isActive')" <div dashboard-input class="uk-margin-small-left uk-width-small" [formInput]="form.get('isActive')"
label="Visibility" [options]="stakeholderUtils.isActive" type="select"> label="Visibility" [options]="stakeholderUtils.isActive" type="select">

View File

@ -6,7 +6,7 @@ import {EnvProperties} from '../openaireLibrary/utils/properties/env-properties'
import {ErrorCodes} from '../openaireLibrary/utils/properties/errorCodes'; import {ErrorCodes} from '../openaireLibrary/utils/properties/errorCodes';
import {ErrorMessagesComponent} from '../openaireLibrary/utils/errorMessages.component'; import {ErrorMessagesComponent} from '../openaireLibrary/utils/errorMessages.component';
import {Stakeholder, Topic} from "../openaireLibrary/monitor/entities/stakeholder"; import {Stakeholder, Topic, Visibility} from "../openaireLibrary/monitor/entities/stakeholder";
import {StakeholderService} from "../openaireLibrary/monitor/services/stakeholder.service"; import {StakeholderService} from "../openaireLibrary/monitor/services/stakeholder.service";
import {HelperFunctions} from "../openaireLibrary/utils/HelperFunctions.class"; import {HelperFunctions} from "../openaireLibrary/utils/HelperFunctions.class";
import {AlertModal} from "../openaireLibrary/utils/modal/alert"; import {AlertModal} from "../openaireLibrary/utils/modal/alert";
@ -15,6 +15,7 @@ import {FormBuilder, FormGroup, Validators} from "@angular/forms";
import {LayoutService} from "../openaireLibrary/dashboard/sharedComponents/sidebar/layout.service"; import {LayoutService} from "../openaireLibrary/dashboard/sharedComponents/sidebar/layout.service";
import {IndicatorUtils, StakeholderUtils} from "../utils/indicator-utils"; import {IndicatorUtils, StakeholderUtils} from "../utils/indicator-utils";
import {IDeactivateComponent} from "../openaireLibrary/utils/can-exit.guard"; import {IDeactivateComponent} from "../openaireLibrary/utils/can-exit.guard";
import {visit} from "@angular/compiler-cli/src/ngtsc/util/src/visitor";
declare var UIkit; declare var UIkit;
@ -96,8 +97,7 @@ export class StakeholderComponent implements OnInit, OnDestroy, IDeactivateCompo
this.stakeholderUtils.aliasValidator(topics) this.stakeholderUtils.aliasValidator(topics)
] ]
), ),
isActive: this.fb.control(topic.isActive), visibility: this.fb.control(topic.visibility),
isPublic: this.fb.control(topic.isPublic),
defaultId: this.fb.control(topic.defaultId), defaultId: this.fb.control(topic.defaultId),
categories: this.fb.control(topic.categories), categories: this.fb.control(topic.categories),
icon: this.fb.control(topic.icon) icon: this.fb.control(topic.icon)
@ -116,7 +116,7 @@ export class StakeholderComponent implements OnInit, OnDestroy, IDeactivateCompo
public editTopicOpen(index = -1) { public editTopicOpen(index = -1) {
this.index = index; this.index = index;
if (index === -1) { if (index === -1) {
this.buildTopic(new Topic(null, null, null, true, true)); this.buildTopic(new Topic(null, null, null, "PUBLIC"));
} else { } else {
this.buildTopic(this.stakeholder.topics[index]); this.buildTopic(this.stakeholder.topics[index]);
} }
@ -202,14 +202,14 @@ export class StakeholderComponent implements OnInit, OnDestroy, IDeactivateCompo
}); });
} }
toggleTopicStatus(topic: Topic) { toggleTopicStatus(topic: Topic, visibility:Visibility) {
let path = [ let path = [
this.stakeholder._id, this.stakeholder._id,
topic._id topic._id
]; ];
this.stakeholderService.toggleStatus(this.properties.monitorServiceAPIURL, path).subscribe(isActive => { this.stakeholderService.toggleVisibility(this.properties.monitorServiceAPIURL, path, visibility).subscribe(visibility => {
topic.isActive = isActive; topic.visibility = visibility;
UIkit.notification('Topic has been successfully changed to ' + (isActive ? 'active' : 'inactive'), { UIkit.notification('Topic has been successfully changed to ' + visibility.toLowerCase(), {
status: 'success', status: 'success',
timeout: 3000, timeout: 3000,
pos: 'top-left' pos: 'top-left'
@ -223,14 +223,14 @@ export class StakeholderComponent implements OnInit, OnDestroy, IDeactivateCompo
}); });
} }
toggleTopicAccess(topic: Topic) { /*toggleTopicAccess(topic: Topic) {
let path = [ let path = [
this.stakeholder._id, this.stakeholder._id,
topic._id topic._id
]; ];
this.stakeholderService.toggleAccess(this.properties.monitorServiceAPIURL, path).subscribe(isPublic => { this.stakeholderService.toggleAccess(this.properties.monitorServiceAPIURL, path).subscribe(visibility => {
topic.isPublic = isPublic; topic.visibility = visibility;
UIkit.notification('Topic has been successfully changed to ' + (isPublic?'public':'private'), { UIkit.notification('Topic has been successfully changed to ' + (visibility?'public':'private'), {
status: 'success', status: 'success',
timeout: 3000, timeout: 3000,
pos: 'top-left' pos: 'top-left'
@ -242,8 +242,10 @@ export class StakeholderComponent implements OnInit, OnDestroy, IDeactivateCompo
pos: 'top-left' pos: 'top-left'
}); });
}); });
} }*/
satinizeHTML(html){ satinizeHTML(html){
return this.sanitizer.bypassSecurityTrustHtml(html); return this.sanitizer.bypassSecurityTrustHtml(html);
} }
} }

View File

@ -6,49 +6,27 @@
type="select" [options]="[all].concat(indicatorUtils.allChartTypes)" type="select" [options]="[all].concat(indicatorUtils.allChartTypes)"
label="Chart Type"></div> label="Chart Type"></div>
</div> </div>
<div>
<div dashboard-input [formInput]="filters.get('privacy')"
type="select" [options]="[all].concat(indicatorUtils.isPublic)"
label="Privacy"></div>
</div>
<div> <div>
<div dashboard-input [formInput]="filters.get('status')" <div dashboard-input [formInput]="filters.get('status')"
type="select" [options]="[all].concat(indicatorUtils.isActive)" type="select" [options]="[all].concat(stakeholderUtils.visibility)"
label="Status"></div> label="Status"></div>
</div> </div>
</div> </div>
<div class="uk-width-expand@m uk-width-1-1 uk-flex uk-flex-middle uk-flex-right"> <div class="uk-width-expand@m uk-width-1-1 uk-flex uk-flex-middle uk-flex-right">
<div class="uk-inline uk-width-medium"> <div class="uk-inline uk-width-medium">
<span class="uk-position-center-right"><i class="material-icons">search</i></span> <span class="uk-position-center-right"><i uk-icon="search" class="uk-icon"></i></span>
<div dashboard-input [formInput]="filters.get('keyword')" label="Locate indicator"></div> <div dashboard-input [formInput]="filters.get('keyword')" label="Locate indicator"></div>
</div> </div>
<div [class.uk-active]="grid" class="uk-margin-small-left">
<a [routerLink]="" class="uk-icon-button " (click)="changeGrid(true)"><i
class="material-icons">view_module</i></a>
</div>
<div [class.uk-active]="!grid" class="uk-margin-small-left">
<a [routerLink]="" class="uk-icon-button" (click)="changeGrid(false)"><i class="material-icons">list</i></a>
</div>
</div> </div>
</div> </div>
<div class="uk-child-width-1-2 uk-flex-middle" uk-grid> <div class=" ">
<!-- <div>
<ul class="uk-breadcrumb">
<li><span>{{stakeholder.topics[topicIndex].name}}</span></li>
<li>
<span>{{stakeholder.topics[topicIndex].categories[categoryIndex].name}}</span></li>
<li>
<span class="md-color-blue-900 uk-text-bold">
{{stakeholder.topics[topicIndex].categories[categoryIndex].subCategories[subcategoryIndex].name}}
</span>
</li>
</ul>
</div>-->
<div class="uk-flex uk-flex-right"> <div class="uk-flex uk-flex-right">
<a class="md-btn md-btn-primary waves-button waves-effect"> <a class="uk-button uk-button-primary">
<i class="material-icons uk-margin-small-right">remove_red_eye</i> <icon name="preview"></icon>
Preview Preview
<i class="material-icons uk-margin-small-left">keyboard_arrow_down</i> <i uk-icon="chevron-down" class="uk-icon"></i>
</a> </a>
<div #element uk-dropdown="mode: click; pos: bottom-right; offset: 5; delay-hide: 0; flip: false" <div #element uk-dropdown="mode: click; pos: bottom-right; offset: 5; delay-hide: 0; flip: false"
class="uk-padding-remove-horizontal"> class="uk-padding-remove-horizontal">
@ -61,13 +39,13 @@
</div> </div>
</div> </div>
</div> </div>
<h4 class="uk-text-bold">Number Indicators</h4> <h6 class="uk-text-bold">Number Indicators</h6>
<div *ngIf="numberSections"> <div *ngIf="numberSections">
<ng-template ngFor [ngForOf]="displayNumbers" let-number let-i="index"> <ng-template ngFor [ngForOf]="displayNumbers" let-number let-i="index">
<div [class.list-view]="!grid" [id]="'number-' + number._id" [class.section]="isAdministrator" <div [id]="'number-' + number._id" [class.section]="isAdministrator"
class="uk-grid-match uk-grid-small uk-grid uk-margin-top" class="uk-grid-match uk-grid-small uk-grid uk-margin-top"
uk-sortable="group: number" uk-grid> uk-sortable="group: number" uk-grid>
<div *ngIf="grid" class="tools disable-sortable uk-sortable-nodrag"> <div class="tools disable-sortable uk-sortable-nodrag">
<div *ngIf="isAdministrator" class="actions"> <div *ngIf="isAdministrator" class="actions">
<a [class.uk-disabled]="editing" class="" (click)="createSection(i, 'number')" <a [class.uk-disabled]="editing" class="" (click)="createSection(i, 'number')"
title="Create a new section"><i title="Create a new section"><i
@ -89,7 +67,7 @@
<!-- </ng-container>--> <!-- </ng-container>-->
</div> </div>
</div> </div>
<div *ngIf="grid && numberSections.at(i)" <div *ngIf="numberSections.at(i)"
class="uk-form-row uk-width-1-1 uk-grid-medium uk-flex uk-flex-middle uk-margin-bottom disable-sortable uk-sortable-nodrag" class="uk-form-row uk-width-1-1 uk-grid-medium uk-flex uk-flex-middle uk-margin-bottom disable-sortable uk-sortable-nodrag"
uk-grid> uk-grid>
<div dashboard-input class="uk-width-2-3 uk-width-1-3@m" [formInput]="numberSections.at(i).get('title')" <div dashboard-input class="uk-width-2-3 uk-width-1-3@m" [formInput]="numberSections.at(i).get('title')"
@ -101,43 +79,31 @@
</button> </button>
</div> </div>
</div> </div>
<div *ngIf="!grid && number.title" class="uk-width-1-1 disable-sortable uk-sortable-nodrag">
<h4>{{number.title}}</h4>
</div>
<ng-template ngFor [ngForOf]="number.indicators" let-indicator let-j="index"> <ng-template ngFor [ngForOf]="number.indicators" let-indicator let-j="index">
<div *ngIf="indicator" [id]="indicator._id" <div *ngIf="indicator" [id]="indicator._id"
[class.uk-width-1-5@m]="grid && indicator.width === 'small'" [class.uk-width-1-5@m]="indicator.width === 'small'"
[class.uk-width-1-3@m]="grid && indicator.width === 'medium'" [class.uk-width-1-3@m]=" indicator.width === 'medium'"
[class.uk-width-1-2@m]="!grid || indicator.width === 'large'" [class.uk-width-1-2@m]=" indicator.width === 'large'"
[class.disable-sortable]="!canReorder" [class.disable-sortable]="!canReorder"
[class.uk-sortable-nodrag]="!canReorder"> [class.uk-sortable-nodrag]="!canReorder">
<div class="uk-card uk-card-default" [class.md-card-hover]="canReorder"> <div class="uk-card uk-card-default" [class.md-card-hover]="canReorder">
<div class="uk-padding-small uk-card-header"> <div class="uk-padding-small ">
<div class="md-card-toolbar-actions uk-float-right" [class.uk-flex-middle]="!grid" [class.uk-flex]="!grid"> <ng-container *ngTemplateOutlet="visibilityOptions; context:{indicator: indicator}"></ng-container>
<ng-template [ngIf]="!grid"> <div class="md-card-toolbar-actions uk-float-right" >
<div class="uk-margin-medium-right uk-flex uk-flex-middle">
<i class="material-icons md-24 uk-margin-small-right">{{indicatorUtils.isPublicIcon.get(indicator.isPublic)}}</i>
{{(indicator.isPublic) ? 'Public' : 'Private'}}
</div>
<div class="uk-margin-medium-right uk-flex uk-flex-middle">
<i class="material-icons md-24 uk-margin-small-right"
[class.md-color-green-300]="indicator.isActive">{{indicatorUtils.isActiveIcon}}</i>
{{(indicator.isActive) ? 'Active' : 'Inactive'}}
</div>
</ng-template>
<div class="md-card-dropdown uk-inline"> <div class="md-card-dropdown uk-inline">
<i uk-icon="more-vertical"></i> <i uk-icon="more-vertical" class="clickable"></i>
<div #element uk-dropdown="mode: click; pos: bottom-right; delay-hide: 0; flip: false" <div #element uk-dropdown="mode: click; pos: bottom-right; delay-hide: 0; flip: false"
class="uk-padding-remove-horizontal"> class="uk-padding-remove-horizontal">
<ul class="uk-nav uk-dropdown-nav uk-margin-left"> <ul class="uk-nav uk-dropdown-nav uk-margin-left">
<li *ngIf="isAdministrator && !indicator.defaultId && !editing"><a <li *ngIf="isAdministrator && !indicator.defaultId && !editing"><a
(click)="editNumberIndicatorOpen(number, indicator._id)">Edit</a></li> (click)="editNumberIndicatorOpen(number, indicator._id)">Edit</a></li>
<li *ngIf="!editing"><a (click)="toggleIndicatorStatus(number._id, indicator);hide(element)"> <ng-template ngFor [ngForOf]="stakeholderUtils.visibility" let-v>
{{indicator.isActive ? 'Inactive' : 'Active'}}</a> <li *ngIf="indicator.visibility != v.value"><a (click)="toggleIndicatorStatus(number._id,
</li> indicator, v.value); hide(element)">
<li *ngIf="!editing"><a (click)="toggleIndicatorAccess(number._id, indicator);hide(element)"> {{'Make ' + v.label.toLowerCase()}}</a>
{{indicator.isPublic ? 'Private' : 'Public'}}</a> </li>
</li> </ng-template>
<hr *ngIf="isAdministrator && !indicator.defaultId" class="uk-nav-divider"> <hr *ngIf="isAdministrator && !indicator.defaultId" class="uk-nav-divider">
<li *ngIf="isAdministrator && !indicator.defaultId && !editing"><a <li *ngIf="isAdministrator && !indicator.defaultId && !editing"><a
(click)="deleteIndicatorOpen(number, indicator._id, 'number', 'delete');hide(element)">Delete</a> (click)="deleteIndicatorOpen(number, indicator._id, 'number', 'delete');hide(element)">Delete</a>
@ -150,47 +116,26 @@
</div> </div>
</div> </div>
</div> </div>
<div class="uk-card-title">
{{indicator.name ? indicator.name : 'No title available'}}
</div>
</div> </div>
<div *ngIf="grid" class="uk-card-body"> <div class="">
<div class="uk-flex uk-flex-center" uk-grid> <div class="uk-flex uk-flex-center" uk-grid>
<div class="">
{{indicator.name ? indicator.name : 'No title available'}}
</div>
<div class="uk-width-1-1"> <div class="uk-width-1-1">
{{indicator.description}} {{indicator.description}}
</div> </div>
<div class="uk-width-1-2 uk-text-center"
title="{{indicator.isPublic?'Visible to all users':'Visible to members'}}">
<i class="material-icons md-24">{{indicatorUtils.isPublicIcon.get(indicator.isPublic)}}</i>
<div>{{(indicator.isPublic) ? 'Public' : 'Private'}}</div>
</div>
<div class="uk-width-1-2 uk-text-center"
title="{{indicator.isActive?'Included in the indicators list':'Available only through administration dashboard'}}">
<i class="material-icons md-24"
[class.md-color-green-300]="indicator.isActive">{{indicatorUtils.isActiveIcon}}</i>
<div>{{(indicator.isActive) ? 'Active' : 'Inactive'}}</div>
</div>
</div> </div>
</div> </div>
</div> </div>
</div> </div>
</ng-template> </ng-template>
<div *ngIf="isAdministrator" class="disable-sortable uk-sortable-nodrag" <div *ngIf="isAdministrator" class="disable-sortable uk-sortable-nodrag uk-width-1-3@m">
[class.uk-width-1-3@m]="grid"
[class.uk-width-1-1@m]="!grid">
<div class="uk-card uk-card-default clickable" (click)="editNumberIndicatorOpen(number)"> <div class="uk-card uk-card-default clickable" (click)="editNumberIndicatorOpen(number)">
<div class="uk-padding-small uk-card-header"> <div class="uk-card-body">
<div class="uk-card-title" <div uk-grid class="uk-text-center">
[class.uk-flex-middle]="!grid" <div class="uk-width-1-1 uk-text-center">
[class.uk-flex]="!grid"
[class.uk-flex-center]="!grid">
<i *ngIf="!grid" uk-icon="plus"></i>
<span>Create a custom Indicator</span>
</div>
</div>
<div *ngIf="grid" class="uk-card-body">
<div uk-grid>
<div class="uk-width-1-1">
Create a new number Indicator Create a new number Indicator
</div> </div>
<div class="uk-width-1-1 uk-flex uk-flex-center"> <div class="uk-width-1-1 uk-flex uk-flex-center">
@ -202,7 +147,7 @@
</div> </div>
</div> </div>
</ng-template> </ng-template>
<div *ngIf="grid && isAdministrator" class="new-section uk-margin-top"> <div *ngIf="isAdministrator" class="new-section uk-margin-top">
<div class="tools uk-flex uk-flex-middle"> <div class="tools uk-flex uk-flex-middle">
<button class="uk-margin-small-right uk-icon-button portal-button" (click)="createSection(-1, 'number')"> <button class="uk-margin-small-right uk-icon-button portal-button" (click)="createSection(-1, 'number')">
<i uk-icon="plus"></i> <i uk-icon="plus"></i>
@ -211,13 +156,13 @@
</div> </div>
</div> </div>
</div> </div>
<h4 class="uk-text-bold">Chart Indicators</h4> <h6 class="uk-text-bold">Chart Indicators</h6>
<div *ngIf="chartSections"> <div *ngIf="chartSections">
<ng-template ngFor [ngForOf]="displayCharts" let-chart let-i="index"> <ng-template ngFor [ngForOf]="displayCharts" let-chart let-i="index">
<div [class.list-view]="!grid" [id]="'chart-' + chart._id" <div [id]="'chart-' + chart._id"
class="uk-grid-match section uk-grid-small uk-grid uk-margin-top" class="uk-grid-match section uk-grid-small uk-grid uk-margin-top"
uk-sortable="group: chart" uk-grid> uk-sortable="group: chart" uk-grid>
<div *ngIf="grid" class="tools disable-sortable uk-sortable-nodrag"> <div class="tools disable-sortable uk-sortable-nodrag">
<div class="actions"> <div class="actions">
<a [class.uk-disabled]="editing" class="" (click)="createSection(i)" <a [class.uk-disabled]="editing" class="" (click)="createSection(i)"
title="Create a new section"><i title="Create a new section"><i
@ -240,7 +185,7 @@
<!-- </ng-container>--> <!-- </ng-container>-->
</div> </div>
</div> </div>
<div *ngIf="grid && chartSections.at(i)" <div *ngIf="chartSections.at(i)"
class="uk-form-row uk-width-1-1 uk-grid-medium uk-flex uk-flex-middle uk-margin-bottom disable-sortable uk-sortable-nodrag" class="uk-form-row uk-width-1-1 uk-grid-medium uk-flex uk-flex-middle uk-margin-bottom disable-sortable uk-sortable-nodrag"
uk-grid> uk-grid>
<div dashboard-input class="uk-width-2-3 uk-width-1-3@m" [formInput]="chartSections.at(i).get('title')" <div dashboard-input class="uk-width-2-3 uk-width-1-3@m" [formInput]="chartSections.at(i).get('title')"
@ -252,56 +197,30 @@
</button> </button>
</div> </div>
</div> </div>
<div *ngIf="!grid && chart.title" class="uk-width-1-1 disable-sortable uk-sortable-nodrag">
<h4>{{chart.title}}</h4>
</div>
<ng-template ngFor [ngForOf]="chart.indicators" let-indicator let-j="index"> <ng-template ngFor [ngForOf]="chart.indicators" let-indicator let-j="index">
<div *ngIf="indicator" [id]="indicator._id" <div *ngIf="indicator" [id]="indicator._id"
[class.uk-width-1-3@m]="grid && indicator.width === 'small'" [class.uk-width-1-3@m]="indicator.width === 'small'"
[class.uk-width-1-2@m]="grid && indicator.width === 'medium'" [class.uk-width-1-2@m]=" indicator.width === 'medium'"
[class.uk-width-1-1@m]="!grid || indicator.width === 'large'" [class.uk-width-1-1@m]="indicator.width === 'large'"
[class.disable-sortable]="!canReorder" [class.disable-sortable]="!canReorder"
[class.uk-sortable-nodrag]="!canReorder"> [class.uk-sortable-nodrag]="!canReorder">
<div class="uk-card uk-card-default" [class.md-card-hover]="canReorder"> <div class="uk-card uk-card-default" [class.md-card-hover]="canReorder">
<div class="uk-padding-small uk-card-header"> <div class="uk-padding-small uk-padding-remove-bottom ">
<div class="md-card-toolbar-actions uk-float-right" [class.uk-flex-middle]="!grid" [class.uk-flex]="!grid"> <ng-container *ngTemplateOutlet="visibilityOptions; context:{indicator: indicator}"></ng-container>
<ng-template [ngIf]="!grid"> <div class="md-card-toolbar-actions uk-float-right" >
<div *ngFor="let indicatorPath of indicator.indicatorPaths"
class="uk-margin-medium-right uk-text-capitalize uk-flex uk-flex-middle">
<i class="material-icons md-24 uk-margin-small-right">
{{indicatorUtils.chartTypesIcons.get(indicatorPath.type)}}
</i>
{{indicatorPath.type + ' Chart'}}
</div>
</ng-template>
<div *ngIf="!grid" class="uk-margin-medium-right uk-flex uk-flex-middle"
title="{{indicator.isPublic?'Visible to all users':'Visible to members'}}">
<i class="material-icons md-24 uk-margin-small-right">
{{indicatorUtils.isPublicIcon.get(indicator.isPublic)}}
</i>
{{(indicator.isPublic) ? 'Public' : 'Private'}}
</div>
<div *ngIf="!grid" class="uk-margin-medium-right uk-flex uk-flex-middle"
title="{{indicator.isActive?'Included in the indicators list':'Available only through administration dashboard'}}">
<i class="material-icons md-24 uk-margin-small-right"
[class.md-color-green-300]="indicator.isActive">
{{indicatorUtils.isActiveIcon}}
</i>
{{(indicator.isActive) ? 'Active' : 'Inactive'}}
</div>
<div class="md-card-dropdown uk-inline"> <div class="md-card-dropdown uk-inline">
<i uk-icon="more-vertical"></i> <i uk-icon="more-vertical" class="clickable"></i>
<div #element uk-dropdown="mode: click; pos: bottom-right; delay-hide: 0; flip: false" <div #element uk-dropdown="mode: click; pos: bottom-right; delay-hide: 0; flip: false"
class="uk-padding-remove-horizontal"> class="uk-padding-remove-horizontal">
<ul class="uk-nav uk-dropdown-nav uk-margin-left"> <ul class="uk-nav uk-dropdown-nav uk-margin-left">
<li *ngIf="!editing"><a (click)="editChartIndicatorOpen(chart, indicator._id);hide(element)">Edit</a> <li *ngIf="!editing"><a (click)="editChartIndicatorOpen(chart, indicator._id);hide(element)">Edit</a>
</li> </li>
<li *ngIf="!editing"><a (click)="toggleIndicatorStatus(chart._id, indicator);hide(element)"> <ng-template ngFor [ngForOf]="stakeholderUtils.visibility" let-v>
{{indicator.isActive ? 'Inactive' : 'Active'}}</a> <li *ngIf="indicator.visibility != v.value"><a (click)="toggleIndicatorStatus(chart._id,
</li> indicator, v.value); hide(element)">
<li *ngIf="!editing"><a (click)="toggleIndicatorAccess(chart._id, indicator);hide(element)"> {{'Make ' + v.label.toLowerCase()}}</a>
{{indicator.isPublic ? 'Private' : 'Public'}}</a> </li>
</li> </ng-template>
<hr *ngIf="!indicator.defaultId " class="uk-nav-divider"> <hr *ngIf="!indicator.defaultId " class="uk-nav-divider">
<li *ngIf="!editing && !indicator.defaultId "><a <li *ngIf="!editing && !indicator.defaultId "><a
(click)="deleteIndicatorOpen(chart, indicator._id, 'chart', 'delete');hide(element)"> (click)="deleteIndicatorOpen(chart, indicator._id, 'chart', 'delete');hide(element)">
@ -313,40 +232,18 @@
</div> </div>
</div> </div>
</div> </div>
<div class="">
{{indicator.name}}
</div>
</div>
<div *ngIf="grid" class="uk-card-body">
<div class="uk-flex uk-flex-center" uk-grid>
<div class="uk-width-1-3 uk-text-center" </div>
[ngClass]="'uk-child-width-1-' + indicator.indicatorPaths.length" uk-grid> <div class="uk-padding-small uk-padding-remove-top">
<div *ngFor="let indicatorPath of indicator.indicatorPaths"> <div class="">
<i class="material-icons md-24"> <div class="uk-text-center">
{{indicatorUtils.chartTypesIcons.get(indicatorPath.type)}} {{indicator.name}}
</i>
<div class="uk-text-capitalize">{{indicatorPath.type + ' Chart'}}</div>
</div>
</div>
<div class="uk-width-1-3 uk-text-center"
title="{{indicator.isPublic?'Visible to all users':'Visible to members'}}">
<i class="material-icons md-24">
{{indicatorUtils.isPublicIcon.get(indicator.isPublic)}}
</i>
<div>{{(indicator.isPublic) ? 'Public' : 'Private'}}</div>
</div>
<div class="uk-width-1-3 uk-text-center"
title="{{indicator.isActive?'Included in the indicators list':'Available only through administration dashboard'}}">
<i class="material-icons md-24" [class.md-color-green-300]="indicator.isActive">
{{indicatorUtils.isActiveIcon}}
</i>
<div>{{(indicator.isActive) ? 'Active' : 'Inactive'}}</div>
</div> </div>
<iframe *ngIf="indicator.indicatorPaths[0] && indicator.indicatorPaths[0].source !== 'image' && <iframe *ngIf="indicator.indicatorPaths[0] && indicator.indicatorPaths[0].source !== 'image' &&
safeUrls.get(indicatorUtils.getFullUrl(stakeholder, indicator.indicatorPaths[0]))" safeUrls.get(indicatorUtils.getFullUrl(stakeholder, indicator.indicatorPaths[0]))"
[src]="safeUrls.get(indicatorUtils.getFullUrl(stakeholder, indicator.indicatorPaths[0]))" [src]="safeUrls.get(indicatorUtils.getFullUrl(stakeholder, indicator.indicatorPaths[0]))"
class="uk-width-1-1 uk-height-medium"></iframe> class="uk-width-1-1 uk-height-medium"></iframe>
<!-- <div>Uncomment for iframes preview</div>-->
<div *ngIf="indicator.indicatorPaths[0] && indicator.indicatorPaths[0].source === 'image'"> <div *ngIf="indicator.indicatorPaths[0] && indicator.indicatorPaths[0].source === 'image'">
<img class="uk-width-1-1 uk-height-medium" [src]="indicator.indicatorPaths[0].url"> <img class="uk-width-1-1 uk-height-medium" [src]="indicator.indicatorPaths[0].url">
</div> </div>
@ -358,21 +255,11 @@
</div> </div>
</div> </div>
</ng-template> </ng-template>
<div class="disable-sortable uk-sortable-nodrag" <div class="disable-sortable uk-sortable-nodrag uk-width-1-2@m">
[class.uk-width-1-3@m]="grid"
[class.uk-width-1-1@m]="!grid">
<div class="uk-card uk-card-default clickable" (click)="editChartIndicatorOpen(chart)"> <div class="uk-card uk-card-default clickable" (click)="editChartIndicatorOpen(chart)">
<div class="uk-padding-small uk-card-header"> <div class="uk-card-body">
<div class="" <div >
[class.uk-flex-middle]="!grid" <div class="uk-text-bold">Create a custom indicator</div>
[class.uk-flex]="!grid"
[class.uk-flex-center]="!grid">
<i *ngIf="!grid" uk-icon="plus"></i>
<span>Create a custom Indicator</span>
</div>
</div>
<div *ngIf="grid" class="uk-card-body">
<div uk-grid>
<div class="uk-width-1-1"> <div class="uk-width-1-1">
Use our advance tool to create a custom Indicator that suit the needs of your funding Use our advance tool to create a custom Indicator that suit the needs of your funding
KPI's. KPI's.
@ -386,7 +273,7 @@
</div> </div>
</div> </div>
</ng-template> </ng-template>
<div *ngIf="grid" class="new-section uk-margin-top"> <div class="new-section uk-margin-top">
<div class="tools uk-flex uk-flex-middle"> <div class="tools uk-flex uk-flex-middle">
<button [disabled]="editing" class="uk-margin-small-right uk-icon-button portal-button" (click)="createSection()"> <button [disabled]="editing" class="uk-margin-small-right uk-icon-button portal-button" (click)="createSection()">
<i uk-icon="plus"></i> <i uk-icon="plus"></i>
@ -407,11 +294,8 @@
label="Description" type="textarea"> label="Description" type="textarea">
</div> </div>
<div class="uk-form-row uk-flex uk-flex-middle"> <div class="uk-form-row uk-flex uk-flex-middle">
<div dashboard-input class="uk-width-small" [formInput]="numberIndicatorFb.get('isPublic')" <div dashboard-input class="uk-width-small" [formInput]="numberIndicatorFb.get('visibility')"
label="Accessibility" [options]="indicatorUtils.isPublic" type="select"> label="Visibility" [options]="stakeholderUtils.visibility" type="select">
</div>
<div dashboard-input class="uk-margin-small-left uk-width-small" [formInput]="numberIndicatorFb.get('isActive')"
label="Visibility" [options]="indicatorUtils.isActive" type="select">
</div> </div>
<div dashboard-input class="uk-margin-small-left uk-width-small" [formInput]="numberIndicatorFb.get('width')" <div dashboard-input class="uk-margin-small-left uk-width-small" [formInput]="numberIndicatorFb.get('width')"
type="select" [options]="indicatorUtils.indicatorSizes" type="select" [options]="indicatorUtils.indicatorSizes"
@ -472,11 +356,8 @@
label="Description" type="textarea"> label="Description" type="textarea">
</div> </div>
<div class="uk-form-row uk-flex uk-flex-middle"> <div class="uk-form-row uk-flex uk-flex-middle">
<div dashboard-input class="uk-width-small" [formInput]="chartIndicatorFb.get('isPublic')" <div dashboard-input class="uk-width-small" [formInput]="chartIndicatorFb.get('visibility')"
label="Accessibility" [options]="indicatorUtils.isPublic" type="select"> label="Visibility" [options]="stakeholderUtils.visibility" type="select">
</div>
<div dashboard-input class="uk-margin-small-left uk-width-small" [formInput]="chartIndicatorFb.get('isActive')"
label="Visibility" [options]="indicatorUtils.isActive" type="select">
</div> </div>
<div dashboard-input class="uk-margin-small-left uk-width-small" [formInput]="chartIndicatorFb.get('width')" <div dashboard-input class="uk-margin-small-left uk-width-small" [formInput]="chartIndicatorFb.get('width')"
type="select" [options]="indicatorUtils.indicatorSizes" type="select" [options]="indicatorUtils.indicatorSizes"
@ -609,3 +490,22 @@
<!-- You are about to delete this section and its indicators permanently.--> <!-- You are about to delete this section and its indicators permanently.-->
<!-- Are you sure you want to proceed?--> <!-- Are you sure you want to proceed?-->
<!--</modal-alert>--> <!--</modal-alert>-->
<ng-template #visibilityOptions let-indicator="indicator" >
<span class="uk-invisible-hover uk-padding-remove" (click)="$event.stopPropagation();$event.preventDefault()">
<i [attr.uk-icon]="stakeholderUtils.isPublicIcon.get(indicator.visibility)" class="clickable"></i>
<div #element uk-dropdown="mode: click; pos: bottom-left; delay-hide: 0; flip: false">
<ul class="uk-nav uk-dropdown-nav">
<li *ngFor="let v of stakeholderUtils.visibility" [class.selectedVisibility]="v.value == indicator.visibility">
<a
*ngIf="indicator.visibility != v.value"
(click)="$event.stopPropagation();toggleIndicatorStatus(indicator._id, indicator,v.value);hide(element);$event.preventDefault()">
<i [attr.uk-icon]="stakeholderUtils.isPublicIcon.get( v.value)"></i> {{v.label}}</a>
<a *ngIf="indicator.visibility == v.value">
<i [attr.uk-icon]="stakeholderUtils.isPublicIcon.get( v.value)"></i> {{v.label}} <icon
customClass="uk-text-secondary uk-float-right" [ratio]="0.5"
name="bullet"></icon></a>
</li>
</ul>
</div>
</span>
</ng-template>

View File

@ -9,8 +9,15 @@ import {
SimpleChanges, SimpleChanges,
ViewChild ViewChild
} from "@angular/core"; } from "@angular/core";
import {Indicator, IndicatorPath, IndicatorType, Section, Stakeholder} from "../openaireLibrary/monitor/entities/stakeholder"; import {
import {IndicatorUtils} from "../utils/indicator-utils"; Indicator,
IndicatorPath,
IndicatorType,
Section,
Stakeholder,
Visibility
} from "../openaireLibrary/monitor/entities/stakeholder";
import {IndicatorUtils, StakeholderUtils} from "../utils/indicator-utils";
import {FormArray, FormBuilder, FormControl, FormGroup, Validators} from "@angular/forms"; import {FormArray, FormBuilder, FormControl, FormGroup, Validators} from "@angular/forms";
import {AlertModal} from "../openaireLibrary/utils/modal/alert"; import {AlertModal} from "../openaireLibrary/utils/modal/alert";
import {StatisticsService} from "../utils/services/statistics.service"; import {StatisticsService} from "../utils/services/statistics.service";
@ -45,6 +52,7 @@ export class IndicatorsComponent implements OnInit, OnDestroy, OnChanges, AfterV
public user = null; public user = null;
public preview: string; public preview: string;
public indicatorUtils: IndicatorUtils = new IndicatorUtils(); public indicatorUtils: IndicatorUtils = new IndicatorUtils();
public stakeholderUtils: StakeholderUtils = new StakeholderUtils();
public numberIndicatorFb: FormGroup; public numberIndicatorFb: FormGroup;
public chartIndicatorFb: FormGroup; public chartIndicatorFb: FormGroup;
public chartSections: FormArray; public chartSections: FormArray;
@ -71,7 +79,7 @@ export class IndicatorsComponent implements OnInit, OnDestroy, OnChanges, AfterV
/** /**
* Toggles * Toggles
*/ */
public grid: boolean = true; // public grid: boolean = true;
public editing: boolean = false; public editing: boolean = false;
/** Safe Urls*/ /** Safe Urls*/
public safeUrls: Map<string, SafeResourceUrl> = new Map<string, SafeResourceUrl>([]); public safeUrls: Map<string, SafeResourceUrl> = new Map<string, SafeResourceUrl>([]);
@ -91,7 +99,7 @@ export class IndicatorsComponent implements OnInit, OnDestroy, OnChanges, AfterV
public indicatorChildrenActionOnDelete: string; public indicatorChildrenActionOnDelete: string;
urlParameterizedMessage = ""; urlParameterizedMessage = "";
constructor(private layoutService: LayoutService, constructor(private layoutService: LayoutService,
private stakeholderService: StakeholderService, private stakeholderService: StakeholderService,
private statisticsService: StatisticsService, private statisticsService: StatisticsService,
private userManagementService: UserManagementService, private userManagementService: UserManagementService,
@ -203,24 +211,17 @@ export class IndicatorsComponent implements OnInit, OnDestroy, OnChanges, AfterV
hide(element: any) { hide(element: any) {
UIkit.dropdown(element).hide(); UIkit.dropdown(element).hide();
} }
public changeGrid(value) {
this.grid = value;
}
private buildFilters() { private buildFilters() {
this.filters = this.fb.group({ this.filters = this.fb.group({
chartType: this.fb.control('all'), chartType: this.fb.control('all'),
privacy: this.fb.control('all'),
status: this.fb.control('all'), status: this.fb.control('all'),
keyword: this.fb.control('') keyword: this.fb.control('')
}); });
this.subscriptions.push(this.filters.get('chartType').valueChanges.subscribe(value => { this.subscriptions.push(this.filters.get('chartType').valueChanges.subscribe(value => {
this.onChartTypeChange(value); this.onChartTypeChange(value);
})); }));
this.subscriptions.push(this.filters.get('privacy').valueChanges.subscribe(value => {
this.onPrivacyChange(value);
}));
this.subscriptions.push(this.filters.get('status').valueChanges.subscribe(value => { this.subscriptions.push(this.filters.get('status').valueChanges.subscribe(value => {
this.onStatusChange(value); this.onStatusChange(value);
})); }));
@ -255,10 +256,9 @@ export class IndicatorsComponent implements OnInit, OnDestroy, OnChanges, AfterV
} }
filterCharts() { filterCharts() {
this.displayCharts = this.filterChartType(this.filterPrivacy( this.displayCharts = this.filterChartType(
this.filterStatus(this.filterByKeyword(HelperFunctions.copy(this.charts), this.filters.value.keyword), this.filterStatus(this.filterByKeyword(HelperFunctions.copy(this.charts), this.filters.value.keyword),
this.filters.value.status), this.filters.value.status),
this.filters.value.privacy),
this.filters.value.chartType this.filters.value.chartType
); );
this.displayCharts.forEach(section => { this.displayCharts.forEach(section => {
@ -276,10 +276,9 @@ export class IndicatorsComponent implements OnInit, OnDestroy, OnChanges, AfterV
} }
filterNumbers() { filterNumbers() {
this.displayNumbers = this.filterPrivacy(this.filterStatus( this.displayNumbers = this.filterStatus(
this.filterByKeyword(HelperFunctions.copy(this.numbers), this.filters.value.keyword), this.filterByKeyword(HelperFunctions.copy(this.numbers), this.filters.value.keyword),
this.filters.value.status), this.filters.value.status);
this.filters.value.privacy);
this.buildSections(); this.buildSections();
} }
@ -287,11 +286,7 @@ export class IndicatorsComponent implements OnInit, OnDestroy, OnChanges, AfterV
this.displayCharts = this.filterChartType(HelperFunctions.copy(this.charts), value); this.displayCharts = this.filterChartType(HelperFunctions.copy(this.charts), value);
} }
onPrivacyChange(value) {
this.displayCharts = this.filterPrivacy(HelperFunctions.copy(this.charts), value);
this.displayNumbers = this.filterPrivacy(HelperFunctions.copy(this.numbers), value);
}
onStatusChange(value) { onStatusChange(value) {
this.displayCharts = this.filterStatus(HelperFunctions.copy(this.charts), value); this.displayCharts = this.filterStatus(HelperFunctions.copy(this.charts), value);
this.displayNumbers = this.filterStatus(HelperFunctions.copy(this.numbers), value); this.displayNumbers = this.filterStatus(HelperFunctions.copy(this.numbers), value);
@ -311,18 +306,12 @@ export class IndicatorsComponent implements OnInit, OnDestroy, OnChanges, AfterV
return sections; return sections;
} }
private filterPrivacy(sections: Section[], value): Section[] {
if (value !== 'all') {
sections.forEach(section =>
section.indicators = section.indicators.filter(indicator => indicator.isPublic === value));
}
return sections;
}
private filterStatus(sections: Section[], value): Section[] { private filterStatus(sections: Section[], value): Section[] {
if (value !== 'all') { if (value !== 'all') {
sections.forEach(section => sections.forEach(section =>
section.indicators = section.indicators.filter(indicator => indicator.isActive === value)); section.indicators = section.indicators.filter(indicator => indicator.visibility === value));
} }
return sections; return sections;
} }
@ -371,8 +360,8 @@ export class IndicatorsComponent implements OnInit, OnDestroy, OnChanges, AfterV
} }
get canReorder(): boolean { get canReorder(): boolean {
return this.filters.value.chartType === 'all' && this.filters.value.privacy === 'all' && return this.filters.value.chartType === 'all' &&
this.filters.value.status === 'all' && this.filters.value.keyword === '' && this.grid && !this.editing; this.filters.value.status === 'all' && this.filters.value.keyword === '' && !this.editing;
} }
get canEdit() { get canEdit() {
@ -578,8 +567,7 @@ export class IndicatorsComponent implements OnInit, OnDestroy, OnChanges, AfterV
_id: this.fb.control(this.indicator._id), _id: this.fb.control(this.indicator._id),
name: this.fb.control(this.indicator.name, Validators.required), name: this.fb.control(this.indicator.name, Validators.required),
description: this.fb.control(this.indicator.description), description: this.fb.control(this.indicator.description),
isPublic: this.fb.control(this.indicator.isPublic), visibility: this.fb.control(this.indicator.visibility),
isActive: this.fb.control(this.indicator.isActive),
indicatorPaths: this.fb.array([], Validators.required), indicatorPaths: this.fb.array([], Validators.required),
type: this.fb.control(this.indicator.type), type: this.fb.control(this.indicator.type),
width: this.fb.control(this.indicator.width), width: this.fb.control(this.indicator.width),
@ -589,13 +577,12 @@ export class IndicatorsComponent implements OnInit, OnDestroy, OnChanges, AfterV
this.addNumberIndicatorPath(this.statisticsService.getNumberUrl(indicatorPath.source,this.indicatorUtils.getFullUrl(this.stakeholder, indicatorPath)),indicatorPath.parameters, indicatorPath.source, this.getJsonPathAsFormArray(indicatorPath)); this.addNumberIndicatorPath(this.statisticsService.getNumberUrl(indicatorPath.source,this.indicatorUtils.getFullUrl(this.stakeholder, indicatorPath)),indicatorPath.parameters, indicatorPath.source, this.getJsonPathAsFormArray(indicatorPath));
}); });
} else { } else {
this.indicator = new Indicator('', '', 'number', 'small', true, true, []); this.indicator = new Indicator('', '', 'number', 'small', "PUBLIC", []);
this.numberIndicatorFb = this.fb.group({ this.numberIndicatorFb = this.fb.group({
_id: this.fb.control(this.indicator._id), _id: this.fb.control(this.indicator._id),
name: this.fb.control(this.indicator.name, Validators.required), name: this.fb.control(this.indicator.name, Validators.required),
description: this.fb.control(this.indicator.description), description: this.fb.control(this.indicator.description),
isPublic: this.fb.control(this.indicator.isPublic), visibility: this.fb.control(this.indicator.visibility),
isActive: this.fb.control(this.indicator.isActive),
indicatorPaths: this.fb.array([], Validators.required), indicatorPaths: this.fb.array([], Validators.required),
type: this.fb.control(this.indicator.type), type: this.fb.control(this.indicator.type),
width: this.fb.control(this.indicator.width), width: this.fb.control(this.indicator.width),
@ -631,8 +618,7 @@ export class IndicatorsComponent implements OnInit, OnDestroy, OnChanges, AfterV
_id: this.fb.control(this.indicator._id), _id: this.fb.control(this.indicator._id),
name: this.fb.control(this.indicator.name), name: this.fb.control(this.indicator.name),
description: this.fb.control(this.indicator.description), description: this.fb.control(this.indicator.description),
isPublic: this.fb.control(this.indicator.isPublic), visibility: this.fb.control(this.indicator.visibility),
isActive: this.fb.control(this.indicator.isActive),
indicatorPaths: this.fb.array([]), indicatorPaths: this.fb.array([]),
width: this.fb.control(this.indicator.width), width: this.fb.control(this.indicator.width),
defaultId: this.fb.control(this.indicator.defaultId) defaultId: this.fb.control(this.indicator.defaultId)
@ -643,13 +629,12 @@ export class IndicatorsComponent implements OnInit, OnDestroy, OnChanges, AfterV
indicatorPath.safeResourceUrl = this.getSecureUrlByStakeHolder(indicatorPath); indicatorPath.safeResourceUrl = this.getSecureUrlByStakeHolder(indicatorPath);
}); });
} else { } else {
this.indicator = new Indicator('', '', 'chart', 'medium', true, true, []); this.indicator = new Indicator('', '', 'chart', 'medium', "PUBLIC",[]);
this.chartIndicatorFb = this.fb.group({ this.chartIndicatorFb = this.fb.group({
_id: this.fb.control(this.indicator._id), _id: this.fb.control(this.indicator._id),
name: this.fb.control(this.indicator.name), name: this.fb.control(this.indicator.name),
description: this.fb.control(this.indicator.description), description: this.fb.control(this.indicator.description),
isPublic: this.fb.control(this.indicator.isPublic), visibility: this.fb.control(this.indicator.visibility),
isActive: this.fb.control(this.indicator.isActive),
indicatorPaths: this.fb.array([]), indicatorPaths: this.fb.array([]),
width: this.fb.control(this.indicator.width, Validators.required), width: this.fb.control(this.indicator.width, Validators.required),
defaultId: this.fb.control(this.indicator.defaultId) defaultId: this.fb.control(this.indicator.defaultId)
@ -817,7 +802,7 @@ export class IndicatorsComponent implements OnInit, OnDestroy, OnChanges, AfterV
}); });
} }
toggleIndicatorStatus(sectionId: string, indicator: Indicator) { toggleIndicatorStatus(sectionId: string, indicator: Indicator, visibility:Visibility) {
this.editing = true; this.editing = true;
let path = [ let path = [
this.stakeholder._id, this.stakeholder._id,
@ -827,9 +812,9 @@ export class IndicatorsComponent implements OnInit, OnDestroy, OnChanges, AfterV
sectionId, sectionId,
indicator._id indicator._id
]; ];
this.stakeholderService.toggleStatus(this.properties.monitorServiceAPIURL, path).subscribe(isActive => { this.stakeholderService.toggleVisibility(this.properties.monitorServiceAPIURL, path, visibility).subscribe(visibility => {
indicator.isActive = isActive; indicator.visibility = visibility;
UIkit.notification('Indicator has been successfully changed to ' + (isActive?'active':'inactive'), { UIkit.notification('Indicator has been successfully changed to ' + visibility.toLowerCase, {
status: 'success', status: 'success',
timeout: 3000, timeout: 3000,
pos: 'top-left' pos: 'top-left'
@ -845,7 +830,7 @@ export class IndicatorsComponent implements OnInit, OnDestroy, OnChanges, AfterV
}); });
} }
toggleIndicatorAccess(sectionId: string, indicator: Indicator) { /*toggleIndicatorAccess(sectionId: string, indicator: Indicator) {
this.editing = true; this.editing = true;
let path = [ let path = [
this.stakeholder._id, this.stakeholder._id,
@ -855,9 +840,9 @@ export class IndicatorsComponent implements OnInit, OnDestroy, OnChanges, AfterV
sectionId, sectionId,
indicator._id indicator._id
]; ];
this.stakeholderService.toggleAccess(this.properties.monitorServiceAPIURL, path).subscribe(isPublic => { this.stakeholderService.toggleAccess(this.properties.monitorServiceAPIURL, path).subscribe(visibility => {
indicator.isPublic = isPublic; indicator.visibility = visibility;
UIkit.notification('Indicator has been successfully changed to ' + (isPublic?'public':'private'), { UIkit.notification('Indicator has been successfully changed to ' + (visibility?'public':'private'), {
status: 'success', status: 'success',
timeout: 3000, timeout: 3000,
pos: 'top-left' pos: 'top-left'
@ -871,7 +856,7 @@ export class IndicatorsComponent implements OnInit, OnDestroy, OnChanges, AfterV
}); });
this.editing = false; this.editing = false;
}); });
} }*/
saveSection(section: Section, index: number, type: IndicatorType = "chart") { saveSection(section: Section, index: number, type: IndicatorType = "chart") {
this.editing = true; this.editing = true;

View File

@ -14,7 +14,7 @@
<div *ngIf="stakeholder && stakeholder.topics[topicIndex]" class="menu_section"> <div *ngIf="stakeholder && stakeholder.topics[topicIndex]" class="menu_section">
<ul class="uk-list"> <ul class="uk-list">
<li class="uk-margin-bottom md-bg-blue-900 uk-padding-small"> <li class="uk-margin-bottom md-bg-blue-900 uk-padding-small">
<a [routerLink]="'/admin/' + stakeholder.alias + '/general'" class="uk-link"> <a [routerLink]="'/admin/' + stakeholder.alias" class="uk-link">
<span class="" uk-icon="icon:close;ratio:2"></span> <span class="" uk-icon="icon:close;ratio:2"></span>
</a> </a>
@ -33,11 +33,10 @@
<!-- <span [innerHTML]="satinizeHTML(topic.icon)"></span>--> <!-- <span [innerHTML]="satinizeHTML(topic.icon)"></span>-->
</span> </span>
<div class="menu_title uk-width-expand uk-text-center"> <div class="menu_title uk-width-expand uk-text-center">
<ng-container *ngTemplateOutlet="visibilityOptions; context:
{i:i, type: 'topic',
visibility: stakeholder.topics[i].visibility}"></ng-container>
{{topic.name}} {{topic.name}}
<!--<i
class="material-icons md-18 uk-margin-small-left">{{topic.isPublic ? 'public' : 'lock'}}</i>
<i class="material-icons md-18"
[class.md-color-green-300]="topic.isActive">brightness_1</i>-->
</div> </div>
<div class="uk-invisible-hover" (click)="$event.stopPropagation();$event.preventDefault()"> <div class="uk-invisible-hover" (click)="$event.stopPropagation();$event.preventDefault()">
<i class=" onHover" uk-icon="more-vertical"></i> <i class=" onHover" uk-icon="more-vertical"></i>
@ -45,12 +44,12 @@
class="uk-padding-remove-horizontal"> class="uk-padding-remove-horizontal">
<ul class="uk-nav uk-dropdown-nav uk-list"> <ul class="uk-nav uk-dropdown-nav uk-list">
<li><a (click)="editTopicOpen(i); hide(element)">Edit</a></li> <li><a (click)="editTopicOpen(i); hide(element)">Edit</a></li>
<li><a (click)="toggleTopicStatus(i); hide(element)"> <ng-template ngFor [ngForOf]="stakeholderUtils.visibility" let-v>
{{topic.isActive ? 'Inactive' : 'Active'}}</a> <li *ngIf="topic.visibility != v.value"><a (click)="toggleTopicStatus(i, v.value);
</li> hide(element)">
<li><a (click)="toggleTopicAccess(i); hide(element)"> {{'Make ' + v.label.toLowerCase()}}</a>
{{topic.isPublic?'Private':'Public'}}</a> </li>
</li> </ng-template>
<hr *ngIf="!topic.defaultId" class="uk-nav-divider"> <hr *ngIf="!topic.defaultId" class="uk-nav-divider">
<li *ngIf="!topic.defaultId"><a (click)="deleteTopicOpen(i, 'delete'); hide(element)">Delete</a> <li *ngIf="!topic.defaultId"><a (click)="deleteTopicOpen(i, 'delete'); hide(element)">Delete</a>
<!-- <ng-container *ngIf="!stakeholder.defaultId">--> <!-- <ng-container *ngIf="!stakeholder.defaultId">-->
@ -75,134 +74,6 @@
</ul> </ul>
</li> </li>
</ul> </ul>
<!-- <ul class="uk-list">
<li class="uk-margin-bottom md-bg-blue-900 uk-padding-small">
<a [routerLink]="'../'" class="md-color-white">
<span class="menu_icon"><i class="material-icons md-color-white">arrow_back</i></span>
<div class="menu_title uk-width-expand">
{{stakeholder.topics[topicIndex].name.toUpperCase()}}
</div>
<div class="menu_on_hover"
(click)="$event.stopPropagation();$event.preventDefault()">
<i class="onHover " uk-icon="more-vertical"></i>
<div #element uk-dropdown="mode: click; pos: bottom-right; offset: 5; delay-hide: 0; flip: false"
class="uk-padding-remove-horizontal">
<ul class="uk-nav uk-dropdown-nav uk-list">
<li><a (click)="editTopicOpen(); hide(element)">Edit</a></li>
<li><a (click)="toggleTopicStatus(); hide(element)">
{{stakeholder.topics[topicIndex].isActive ? 'Inactive' : 'Active'}}</a>
</li>
<li><a (click)="toggleTopicAccess(); hide(element)">
{{stakeholder.topics[topicIndex].isPublic ? 'Private' : 'Public'}}</a>
</li>
<hr *ngIf="!stakeholder.topics[topicIndex].defaultId" class="uk-nav-divider">
<li *ngIf="!stakeholder.topics[topicIndex].defaultId"><a
(click)="deleteTopicOpen('delete'); hide(element)">Delete
</a>
&lt;!&ndash; <ng-container *ngIf="!stakeholder.defaultId">&ndash;&gt;
&lt;!&ndash; <a (click)="deleteTopicOpen('delete'); hide(element)">Delete from all profiles</a>&ndash;&gt;
&lt;!&ndash; <a (click)="deleteTopicOpen('disconnect'); hide(element)">Delete and disconnect from all profiles</a>&ndash;&gt;
&lt;!&ndash; </ng-container>&ndash;&gt;
</li>
</ul>
</div>
</div>
</a>
</li>
<ng-template ngFor [ngForOf]="stakeholder.topics[topicIndex].categories" let-category let-i="index">
<li [class.current_section]="categoryIndex === i"
[class.act_section]="selectedCategoryIndex === i && toggle"
[title]="category.name+': '+(category.isActive?'Active':'Inactive')+', '+(category.isPublic?'Public':'Private')"
class="submenu_trigger">
<a href="#" (click)="toggleCategory(i);$event.preventDefault()" class="uk-flex">
<span *ngIf="category.icon" class="menu_icon"><i
class="material-icons">{{category.icon}}</i></span>
<div class="menu_title uk-width-expand" >
{{category.name}}
</div>
<div class="menu_on_hover"
(click)="$event.stopPropagation();$event.preventDefault()">
<i class=" onHover" uk-icon="more-vertical"></i>
<div #element uk-dropdown="mode: click; pos: bottom-right; offset: 5; delay-hide: 0; flip: false"
class="uk-padding-remove-horizontal">
<ul class="uk-nav uk-dropdown-nav">
<li><a (click)="editCategoryOpen(i); hide(element)">Edit</a></li>
<li><a (click)="toggleCategoryStatus(i); hide(element)">
{{category.isActive ? 'Inactive' : 'Active'}}</a>
</li>
<li><a (click)="toggleCategoryAccess(i); hide(element)">
{{category.isPublic ? 'Private' : 'Public'}}</a>
</li>
<hr *ngIf="!stakeholder.topics[topicIndex].categories[i].defaultId" class="uk-nav-divider">
<li *ngIf="!stakeholder.topics[topicIndex].categories[i].defaultId"><a
(click)="deleteCategoryOpen(i, 'delete'); hide(element)">Delete</a>
&lt;!&ndash; <ng-container *ngIf="!stakeholder.defaultId">&ndash;&gt;
&lt;!&ndash; <a (click)="deleteCategoryOpen(i, 'delete'); hide(element)">Delete from all profiles</a>&ndash;&gt;
&lt;!&ndash; <a (click)="deleteCategoryOpen(i, 'disconnect'); hide(element)">Delete and disconnect from all profiles</a>&ndash;&gt;
&lt;!&ndash; </ng-container>&ndash;&gt;
</li>
</ul>
</div>
</div>
</a>
<ul [style.display]="((selectedCategoryIndex === i && toggle)?'block':'none')">
<ng-template ngFor [ngForOf]="stakeholder.topics[topicIndex].categories[i].subCategories"
let-subcategory let-j="index">
<li [class.act_item]="categoryIndex === i && subCategoryIndex === j"
[title]="subcategory.name +': ' + (subcategory.isActive?'Active':'Inactive')+', '+(subcategory.isPublic?'Public':'Private')">
<a href="#" (click)="chooseSubcategory(i, j);$event.preventDefault()" class="uk-flex">
<span *ngIf="subcategory.icon" class="menu_icon uk-margin-small-right"><i
class="material-icons">{{subcategory.icon}}</i></span>
<div class="menu_title uk-width-expand ">
{{subcategory.name}}
&lt;!&ndash; <i class="material-icons md-18 uk-margin-small-left">{{subcategory.isPublic ? 'public' : 'lock'}}</i>
<i class="material-icons md-18"
[class.md-color-green-300]="subcategory.isActive">brightness_1</i>&ndash;&gt;
</div>
<div class="menu_on_hover"
(click)="$event.stopPropagation();$event.preventDefault()">
<i class=" onHover" uk-icon="more-vertical"></i>
<div #element uk-dropdown="mode: click; pos: bottom-right; offset: 5; delay-hide: 0; flip: false"
class="uk-padding-remove-horizontal">
<ul class="uk-nav uk-dropdown-nav">
<li><a (click)="editSubCategoryOpen(j); hide(element)">Edit</a></li>
<li><a (click)="toggleSubcategoryStatus(j); hide(element)">
{{subcategory.isActive ? 'Inactive' : 'Active'}}</a>
</li>
<li><a (click)="toggleSubcategoryAccess(j); hide(element)">
{{subcategory.isPublic ? 'Private' : 'Public'}}</a>
</li>
<hr *ngIf="!stakeholder.topics[topicIndex].categories[i].subCategories[j].defaultId"
class="uk-nav-divider">
<li *ngIf="!stakeholder.topics[topicIndex].categories[i].subCategories[j].defaultId"><a
(click)="deleteSubcategoryOpen(j, 'delete'); hide(element)">Delete</a>
&lt;!&ndash; <ng-container *ngIf="!stakeholder.defaultId">&ndash;&gt;
&lt;!&ndash; <a (click)="deleteSubcategoryOpen(j, 'delete'); hide(element)">Delete from all profiles</a>&ndash;&gt;
&lt;!&ndash; <a (click)="deleteSubcategoryOpen(j, 'disconnect'); hide(element)">Delete and disconnect from all profiles</a>&ndash;&gt;
&lt;!&ndash; </ng-container>&ndash;&gt;
</li>
</ul>
</div>
</div>
</a>
</li>
</ng-template>
<li>
<a href="#" (click)="editSubCategoryOpen();$event.preventDefault()">
<span class="menu_icon"><i uk-icon="plus"></i></span>
<span class="menu_title">Create new Subcategory</span>
</a>
</li>
</ul>
</li>
</ng-template>
<li>
<a href="#" (click)="editCategoryOpen();$event.preventDefault()">
<span class="menu_icon"><i uk-icon="plus"></i></span>
<span class="menu_title">Create new Category</span>
</a>
</li>
</ul>-->
</div> </div>
</div> </div>
<div *ngIf="!isSmallScreen" id="sidebar_switcher_toggle" class="clickable " <div *ngIf="!isSmallScreen" id="sidebar_switcher_toggle" class="clickable "
@ -225,7 +96,11 @@
[class.uk-active]="category.alias === stakeholder.topics[topicIndex].categories[categoryIndex].alias"> [class.uk-active]="category.alias === stakeholder.topics[topicIndex].categories[categoryIndex].alias">
<a (click)="toggleCategory(i)" <a (click)="toggleCategory(i)"
class="uk-margin-remove-bottom uk-h4" class="uk-margin-remove-bottom uk-h4"
><span>{{category.name}}</span> >
<ng-container *ngTemplateOutlet="visibilityOptions; context:
{i:i, type: 'cat',
visibility: stakeholder.topics[topicIndex].categories[i].visibility}"></ng-container>
<span> {{category.name}}</span>
<span class="uk-invisible-hover" <span class="uk-invisible-hover"
(click)="$event.stopPropagation();$event.preventDefault()"> (click)="$event.stopPropagation();$event.preventDefault()">
<i class=" onHover" uk-icon="more-vertical"></i> <i class=" onHover" uk-icon="more-vertical"></i>
@ -233,12 +108,12 @@
class="uk-padding-remove-horizontal"> class="uk-padding-remove-horizontal">
<ul class="uk-nav uk-dropdown-nav"> <ul class="uk-nav uk-dropdown-nav">
<li><a (click)="editCategoryOpen(i); hide(element)">Edit</a></li> <li><a (click)="editCategoryOpen(i); hide(element)">Edit</a></li>
<li><a (click)="toggleCategoryStatus(i); hide(element)"> <ng-template ngFor [ngForOf]="stakeholderUtils.visibility" let-v>
{{category.isActive ? 'Inactive' : 'Active'}}</a> <li *ngIf="category.visibility != v.value"><a (click)="toggleCategoryStatus(i, v.value);
</li> hide(element)">
<li><a (click)="toggleCategoryAccess(i); hide(element)"> {{'Make ' + v.label.toLowerCase()}}</a>
{{category.isPublic ? 'Private' : 'Public'}}</a> </li>
</li> </ng-template>
<hr *ngIf="!stakeholder.topics[topicIndex].categories[i].defaultId" class="uk-nav-divider"> <hr *ngIf="!stakeholder.topics[topicIndex].categories[i].defaultId" class="uk-nav-divider">
<li *ngIf="!stakeholder.topics[topicIndex].categories[i].defaultId"><a <li *ngIf="!stakeholder.topics[topicIndex].categories[i].defaultId"><a
(click)="deleteCategoryOpen(i, 'delete'); hide(element)">Delete</a> (click)="deleteCategoryOpen(i, 'delete'); hide(element)">Delete</a>
@ -265,8 +140,11 @@
<li <li
[class.uk-active]="(subCategory.alias === [class.uk-active]="(subCategory.alias ===
stakeholder.topics[topicIndex].categories[categoryIndex].subCategories[subCategoryIndex].alias)" class=" uk-visible-toggle uk-flex uk-flex-middle"> stakeholder.topics[topicIndex].categories[categoryIndex].subCategories[subCategoryIndex].alias)" class=" uk-visible-toggle uk-flex uk-flex-middle">
<ng-container *ngTemplateOutlet="visibilityOptions; context:
{i:i, type: 'sub',
visibility: stakeholder.topics[topicIndex].categories[categoryIndex].subCategories[i].visibility}"></ng-container>
<a (click)="chooseSubcategory(categoryIndex, i);$event.preventDefault()" <a (click)="chooseSubcategory(categoryIndex, i);$event.preventDefault()"
class="uk-margin-remove-bottom uk-h3" class="uk-margin-remove-bottom"
><span>{{subCategory.name}}</span> ><span>{{subCategory.name}}</span>
</a> </a>
@ -277,12 +155,12 @@
class="uk-padding-remove-horizontal"> class="uk-padding-remove-horizontal">
<ul class="uk-nav uk-dropdown-nav"> <ul class="uk-nav uk-dropdown-nav">
<li><a (click)="editSubCategoryOpen(i); hide(element)">Edit</a></li> <li><a (click)="editSubCategoryOpen(i); hide(element)">Edit</a></li>
<li><a (click)="toggleSubcategoryStatus(i); hide(element)"> <ng-template ngFor [ngForOf]="stakeholderUtils.visibility" let-v>
{{subCategory.isActive ? 'Inactive' : 'Active'}}</a> <li *ngIf="subCategory.visibility != v.value"><a (click)="toggleSubcategoryStatus(i, v.value);
</li> hide(element)">
<li><a (click)="toggleSubcategoryAccess(i); hide(element)"> {{'Make ' + v.label.toLowerCase()}}</a>
{{subCategory.isPublic ? 'Private' : 'Public'}}</a> </li>
</li> </ng-template>
<hr *ngIf="!stakeholder.topics[topicIndex].categories[categoryIndex].subCategories[i].defaultId" <hr *ngIf="!stakeholder.topics[topicIndex].categories[categoryIndex].subCategories[i].defaultId"
class="uk-nav-divider"> class="uk-nav-divider">
<li *ngIf="!stakeholder.topics[topicIndex].categories[categoryIndex].subCategories[i].defaultId"><a <li *ngIf="!stakeholder.topics[topicIndex].categories[categoryIndex].subCategories[i].defaultId"><a
@ -305,7 +183,7 @@
</div> </div>
</div> </div>
<div id="page_content_inner" style="margin-top: 140px;"> <div id="page_content_inner" style="margin-top: 40px;">
<indicators *ngIf="stakeholder" [properties]="properties" <indicators *ngIf="stakeholder" [properties]="properties"
[topicIndex]="topicIndex" [topicIndex]="topicIndex"
[categoryIndex]="categoryIndex" [categoryIndex]="categoryIndex"
@ -319,46 +197,7 @@
</div> </div>
Are you sure you want to proceed? Are you sure you want to proceed?
</modal-alert> </modal-alert>
<!--<modal-alert #deleteModal>-->
<!-- You are about to delete <span class="uk-text-bold" *ngIf="element">"{{element.name}}"</span> {{type}} permanently.-->
<!-- <div *ngIf="!stakeholder.topics[topicIndex].defaultId">-->
<!-- <div class="uk-margin-top uk-margin-bottom">-->
<!-- <div>Delete this {{type}} only.</div>-->
<!-- <div class="uk-text-center">-->
<!-- <a *ngIf="type == 'topic'" class="md-btn md-btn-primary waves-button waves-effect uk-width-1-2"-->
<!-- (click)="deleteElement(); closeDeleteModal()">Delete</a>-->
<!-- <a *ngIf="type == 'category'" class="md-btn md-btn-primary waves-button waves-effect uk-width-1-2"-->
<!-- (click)="deleteElement(); closeDeleteModal()">Delete</a>-->
<!-- <a *ngIf="type == 'subcategory'" class="md-btn md-btn-primary waves-button waves-effect uk-width-1-2"-->
<!-- (click)="deleteElement(); closeDeleteModal()">Delete</a>-->
<!-- </div>-->
<!-- </div>-->
<!-- <ng-container *ngIf="!stakeholder.defaultId">-->
<!-- <div class="uk-margin-top uk-margin-bottom">-->
<!-- <div>Delete this {{type}} and {{getPluralTypeName()}} of all profiles based on this default {{type}}.</div>-->
<!-- <div class="uk-text-center">-->
<!-- <a *ngIf="type == 'topic'" class="md-btn md-btn-primary waves-button waves-effect uk-width-1-2"-->
<!-- (click)="deleteElement('delete'); closeDeleteModal()">Delete all</a>-->
<!-- <a *ngIf="type == 'category'" class="md-btn md-btn-primary waves-button waves-effect uk-width-1-2"-->
<!-- (click)="deleteElement('delete'); closeDeleteModal()">Delete all</a>-->
<!-- <a *ngIf="type == 'subcategory'" class="md-btn md-btn-primary waves-button waves-effect uk-width-1-2"-->
<!-- (click)="deleteElement('delete'); closeDeleteModal()">Delete all</a>-->
<!-- </div>-->
<!-- </div>-->
<!-- <div class="uk-margin-top uk-margin-bottom">-->
<!-- <div>Delete this {{type}} and {{getPluralTypeName()}} of all profiles based on this default {{type}}, will not be marked as copied from default anymore.</div>-->
<!-- <div class="uk-text-center">-->
<!-- <a *ngIf="type == 'topic'" class="md-btn md-btn-primary waves-button waves-effect uk-width-1-2"-->
<!-- (click)="deleteElement('disconnect'); closeDeleteModal()">Delete and disconnect</a>-->
<!-- <a *ngIf="type == 'category'" class="md-btn md-btn-primary waves-button waves-effect uk-width-1-2"-->
<!-- (click)="deleteElement('disconnect'); closeDeleteModal()">Delete and disconnect</a>-->
<!-- <a *ngIf="type == 'subcategory'" class="md-btn md-btn-primary waves-button waves-effect uk-width-1-2"-->
<!-- (click)="deleteElement('disconnect'); closeDeleteModal()">Delete and disconnect</a>-->
<!-- </div>-->
<!-- </div>-->
<!-- </ng-container>-->
<!-- </div>-->
<!--</modal-alert>-->
<modal-alert #editModal (alertOutput)="saveElement()"> <modal-alert #editModal (alertOutput)="saveElement()">
<div *ngIf="form" class="uk-padding-small" [formGroup]="form"> <div *ngIf="form" class="uk-padding-small" [formGroup]="form">
<div dashboard-input class="uk-form-row" [formInput]="form.get('name')" label="Title"></div> <div dashboard-input class="uk-form-row" [formInput]="form.get('name')" label="Title"></div>
@ -369,13 +208,30 @@
label="Icon(SVG)" type="textarea"> label="Icon(SVG)" type="textarea">
</div> </div>
<div class="uk-form-row uk-flex uk-flex-middle"> <div class="uk-form-row uk-flex uk-flex-middle">
<div dashboard-input class="uk-width-small" [formInput]="form.get('isPublic')" <div dashboard-input class="uk-width-small" [formInput]="form.get('visibility')"
label="Accessibility" [options]="stakeholderUtils.isPublic" type="select"> label="Visibility" [options]="stakeholderUtils.visibility" type="select">
</div>
<div dashboard-input class="uk-margin-small-left uk-width-small" [formInput]="form.get('isActive')"
label="Visibility" [options]="stakeholderUtils.isActive" type="select">
</div> </div>
</div> </div>
</div> </div>
</modal-alert> </modal-alert>
<ng-template #visibilityOptions let-type="type" let-i="i" let-visibility="visibility" >
<span class="uk-invisible-hover uk-padding-remove" (click)="$event.stopPropagation();$event.preventDefault()">
<i [attr.uk-icon]="stakeholderUtils.isPublicIcon.get(visibility)" class="clickable"></i>
<div #element uk-dropdown="mode: click; pos: bottom-left; delay-hide: 0; flip: false">
<ul class="uk-nav uk-dropdown-nav">
<li *ngFor="let v of stakeholderUtils.visibility" [class.selectedVisibility]="v.value == visibility">
<a
*ngIf="visibility != v.value"
(click)="$event.stopPropagation();toggleStatusByIndex(i, v.value, type);hide(element);$event.preventDefault()">
<i [attr.uk-icon]="stakeholderUtils.isPublicIcon.get( v.value)"></i> {{v.label}}</a>
<a *ngIf="visibility == v.value">
<i [attr.uk-icon]="stakeholderUtils.isPublicIcon.get( v.value)"></i> {{v.label}} <icon
customClass="uk-text-secondary uk-float-right" [ratio]="0.5"
name="bullet"></icon></a>
</li>
</ul>
</div>
</span>
</ng-template>

View File

@ -2,7 +2,14 @@ import {Component, OnDestroy, OnInit, ViewChild} from '@angular/core';
import {ActivatedRoute, Router} from '@angular/router'; import {ActivatedRoute, Router} from '@angular/router';
import {DomSanitizer, Title} from '@angular/platform-browser'; import {DomSanitizer, Title} from '@angular/platform-browser';
import {EnvProperties} from '../openaireLibrary/utils/properties/env-properties'; import {EnvProperties} from '../openaireLibrary/utils/properties/env-properties';
import {Category, Section, Stakeholder, SubCategory, Topic} from "../openaireLibrary/monitor/entities/stakeholder"; import {
Category,
Section,
Stakeholder,
SubCategory,
Topic,
Visibility
} from "../openaireLibrary/monitor/entities/stakeholder";
import {StakeholderService} from "../openaireLibrary/monitor/services/stakeholder.service"; import {StakeholderService} from "../openaireLibrary/monitor/services/stakeholder.service";
import {HelperFunctions} from "../openaireLibrary/utils/HelperFunctions.class"; import {HelperFunctions} from "../openaireLibrary/utils/HelperFunctions.class";
import {AlertModal} from "../openaireLibrary/utils/modal/alert"; import {AlertModal} from "../openaireLibrary/utils/modal/alert";
@ -84,7 +91,7 @@ export class TopicComponent implements OnInit, OnDestroy, IDeactivateComponent {
this.subCategoryIndex = 0; this.subCategoryIndex = 0;
// console.debug(this. stakeholder.topics[this.topicIndex]) // console.debug(this. stakeholder.topics[this.topicIndex])
// console.debug(this. stakeholder.topics[this.topicIndex].categories) // console.debug(this. stakeholder.topics[this.topicIndex].categories)
console.debug( this. stakeholder.topics[this.topicIndex].categories[this.categoryIndex].subCategories[this.subCategoryIndex]) // console.debug( this. stakeholder.topics[this.topicIndex].categories[this.categoryIndex].subCategories[this.subCategoryIndex])
if (this.topicIndex === -1) { if (this.topicIndex === -1) {
this.navigateToError(); this.navigateToError();
} else { } else {
@ -150,8 +157,7 @@ export class TopicComponent implements OnInit, OnDestroy, IDeactivateComponent {
this.stakeholderUtils.aliasValidator(topics) this.stakeholderUtils.aliasValidator(topics)
] ]
), ),
isActive: this.fb.control(topic.isActive), visibility: this.fb.control(topic.visibility),
isPublic: this.fb.control(topic.isPublic),
defaultId: this.fb.control(topic.defaultId), defaultId: this.fb.control(topic.defaultId),
categories: this.fb.control(topic.categories), categories: this.fb.control(topic.categories),
icon: this.fb.control(topic.icon) icon: this.fb.control(topic.icon)
@ -171,7 +177,7 @@ export class TopicComponent implements OnInit, OnDestroy, IDeactivateComponent {
this.index = index; this.index = index;
this.type = 'topic'; this.type = 'topic';
if (index === -1) { if (index === -1) {
this.buildTopic(new Topic(null, null, null, true, true)); this.buildTopic(new Topic(null, null, null, "PUBLIC"));
} else { } else {
this.buildTopic(this.stakeholder.topics[index]); this.buildTopic(this.stakeholder.topics[index]);
} }
@ -189,24 +195,15 @@ export class TopicComponent implements OnInit, OnDestroy, IDeactivateComponent {
} }
} }
public toggleTopicStatus(index=this.topicIndex) { public toggleTopicStatus(index=this.topicIndex, visibility:Visibility) {
this.type = 'topic'; this.type = 'topic';
let path = [ let path = [
this.stakeholder._id, this.stakeholder._id,
this.stakeholder.topics[index]._id this.stakeholder.topics[index]._id
]; ];
this.toggleStatus(this.stakeholder.topics[index], path); this.toggleStatus(this.stakeholder.topics[index], path, visibility);
}
public toggleTopicAccess(index=this.topicIndex) {
this.index = index;
this.type = 'topic';
let path = [
this.stakeholder._id,
this.stakeholder.topics[index]._id
];
this.toggleAccess(this.stakeholder.topics[index], path);
} }
public deleteTopicOpen( index=this.topicIndex, childrenAction: string = null) { public deleteTopicOpen( index=this.topicIndex, childrenAction: string = null) {
this.type = 'topic'; this.type = 'topic';
@ -246,8 +243,7 @@ export class TopicComponent implements OnInit, OnDestroy, IDeactivateComponent {
this.stakeholderUtils.aliasValidator(categories) this.stakeholderUtils.aliasValidator(categories)
] ]
), ),
isActive: this.fb.control(category.isActive), visibility: this.fb.control(category.visibility),
isPublic: this.fb.control(category.isPublic),
defaultId: this.fb.control(category.defaultId), defaultId: this.fb.control(category.defaultId),
subCategories: this.fb.control(category.subCategories) subCategories: this.fb.control(category.subCategories)
}); });
@ -266,7 +262,7 @@ export class TopicComponent implements OnInit, OnDestroy, IDeactivateComponent {
this.index = index; this.index = index;
this.type = 'category'; this.type = 'category';
if (index === -1) { if (index === -1) {
this.buildCategory(new Category(null, null, null, true, true)); this.buildCategory(new Category(null, null, null, "PUBLIC"));
} else { } else {
this.buildCategory(this.stakeholder.topics[this.topicIndex].categories[index]); this.buildCategory(this.stakeholder.topics[this.topicIndex].categories[index]);
} }
@ -291,7 +287,7 @@ export class TopicComponent implements OnInit, OnDestroy, IDeactivateComponent {
} }
} }
public toggleCategoryStatus(index: number) { public toggleCategoryStatus(index: number, visibility:Visibility) {
this.index = index; this.index = index;
this.type = 'category'; this.type = 'category';
let path = [ let path = [
@ -299,19 +295,9 @@ export class TopicComponent implements OnInit, OnDestroy, IDeactivateComponent {
this.stakeholder.topics[this.topicIndex]._id, this.stakeholder.topics[this.topicIndex]._id,
this.stakeholder.topics[this.topicIndex].categories[this.index]._id this.stakeholder.topics[this.topicIndex].categories[this.index]._id
]; ];
this.toggleStatus(this.stakeholder.topics[this.topicIndex].categories[this.index], path); this.toggleStatus(this.stakeholder.topics[this.topicIndex].categories[this.index], path, visibility);
}
public toggleCategoryAccess(index: number) {
this.index = index;
this.type = 'category';
let path = [
this.stakeholder._id,
this.stakeholder.topics[this.topicIndex]._id,
this.stakeholder.topics[this.topicIndex].categories[this.index]._id
];
this.toggleAccess(this.stakeholder.topics[this.topicIndex].categories[this.index], path);
} }
public deleteCategoryOpen(index: number, childrenAction: string = null) { public deleteCategoryOpen(index: number, childrenAction: string = null) {
this.type = 'category'; this.type = 'category';
@ -343,8 +329,7 @@ export class TopicComponent implements OnInit, OnDestroy, IDeactivateComponent {
this.stakeholderUtils.aliasValidator(subCategories) this.stakeholderUtils.aliasValidator(subCategories)
] ]
), ),
isActive: this.fb.control(subCategory.isActive), visibility: this.fb.control(subCategory.visibility),
isPublic: this.fb.control(subCategory.isPublic),
defaultId: this.fb.control(subCategory.defaultId), defaultId: this.fb.control(subCategory.defaultId),
charts: this.fb.control(subCategory.charts), charts: this.fb.control(subCategory.charts),
numbers: this.fb.control(subCategory.numbers) numbers: this.fb.control(subCategory.numbers)
@ -364,7 +349,7 @@ export class TopicComponent implements OnInit, OnDestroy, IDeactivateComponent {
this.index = index; this.index = index;
this.type = 'subcategory'; this.type = 'subcategory';
if (index === -1) { if (index === -1) {
this.buildSubcategory(new SubCategory(null, null, null, true, true)); this.buildSubcategory(new SubCategory(null, null, null, "PUBLIC"));
} else { } else {
this.buildSubcategory(this.stakeholder.topics[this.topicIndex].categories[this.selectedCategoryIndex].subCategories[index]); this.buildSubcategory(this.stakeholder.topics[this.topicIndex].categories[this.selectedCategoryIndex].subCategories[index]);
} }
@ -392,8 +377,8 @@ export class TopicComponent implements OnInit, OnDestroy, IDeactivateComponent {
} }
} }
} }
public toggleSubcategoryStatus(index: number) { public toggleSubcategoryStatus(index: number, visibility:Visibility) {
this.index = index; this.index = index;
this.type = 'subcategory'; this.type = 'subcategory';
let path = [ let path = [
@ -402,20 +387,10 @@ export class TopicComponent implements OnInit, OnDestroy, IDeactivateComponent {
this.stakeholder.topics[this.topicIndex].categories[this.selectedCategoryIndex]._id, this.stakeholder.topics[this.topicIndex].categories[this.selectedCategoryIndex]._id,
this.stakeholder.topics[this.topicIndex].categories[this.selectedCategoryIndex].subCategories[this.index]._id this.stakeholder.topics[this.topicIndex].categories[this.selectedCategoryIndex].subCategories[this.index]._id
]; ];
this.toggleStatus(this.stakeholder.topics[this.topicIndex].categories[this.selectedCategoryIndex].subCategories[this.index], path); this.toggleStatus(this.stakeholder.topics[this.topicIndex].categories[this.selectedCategoryIndex].subCategories[this.index], path, visibility);
} }
public toggleSubcategoryAccess(index: number) {
this.index = index;
this.type = 'subcategory';
let path = [
this.stakeholder._id,
this.stakeholder.topics[this.topicIndex]._id,
this.stakeholder.topics[this.topicIndex].categories[this.selectedCategoryIndex]._id,
this.stakeholder.topics[this.topicIndex].categories[this.selectedCategoryIndex].subCategories[this.index]._id
];
this.toggleAccess(this.stakeholder.topics[this.topicIndex].categories[this.selectedCategoryIndex].subCategories[this.index], path);
}
public deleteSubcategoryOpen(index, childrenAction: string = null) { public deleteSubcategoryOpen(index, childrenAction: string = null) {
this.type = 'subcategory'; this.type = 'subcategory';
@ -514,30 +489,22 @@ export class TopicComponent implements OnInit, OnDestroy, IDeactivateComponent {
}); });
}); });
} }
private toggleStatus(element: Topic | Category | SubCategory, path: string[]) { public toggleStatusByIndex(index: number, visibility:Visibility, type) {
this.stakeholderService.toggleStatus(this.properties.monitorServiceAPIURL, path).subscribe(isActive => { if(type == "sub"){
element.isActive = isActive; this.toggleSubcategoryStatus(index,visibility);
this.stakeholderService.setStakeholder(this.stakeholder); }else if(type == "cat"){
UIkit.notification(StringUtils.capitalize(this.type) + ' has been successfully changed to ' + (isActive ? 'active' : 'inactive'), { this.toggleCategoryStatus(index,visibility);
status: 'success', }
timeout: 3000, else if(type == "topic") {
pos: 'top-left' this.toggleTopicStatus(index,visibility);
}); }
}, error => {
UIkit.notification(error.error.message, {
status: 'danger',
timeout: 3000,
pos: 'top-left'
});
});
} }
private toggleStatus(element: Topic | Category | SubCategory, path: string[], visibility:Visibility) {
private toggleAccess(element: Topic | Category | SubCategory, path: string[]) { this.stakeholderService.toggleVisibility(this.properties.monitorServiceAPIURL, path, visibility).subscribe(visibility => {
this.stakeholderService.toggleAccess(this.properties.monitorServiceAPIURL, path).subscribe(isPublic => { element.visibility = visibility;
element.isPublic = isPublic;
this.stakeholderService.setStakeholder(this.stakeholder); this.stakeholderService.setStakeholder(this.stakeholder);
UIkit.notification(StringUtils.capitalize(this.type) + ' has been successfully changed to ' + (isPublic ? 'public' : 'private'), { UIkit.notification(StringUtils.capitalize(this.type) + ' has been successfully changed to ' + visibility.toLowerCase, {
status: 'success', status: 'success',
timeout: 3000, timeout: 3000,
pos: 'top-left' pos: 'top-left'

View File

@ -14,11 +14,14 @@ import {AlertModalModule} from "../openaireLibrary/utils/modal/alertModal.module
import {InputModule} from "../openaireLibrary/dashboard/sharedComponents/input/input.module"; import {InputModule} from "../openaireLibrary/dashboard/sharedComponents/input/input.module";
import {ClickModule} from "../openaireLibrary/utils/click/click.module"; import {ClickModule} from "../openaireLibrary/utils/click/click.module";
import {AdminDashboardGuard} from "../utils/adminDashboard.guard"; import {AdminDashboardGuard} from "../utils/adminDashboard.guard";
import {IconsService} from "../openaireLibrary/utils/icons/icons.service";
import {preview, bullet} from "../openaireLibrary/utils/icons/icons";
import {IconsModule} from "../openaireLibrary/utils/icons/icons.module";
@NgModule({ @NgModule({
imports: [ imports: [
CommonModule, TopicRoutingModule, ClickModule, RouterModule, FormsModule, AlertModalModule, CommonModule, TopicRoutingModule, ClickModule, RouterModule, FormsModule, AlertModalModule,
ReactiveFormsModule, InputModule ReactiveFormsModule, InputModule, IconsModule
], ],
declarations: [ declarations: [
TopicComponent, IndicatorsComponent TopicComponent, IndicatorsComponent
@ -32,4 +35,7 @@ import {AdminDashboardGuard} from "../utils/adminDashboard.guard";
] ]
}) })
export class TopicModule { export class TopicModule {
constructor(private iconsService: IconsService) {
this.iconsService.registerIcons([preview, bullet]);
}
} }

View File

@ -1,437 +0,0 @@
import {Stakeholder, Topic, Category, SubCategory, Indicator, IndicatorPath, ChartHelper, Section} from "../../openaireLibrary/monitor/entities/stakeholder";
import {IndicatorUtils} from "../indicator-utils";
export class StakeholderCreator {
static createFunderDefaultProfile(funder:Stakeholder):Stakeholder{
// let funder:Stakeholder = new Stakeholder(null,"funder","dfid","Default Funder Profile","dfsn","default_funder",true,true, null);
funder['defaultId'] = null;
funder.topics.push(StakeholderCreator.createResearchProductionTopic(funder));
funder.topics.push(StakeholderCreator.createOSTopic(funder));
let collaboration = new Topic("Collaboration","Indexes for collaboration","collaboration", true, true);
collaboration.categories.push(this.createEmptyCategory("International collaboration","Indicators for international collaborations based on the percentage of research results or patents with at least one co-author from abroad","international-collaboration"));
collaboration.categories.push(this.createEmptyCategory("EU collaboration","Indicators for EU Collaboration based on the percentage of research results or patents with at least one co-author from another EU organization","eu-collaboration"));
collaboration.categories.push(this.createEmptyCategory("Industrial collaboration","Indicators for Industrial collaboration based on the percentage of research results or patents with at least one co-author from the industry","industrial-collaboration"));
collaboration.categories.push(this.createEmptyCategory("Transdisciplinary / transectoral collaboration","Indicators for Transdisciplinary/transectoral collaboration based on the percentage of research results or patents with at least one co-author from another discipline or sector","transdisciplinary-collaboration"));
funder.topics.push(collaboration);
funder.topics.push(StakeholderCreator.createEmptyTopic("Diffusion","Indicators based on citations, classifications and usage data: How diverse are the research knowledge resources upon which an article is drawn? How diverse are the venues in which a body of research appears? How diverse are the fields that cite a research result?","diffusion"));
let impact = new Topic("Impact", "", "impact", true, true);
impact.categories.push(this.createEmptyCategory("Academic Impact","Indicators based on citations and collaboration, related to MAG classifications.","academic-impact"));
impact.categories.push(this.createEmptyCategory("Economic Impact","Indicators based on patents and collaboration between industry and academia","economic-impact"));
impact.categories.push(this.createEmptyCategory("Societal Impact","Indicators that correlate research results with SDGs","societal-impact"));
funder.topics.push(impact);
return funder;
}
static updateECProfile(funder:Stakeholder){
//Throughput / Output
funder.topics[0].categories[0].subCategories.push(StakeholderCreator.createResearchProductionPerType(funder,"Publications", "Publication","publication", "publications",1));
funder.topics[0].categories[0].subCategories.push(StakeholderCreator.createResearchProductionPerType(funder,"Publications", "Publication","publication", "publications",2));
funder.topics[0].categories[1].subCategories.push(StakeholderCreator.createResearchProductionPerType(funder,"Research data", "Research data","dataset", "datasets",1));
funder.topics[0].categories[1].subCategories.push(StakeholderCreator.createResearchProductionPerType(funder,"Research data", "Research data","dataset", "datasets",2));
funder.topics[0].categories[2].subCategories.push(StakeholderCreator.createResearchProductionPerType(funder,"Software", "Software","software", "software",1));
funder.topics[0].categories[2].subCategories.push(StakeholderCreator.createResearchProductionPerType(funder,"Software", "Software","software", "software",2));
funder.topics[0].categories[3].subCategories.push(StakeholderCreator.createResearchProductionPerType(funder,"Other research products", "Other research product","other", "other",1));
funder.topics[0].categories[3].subCategories.push(StakeholderCreator.createResearchProductionPerType(funder,"Other research products", "Other research product","other", "other",2));
funder.topics[1].categories[0].subCategories[0].charts.push(new Section("chart","FP7 Section" ));
funder.topics[1].categories[0].subCategories[0].charts[1].indicators = this.createOAPerType(funder,"Publications","Publication","publication","publications", 1 );
funder.topics[1].categories[0].subCategories[0].charts.push(new Section("chart","H2020" ));
funder.topics[1].categories[0].subCategories[0].charts[2].indicators = this.createOAPerType(funder,"Publications","Publication","publication","publications", 2 );
funder.topics[1].categories[0].subCategories[1].charts.push(new Section("chart","FP7 Section" ));
funder.topics[1].categories[0].subCategories[1].charts[1].indicators = this.createOAPerType(funder,"Research data", "Research data","dataset", "datasets", 1 );
funder.topics[1].categories[0].subCategories[1].charts.push(new Section("chart","H2020" ));
funder.topics[1].categories[0].subCategories[1].charts[2].indicators = this.createOAPerType(funder,"Research data", "Research data","dataset", "datasets", 2 );
funder.topics[1].categories[0].subCategories[2].charts.push(new Section("chart","FP7 Section" ));
funder.topics[1].categories[0].subCategories[2].charts[1].indicators = this.createOAPerType(funder,"Software", "Software","software", "software", 1 );
funder.topics[1].categories[0].subCategories[2].charts.push(new Section("chart","H2020" ));
funder.topics[1].categories[0].subCategories[2].charts[2].indicators = this.createOAPerType(funder,"Software", "Software","software", "software", 2 );
funder.topics[1].categories[0].subCategories[3].charts.push(new Section("chart","FP7 Section" ));
funder.topics[1].categories[0].subCategories[3].charts[1].indicators = this.createOAPerType(funder,"Other research products", "Other research product","other", "other", 1 );
funder.topics[1].categories[0].subCategories[3].charts.push(new Section("chart","H2020" ));
funder.topics[1].categories[0].subCategories[3].charts[2].indicators = this.createOAPerType(funder,"Other research products", "Other research product","other", "other", 2 );
return funder;
}
static createEmptyTopic(name: string, description: string, alias: string):Topic{
let topic = new Topic(name, description, alias, true, true);
topic.categories.push(this.createEmptyCategory("Overview","","overview"));
return topic;
}
static createEmptyCategory(name: string, description: string, alias: string):Category{
let cat:Category = new Category(name, description, alias,true,true);
cat.subCategories.push(new SubCategory("Overview","","overview",true,true));
return cat;
}
static createResearchProductionTopic(stakeholder:Stakeholder):Topic {
let topic = new Topic("Throughput / Output", "Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do...", "research-production", true, true);
let pubCategory:Category = new Category("Publications","","publications",true,true);
topic.categories.push(pubCategory);
// let pubDefSub = StakeholderCreator.createResearchProductionPerType(stakeholder,"Publications", "Publication","publication", "publications");
pubCategory.subCategories.push(StakeholderCreator.createResearchProductionPerType(stakeholder,"Publications", "Publication","publication", "publications",0));
// pubCategory.subCategories.push(StakeholderCreator.createResearchProductionPerType(stakeholder,"Publications", "Publication","publication", "publications",1));
// pubCategory.subCategories.push(StakeholderCreator.createResearchProductionPerType(stakeholder,"Publications", "Publication","publication", "publications",2));
let dataCategory:Category = new Category("Research data","","data",true,true);
topic.categories.push(dataCategory);
dataCategory.subCategories.push(StakeholderCreator.createResearchProductionPerType(stakeholder,"Research data", "Research data","dataset", "datasets",0));
// dataCategory.subCategories.push(StakeholderCreator.createResearchProductionPerType(stakeholder,"Research data", "Research data","dataset", "datasets",1));
// dataCategory.subCategories.push(StakeholderCreator.createResearchProductionPerType(stakeholder,"Research data", "Research data","dataset", "datasets",2));
let softwareCategory:Category = new Category("Software","","software",true,true);
topic.categories.push(softwareCategory);
softwareCategory.subCategories.push(StakeholderCreator.createResearchProductionPerType(stakeholder,"Software", "Software","software", "software",0));
// softwareCategory.subCategories.push(StakeholderCreator.createResearchProductionPerType(stakeholder,"Software", "Software","software", "software",1));
// softwareCategory.subCategories.push(StakeholderCreator.createResearchProductionPerType(stakeholder,"Software", "Software","software", "software",2));
let otherCategory:Category = new Category("Other research products","","other",true,true);
topic.categories.push(otherCategory);
otherCategory.subCategories.push(StakeholderCreator.createResearchProductionPerType(stakeholder,"Other research products", "Other research product","other", "other",0));
// otherCategory.subCategories.push(StakeholderCreator.createResearchProductionPerType(stakeholder,"Other research products", "Other research product","other", "other",1));
// otherCategory.subCategories.push(StakeholderCreator.createResearchProductionPerType(stakeholder,"Other research products", "Other research product","other", "other",2));
return topic;
}
static createResearchProductionPerType(stakeholder:Stakeholder,typePlural, typeSingl, dbType, dbTypePlural, index:number):SubCategory{
let fundingFilter = ['',',{"groupFilters":[{"field":"' + dbType + '.project.funding level 0","type":"=","values":["FP7"]}],"op":"AND"}',
',{"groupFilters":[{"field":"' + dbType + '.project.funding level 0","type":"=","values":["H2020"]}],"op":"AND"}'];
let categoryTitle=["Overview","FP7","H2020"];
let chartTitle=["","FP7 ","H2020 "];
let pubDefSub = new SubCategory(categoryTitle[index], null,categoryTitle[index].toLowerCase(),true, true);
if(index!=0){
pubDefSub.recommendedFor.push("ec__________::EC");
}
if(index==0) {
pubDefSub.numbers.push(new Section("number", null, null, stakeholder.alias));
let n_total = new Indicator("Total " + typePlural, null, "number", "small", true, true, [new IndicatorPath(null, "search",
"/" + dbTypePlural + "/count?fq=" + (encodeURIComponent("relfunderid exact index_id")) + "&format=json", null, ["total"])]);
n_total.indicatorPaths[0].filters["fundingL0"] = "&fq=relfundinglevel0_name exact " + ChartHelper.prefix + 'fundingL0' + ChartHelper.suffix;
pubDefSub.numbers[0].indicators.push(n_total);
}
if( dbType != "publication" && index == 0) {
let n_linkedPubs = this.createLinkToIndicator(stakeholder,typePlural,typeSingl, dbType,"Publications","publication");
// new Indicator("Linked with Publications", null, "number", "small", true, true, [new IndicatorPath(null, "search",
// "/resources?query="+encodeURIComponent(" ( (oaftype exact result) and (resulttypeid exact " + dbTypePlural + ") and (relresulttype=publication) )")+"&fq=" + (encodeURIComponent("relfunderid exact index_id")) + "&page=0&size=0&format=json", null, ["meta","total"])]);
pubDefSub.numbers[0].indicators.push(n_linkedPubs);
}
pubDefSub.charts.push(new Section("chart", null, null, stakeholder.alias));
let res_timeline = new Indicator("",null, "chart","small",true, true,[new IndicatorPath("column", "stats-tool", "chart?json=", '{"library":"HighCharts","chartDescription":{"queries":[{"name":"'+typePlural+'","type":"'+ChartHelper.prefix+'type'+ChartHelper.suffix+'","query":{"select":[{"field":"'+dbType+'","aggregate":"count"},{"field":"'+dbType+'.year","aggregate":null}],"filters":[{"groupFilters":[{"field":"'+dbType+'.project.funder","type":"=","values":["'+ChartHelper.prefix+'index_name'+ChartHelper.suffix+'"]}],"op":"AND"},{"groupFilters":[{"field":"'+dbType+'.year","type":">=","values":["'+ChartHelper.prefix+'start_year'+ChartHelper.suffix+'"]},{"field":"'+dbType+'.year","type":"<=","values":["'+ChartHelper.prefix+'end_year'+ChartHelper.suffix+'"]}],"op":"AND"}'+fundingFilter[index]+'],"entity":"'+dbType+'","profile":"OpenAIRE All-inclusive","limit":"0"}}],"chart":{"backgroundColor":"#FFFFFFFF","borderColor":"#335cadff","borderRadius":0,"borderWidth":0,"plotBorderColor":"#ccccccff","plotBorderWidth":0},"title":{"text":"'+ChartHelper.prefix+'title'+ChartHelper.suffix+'"},"subtitle":{},"yAxis":{"title":{"text":"'+typePlural+'"}},"xAxis":{"title":{"text":"Year"}},"lang":{"noData":"No Data available for the Query"},"exporting":{"enabled":true},"plotOptions":{"series":{"dataLabels":{"enabled":false}}},"legend":{"enabled":true,"align":"center","verticalAlign":"bottom","layout":"horizontal"},"credits":{"href":null,"enabled":true,"text":"Created by OpenAIRE via HighCharts"}}}', null)]);
res_timeline.indicatorPaths[0].parameters = IndicatorPath.createParameters(stakeholder.index_name,chartTitle[index] + typePlural+" timeline","column");
res_timeline.indicatorPaths[0].parameters["start_year"] = (index == 1?"2014":"2008");
res_timeline.indicatorPaths[0].parameters["end_year"] = "2020";
pubDefSub.charts[0].indicators.push(res_timeline);
if(dbType == "publication" || dbType == "dataset") {
let res_types = new Indicator("", null, "chart", "small", true, true,
[new IndicatorPath("column", "stats-tool", "chart?json=",
'{"library":"HighCharts","chartDescription":{"queries":[{"name":"' + typePlural + '","type":"' + ChartHelper.prefix + 'type' + ChartHelper.suffix + '","query":{"select":[{"field":"' + dbType + '","aggregate":"count"},{"field":"' + dbType + '.classification","aggregate":null}],"filters":[{"groupFilters":[{"field":"' + dbType + '.project.funder","type":"=","values":["' + ChartHelper.prefix + 'index_name' + ChartHelper.suffix + '"]}],"op":"AND"}'+fundingFilter[index]+'],"entity":"' + dbType + '","profile":"OpenAIRE All-inclusive","limit":"0"}}],"chart":{"backgroundColor":"#FFFFFFFF","borderColor":"#335cadff","borderRadius":0,"borderWidth":0,"plotBorderColor":"#ccccccff","plotBorderWidth":0},"title":{"text":"' + ChartHelper.prefix + 'title' + ChartHelper.suffix + '"},"subtitle":{},"yAxis":{"title":{"text":"' + typePlural + '"}},"xAxis":{"title":{"text":"Type"}},"lang":{"noData":"No Data available for the Query"},"exporting":{"enabled":true},"plotOptions":{"series":{"dataLabels":{"enabled":false}}},"legend":{"enabled":true,"align":"center","verticalAlign":"bottom","layout":"horizontal"},"credits":{"href":null,"enabled":true,"text":"Created by OpenAIRE via HighCharts"}}}', null)]);
res_types.indicatorPaths[0].parameters = IndicatorPath.createParameters(stakeholder.index_name, chartTitle[index] + typeSingl + " types", "bar");
pubDefSub.charts[0].indicators.push(res_types);
}
let res_access_mode = new Indicator("",null, "chart","small",true, true,[new IndicatorPath("pie", "stats-tool", "chart?json=",
'{"library":"HighCharts","chartDescription":{"queries":[{"name":"'+typePlural+'","type":"'+ChartHelper.prefix+'type'+ChartHelper.suffix+'","query":{"select":[{"field":"'+dbType+'","aggregate":"count"},{"field":"'+dbType+'.access mode","aggregate":null}],"filters":[{"groupFilters":[{"field":"'+dbType+'.project.funder","type":"=","values":["'+ChartHelper.prefix+'index_name'+ChartHelper.suffix+'"]}],"op":"AND"}'+fundingFilter[index]+'],"entity":"' + dbType + '","profile":"OpenAIRE All-inclusive","limit":"0"}}],"chart":{"backgroundColor":"#FFFFFFFF","borderColor":"#335cadff","borderRadius":0,"borderWidth":0,"plotBorderColor":"#ccccccff","plotBorderWidth":0},"title":{"text":"'+ChartHelper.prefix+'title'+ChartHelper.suffix+'"},"subtitle":{},"yAxis":{"title":{"text":"'+typePlural+'"}},"xAxis":{"title":{"text":"Year"}},"lang":{"noData":"No Data available for the Query"},"exporting":{"enabled":true},"plotOptions":{"series":{"dataLabels":{"enabled":true}}},"legend":{"enabled":true,"align":"center","verticalAlign":"bottom","layout":"horizontal"},"credits":{"href":null,"enabled":true,"text":"Created by OpenAIRE via HighCharts"}}}', null)]);
res_access_mode.indicatorPaths[0].parameters = IndicatorPath.createParameters(stakeholder.index_name,chartTitle[index] + typeSingl+" access mode","pie");
pubDefSub.charts[0].indicators.push(res_access_mode);
/* let res_sci_area = new Indicator("", null, "chart", "small", true, true, [new IndicatorPath("bar", "stats-tool", "chart?json=",
'{"library":"HighCharts","chartDescription":{"queries":[{"name":"' + typePlural + '","type":"' + ChartHelper.prefix + 'type' + ChartHelper.suffix + '","query":{"select":[{"field":"' + dbType + '","aggregate":"count"},{"field":"' + dbType + '.project.funding level 1","aggregate":null}],"filters":[{"groupFilters":[{"field":"' + dbType + '.project.funder","type":"=","values":["' + ChartHelper.prefix + 'index_name' + ChartHelper.suffix + '"]}],"op":"AND"}'+fundingFilter[index]+'],"entity":"' + dbType + '","profile":"OpenAIRE All-inclusive","limit":"30"}}],"chart":{"backgroundColor":"#FFFFFFFF","borderColor":"#335cadff","borderRadius":0,"borderWidth":0,"plotBorderColor":"#ccccccff","plotBorderWidth":0},"title":{"text":"' + ChartHelper.prefix + 'title' + ChartHelper.suffix + '"},"subtitle":{},"yAxis":{"title":{"text":"' + typePlural + '"}},"xAxis":{"title":{"text":"Scientific area"}},"lang":{"noData":"No Data available for the Query"},"exporting":{"enabled":false},"plotOptions":{"series":{"dataLabels":{"enabled":false}}},"legend":{"enabled":true,"align":"center","verticalAlign":"bottom","layout":"horizontal"},"credits":{"href":null,"enabled":true,"text":"Created by OpenAIRE via HighCharts"}}}', null)]);
res_sci_area.indicatorPaths[0].parameters = IndicatorPath.createParameters(stakeholder.index_name, chartTitle[index] + typeSingl + " scientific area", "bar");
res_sci_area.indicatorPaths[0].filters = IndicatorPath.createResultFilters(dbType);
res_sci_area.recommendedFor = ["ec__________::EC"];
pubDefSub.charts[0].indicators.push(res_sci_area);
let res_programmes = new Indicator("", null, "chart", "small", true, true, [new IndicatorPath("bar", "stats-tool", "chart?json=",
'{"library":"HighCharts","chartDescription":{"queries":[{"name":"' + typePlural + '","type":"' + ChartHelper.prefix + 'type' + ChartHelper.suffix + '","query":{"select":[{"field":"' + dbType + '","aggregate":"count"},{"field":"' + dbType + '.project.funding level 2","aggregate":null}],"filters":[{"groupFilters":[{"field":"' + dbType + '.project.funder","type":"=","values":["' + ChartHelper.prefix + 'index_name' + ChartHelper.suffix + '"]}],"op":"AND"},{"groupFilters":[{"field":"' + dbType + '.project.funding level 2","type":"!=","values":[" "]}],"op":"AND"}'+fundingFilter[index]+'],"entity":"' + dbType + '","profile":"OpenAIRE All-inclusive","limit":"30"}}],"chart":{"backgroundColor":"#FFFFFFFF","borderColor":"#335cadff","borderRadius":0,"borderWidth":0,"plotBorderColor":"#ccccccff","plotBorderWidth":0},"title":{"text":"' + ChartHelper.prefix + 'title' + ChartHelper.suffix + '"},"subtitle":{},"yAxis":{"title":{"text":"' + typePlural + '"}},"xAxis":{"title":{"text":"Programmes"}},"lang":{"noData":"No Data available for the Query"},"exporting":{"enabled":false},"plotOptions":{"series":{"dataLabels":{"enabled":false}}},"legend":{"enabled":true,"align":"center","verticalAlign":"bottom","layout":"horizontal"},"credits":{"href":null,"enabled":true,"text":"Created by OpenAIRE via HighCharts"}}}', null)]);
res_programmes.indicatorPaths[0].parameters = IndicatorPath.createParameters(stakeholder.index_name, chartTitle[index] + typeSingl + " programmes", "bar");
res_programmes.indicatorPaths[0].filters = IndicatorPath.createResultFilters(dbType);
res_programmes.recommendedFor = ["ec__________::EC"];
pubDefSub.charts[0].indicators.push(res_programmes);*/
//{"library":"HighCharts","chartDescription":{"queries":[{"name":"Research Data","type":"bar","query":{"select":[{"field":"dataset","aggregate":"count"},{"field":"dataset.project.funding level 1","aggregate":null}],"filters":[{"groupFilters":[{"field":"dataset.project.funder","type":"=","values":["European Commission"]}],"op":"AND"}],"entity":"dataset","profile":"OpenAIRE All-inclusive","limit":"30"}}],"chart":{"backgroundColor":"#FFFFFFFF","borderColor":"#335cadff","borderRadius":0,"borderWidth":0,"plotBorderColor":"#ccccccff","plotBorderWidth":0},"title":{"text":"Scientific Area"},"subtitle":{},"yAxis":{"title":{}},"xAxis":{"title":{}},"lang":{"noData":"No Data available for the Query"},"exporting":{"enabled":false},"plotOptions":{"series":{"dataLabels":{"enabled":false}}},"legend":{"enabled":true,"align":"center","verticalAlign":"bottom","layout":"horizontal"},"credits":{"href":null,"enabled":true,"text":"Created by OpenAIRE via HighCharts"}}}
let datasource = new Indicator("",null, "chart","small",true, true,[new IndicatorPath("bar", "stats-tool", "chart?json=",
'{"library":"HighCharts","chartDescription":{"queries":[{"name":"'+typePlural+'","type":"'+ChartHelper.prefix+'type'+ChartHelper.suffix+'","query":{"name":"monitor.'+ChartHelper.prefix+'index_shortName'+ChartHelper.suffix+(index==2?".h2020":(index==1?".fp7":""))+'.'+dbTypePlural+'.datasources"}}],"chart":{"backgroundColor":"#FFFFFFFF","borderColor":"#335cadff","borderRadius":0,"borderWidth":0,"plotBorderColor":"#ccccccff","plotBorderWidth":0},"title":{"text":"'+ChartHelper.prefix+'title'+ChartHelper.suffix+'"},"subtitle":{},"yAxis":{"title":{"text":"'+typePlural+'"}},"xAxis":{"title":{"text":"Content provider"}},"lang":{"noData":"No Data available for the Query"},"exporting":{"enabled":true},"plotOptions":{"series":{"dataLabels":{"enabled":false}}},"legend":{"enabled":true,"align":"center","verticalAlign":"bottom","layout":"horizontal"},"credits":{"href":null,"enabled":true,"text":"Created by OpenAIRE via HighCharts"}}}', null)]);
datasource.indicatorPaths[0].parameters = IndicatorPath.createParameters(stakeholder.index_name,chartTitle[index] + typeSingl+" content provider","bar");
datasource.indicatorPaths[0].parameters["index_shortName"] = stakeholder.index_shortName.toLowerCase();
pubDefSub.charts[0].indicators.push(datasource);
if(dbType == "publication") {
let journal = new Indicator("", null, "chart", "small", true, true, [new IndicatorPath("bar", "stats-tool", "chart?json=",
'{"library":"HighCharts","chartDescription":{"queries":[{"name":"' + typePlural + '","type":"' + ChartHelper.prefix + 'type' + ChartHelper.suffix + '","query":{"name":"monitor.' + ChartHelper.prefix + 'index_shortName' + ChartHelper.suffix +(index==2?".h2020":(index==1?".fp7":""))+ '.' + dbTypePlural + '.journals"}}],"chart":{"backgroundColor":"#FFFFFFFF","borderColor":"#335cadff","borderRadius":0,"borderWidth":0,"plotBorderColor":"#ccccccff","plotBorderWidth":0},"title":{"text":"' + ChartHelper.prefix + 'title' + ChartHelper.suffix + '"},"subtitle":{},"yAxis":{"title":{"text":"' + typePlural + '"}},"xAxis":{"title":{"text":"Journal"}},"lang":{"noData":"No Data available for the Query"},"exporting":{"enabled":true},"plotOptions":{"series":{"dataLabels":{"enabled":false}}},"legend":{"enabled":true,"align":"center","verticalAlign":"bottom","layout":"horizontal"},"credits":{"href":null,"enabled":true,"text":"Created by OpenAIRE via HighCharts"}}}', null)]);
journal.indicatorPaths[0].parameters = IndicatorPath.createParameters(stakeholder.index_name, chartTitle[index] + typeSingl + " journal", "bar");
journal.indicatorPaths[0].parameters["index_shortName"] = stakeholder.index_shortName.toLowerCase();
pubDefSub.charts[0].indicators.push(journal);
let repo = new Indicator("", null, "chart", "small", true, true, [new IndicatorPath("bar", "stats-tool", "chart?json=",
'{"library":"HighCharts","chartDescription":{"queries":[{"name":"' + typePlural + '","type":"' + ChartHelper.prefix + 'type' + ChartHelper.suffix + '","query":{"name":"monitor.' + ChartHelper.prefix + 'index_shortName' + ChartHelper.suffix +(index==2?".h2020":(index==1?".fp7":""))+ '.' + dbTypePlural + '.repositories"}}],"chart":{"backgroundColor":"#FFFFFFFF","borderColor":"#335cadff","borderRadius":0,"borderWidth":0,"plotBorderColor":"#ccccccff","plotBorderWidth":0},"title":{"text":"' + ChartHelper.prefix + 'title' + ChartHelper.suffix + '"},"subtitle":{},"yAxis":{"title":{"text":"' + typePlural + '"}},"xAxis":{"title":{"text":"Repositories"}},"lang":{"noData":"No Data available for the Query"},"exporting":{"enabled":true},"plotOptions":{"series":{"dataLabels":{"enabled":false}}},"legend":{"enabled":true,"align":"center","verticalAlign":"bottom","layout":"horizontal"},"credits":{"href":null,"enabled":true,"text":"Created by OpenAIRE via HighCharts"}}}', null)]);
repo.indicatorPaths[0].parameters = IndicatorPath.createParameters(stakeholder.index_name, chartTitle[index] + typeSingl + " repositories", "bar");
repo.indicatorPaths[0].parameters["index_shortName"] = stakeholder.index_shortName.toLowerCase();
pubDefSub.charts[0].indicators.push(repo);
}
if(dbType == "dataset") {
let repo = new Indicator("", null, "chart", "small", true, true, [new IndicatorPath("bar", "stats-tool", "chart?json=",
'{"library":"HighCharts","chartDescription":{"queries":[{"name":"' + typePlural + '","type":"' + ChartHelper.prefix + 'type' + ChartHelper.suffix + '","query":{"name":"monitor.' + ChartHelper.prefix + 'index_shortName' + ChartHelper.suffix + (index==2?".h2020":(index==1?".fp7":""))+'.' + dbTypePlural + '.drepositories"}}],"chart":{"backgroundColor":"#FFFFFFFF","borderColor":"#335cadff","borderRadius":0,"borderWidth":0,"plotBorderColor":"#ccccccff","plotBorderWidth":0},"title":{"text":"' + ChartHelper.prefix + 'title' + ChartHelper.suffix + '"},"subtitle":{},"yAxis":{"title":{"text":"' + typePlural + '"}},"xAxis":{"title":{"text":"Data Repositories"}},"lang":{"noData":"No Data available for the Query"},"exporting":{"enabled":true},"plotOptions":{"series":{"dataLabels":{"enabled":false}}},"legend":{"enabled":true,"align":"center","verticalAlign":"bottom","layout":"horizontal"},"credits":{"href":null,"enabled":true,"text":"Created by OpenAIRE via HighCharts"}}}', null)]);
repo.indicatorPaths[0].parameters = IndicatorPath.createParameters(stakeholder.index_name, chartTitle[index] + typeSingl + " repositories", "bar");
repo.indicatorPaths[0].parameters["index_shortName"] = stakeholder.index_shortName.toLowerCase();
pubDefSub.charts[0].indicators.push(repo);
let irepo = new Indicator("", null, "chart", "small", true, true, [new IndicatorPath("bar", "stats-tool", "chart?json=",
'{"library":"HighCharts","chartDescription":{"queries":[{"name":"' + typePlural + '","type":"' + ChartHelper.prefix + 'type' + ChartHelper.suffix + '","query":{"name":"monitor.' + ChartHelper.prefix + 'index_shortName' + ChartHelper.suffix +(index==2?".h2020":(index==1?".fp7":""))+ '.' + dbTypePlural + '.irepositories"}}],"chart":{"backgroundColor":"#FFFFFFFF","borderColor":"#335cadff","borderRadius":0,"borderWidth":0,"plotBorderColor":"#ccccccff","plotBorderWidth":0},"title":{"text":"' + ChartHelper.prefix + 'title' + ChartHelper.suffix + '"},"subtitle":{},"yAxis":{"title":{"text":"' + typePlural + '"}},"xAxis":{"title":{"text":"Institutional repositories"}},"lang":{"noData":"No Data available for the Query"},"exporting":{"enabled":true},"plotOptions":{"series":{"dataLabels":{"enabled":false}}},"legend":{"enabled":true,"align":"center","verticalAlign":"bottom","layout":"horizontal"},"credits":{"href":null,"enabled":true,"text":"Created by OpenAIRE via HighCharts"}}}', null)]);
irepo.indicatorPaths[0].parameters = IndicatorPath.createParameters(stakeholder.index_name, chartTitle[index] + typeSingl + " institutional repositories", "bar");
irepo.indicatorPaths[0].parameters["index_shortName"] = stakeholder.index_shortName.toLowerCase();
pubDefSub.charts[0].indicators.push(irepo);
}
if(index ==0) {
let pid = new Indicator("", null, "chart", "small", true, true, [new IndicatorPath("pie", "stats-tool", "chart?json=",
'{"library":"HighCharts","chartDescription":{"queries":[{"name":"' + typePlural + '","type":"' + ChartHelper.prefix + 'type' + ChartHelper.suffix + '","query":{"name":"monitor.' + ChartHelper.prefix + 'index_shortName' + ChartHelper.suffix + '.' + dbTypePlural + '.pidtypes"}}],"chart":{"backgroundColor":"#FFFFFFFF","borderColor":"#335cadff","borderRadius":0,"borderWidth":0,"plotBorderColor":"#ccccccff","plotBorderWidth":0},"title":{"text":"' + ChartHelper.prefix + 'title' + ChartHelper.suffix + '"},"subtitle":{},"lang":{"noData":"No Data available for the Query"},"exporting":{"enabled":true},"plotOptions":{"series":{"dataLabels":{"enabled":true}}},"legend":{"enabled":true,"align":"center","verticalAlign":"bottom","layout":"horizontal"},"credits":{"href":null,"enabled":true,"text":"Created by OpenAIRE via HighCharts"}}}', null)]);
pid.indicatorPaths[0].parameters = IndicatorPath.createParameters(stakeholder.index_name, typeSingl + " PIDs", "pie");
pid.indicatorPaths[0].parameters["index_shortName"] = stakeholder.index_shortName.toLowerCase();
pubDefSub.charts[0].indicators.push(pid);
}
return pubDefSub;
}
/* static createOASub(){
let subCategories:SubCategory[] = [];
let overviewSub = new SubCategory("Overview", null,"overview",true, true);
subCategories.push(overviewSub);
let byScientificAreaSub = new SubCategory("By Scientific Area", null,"scientific-area",true, true);
subCategories.push(byScientificAreaSub);
let byProgramSub = new SubCategory("By Programme", null,"programme",true, true);
subCategories.push(byProgramSub);
return subCategories;
}*/
static createOpenAccessTopic(stakeholder:Stakeholder):Category {
let category = new Category("Open Access", "", "open-access", true, true);
category.subCategories.push(this.createOASub(stakeholder,"Publications","Publication","publication","publications"));
category.subCategories.push(this.createOASub(stakeholder,"Research data","Research data","dataset","datasets"));
category.subCategories.push(this.createOASub(stakeholder,"Software","Software","software","software"));
category.subCategories.push(this.createOASub(stakeholder,"Other research products","Other research product","other","other"));
return category;
}
static createOASub(stakeholder:Stakeholder,typePlural, typeSingl, dbType, dbTypePlural ):SubCategory {
let sub:SubCategory = new SubCategory(typePlural, null, dbTypePlural, true, true);
sub.charts.push(new Section("chart", null, null, stakeholder.alias));
sub.charts[0].indicators = sub.charts[0].indicators.concat( this.createOAPerType(stakeholder,typePlural, typeSingl, dbType, dbTypePlural, 0 ));
// sub.charts[0].indicators = sub.charts[0].indicators.concat( this.createOAPerType(stakeholder,typePlural, typeSingl, dbType, dbTypePlural, 1 ));
// sub.charts[0].indicators = sub.charts[0].indicators.concat( this.createOAPerType(stakeholder,typePlural, typeSingl, dbType, dbTypePlural, 2 ));
return sub;
}
static createOAPerType(stakeholder:Stakeholder,typePlural, typeSingl, dbType, dbTypePlural, index:number):Indicator[] {
//default pallette: "colors":["#2f7ed8","#0d233a","#8bbc21","#910000","#1aadce","#492970","#f28f43","#77a1e5","#c42525","#a6c96a"]
let greenAndGoldPalette = ', "colors":["#239D60","#F8B500"]';
let fundingFilter = ['', '{"groupFilters":[{"field":"' + dbType + '.project.funding level 0","type":"=","values":["FP7"]}],"op":"AND"}',
'{"groupFilters":[{"field":"' + dbType + '.project.funding level 0","type":"=","values":["H2020"]}],"op":"AND"}'];
let fieldValue = ["", "FP7", "H2020"];
let chartTitle = ["", "FP7 ", "H2020 "];
let indicators:Indicator[]=[];
let utils = new IndicatorUtils();
let open_non_url = "http://88.197.53.71:8080/stats-api/chart?json="+encodeURIComponent('{"library":"HighCharts","chartDescription":{"queries":[{"name":"Data","type":"pie","color":"#e62020ee","query":{"name":"monitor.' + ChartHelper.prefix + 'id' + ChartHelper.suffix +(index==2?".h2020":(index==1?".fp7":""))+ '.' + dbTypePlural+'.oavsnonoa"}}],"chart":{"backgroundColor":"#FFFFFFFF","borderColor":"#335cadff","borderRadius":0,"borderWidth":0,"plotBorderColor":"#ccccccff","plotBorderWidth":0},"title":{"text":"'+chartTitle[index]+' Open Access vs Non Open Access"},"subtitle":{},"yAxis":{"title":{}},"xAxis":{"title":{}},"lang":{"noData":"No Data available for the Query"},"exporting":{"enabled":false},"plotOptions":{"series":{"dataLabels":{"enabled":true}}},"legend":{"enabled":true,"align":"center","verticalAlign":"bottom","layout":"horizontal"},"credits":{"href":null,"enabled":true,"text":"Created by OpenAIRE via HighCharts"}}}');
encodeURIComponent('{"library":"HighCharts","chartDescription":{"queries":[{"name":"Data","type":"pie","query":{"name":"monitor.' + ChartHelper.prefix + 'id' + ChartHelper.suffix +(index==2?".h2020":(index==1?".fp7":""))+ '.' + dbTypePlural+'.greenvsgold"}}],"chart":{"backgroundColor":"#FFFFFFFF","borderColor":"#335cadff","borderRadius":0,"borderWidth":0,"plotBorderColor":"#ccccccff","plotBorderWidth":0},"title":{},"subtitle":{},"yAxis":{"title":{}},"xAxis":{"title":{}},"lang":{"noData":"No Data available for the Query"},"exporting":{"enabled":false},"plotOptions":{"series":{"dataLabels":{"enabled":true}}},"legend":{"enabled":true,"align":"center","verticalAlign":"bottom","layout":"horizontal"},"credits":{"href":null,"enabled":true,"text":"Created by OpenAIRE via HighCharts"}}}');
let open_non_ind:Indicator = new Indicator("", "", "chart", "small", true, true, [utils.generateIndicatorByChartUrl("stats-tool", open_non_url, "pie",stakeholder)])
open_non_ind.indicatorPaths[0].parameters["index_id"] = stakeholder.index_shortName.toLowerCase();
if(index!=0){
open_non_ind.recommendedFor.push("ec__________::EC");
}
indicators.push(open_non_ind);
if(dbType == "publication") {
let gold_vs_green_url = "http://88.197.53.71:8080/stats-api/chart?json=" + encodeURIComponent('{"library":"HighCharts","chartDescription":{"queries":[{"name":"Data","type":"column","query":{"name":"monitor.' + ChartHelper.prefix + 'id' + ChartHelper.suffix + (index == 2 ? ".h2020" : (index == 1 ? ".fp7" : "")) + '.' + dbTypePlural + '.greenvsgold"}}],"chart":{"backgroundColor":"#FFFFFFFF","borderColor":"#335cadff","borderRadius":0,"borderWidth":0,"plotBorderColor":"#ccccccff","plotBorderWidth":0},"title":{"text":"' + chartTitle[index] + ' Green vs Gold"},"subtitle":{},"yAxis":{"title":{}},"xAxis":{"title":{}},"lang":{"noData":"No Data available for the Query"},"exporting":{"enabled":false},"plotOptions":{"series":{"dataLabels":{"enabled":false}}},"legend":{"enabled":true,"align":"center","verticalAlign":"bottom","layout":"horizontal"},"credits":{"href":null,"enabled":true,"text":"Created by OpenAIRE via HighCharts"}}}');
let gold_vs_green_ind: Indicator = (new Indicator("", "", "chart", "small", true, true, [utils.generateIndicatorByChartUrl("stats-tool", gold_vs_green_url, "pie",stakeholder)]));
gold_vs_green_ind.indicatorPaths[0].parameters["index_id"] = stakeholder.index_shortName.toLowerCase();
if (index != 0) {
gold_vs_green_ind.recommendedFor.push("ec__________::EC");
}
indicators.push(gold_vs_green_ind);
let gold_vs_green_time_url = "http://88.197.53.71:8080/stats-api/chart?json=" + encodeURIComponent('{"library":"HighCharts","chartDescription":{"queries":[{"name":"Green OA","type":"column","query":{"name":"monitor.' + ChartHelper.prefix + 'id' + ChartHelper.suffix + (index == 2 ? ".h2020" : (index == 1 ? ".fp7" : "")) + '.' + dbTypePlural + '.green.year"}},{"name":"Gold OA","type":"column","query":{"name":"monitor.' + ChartHelper.prefix + 'id' + ChartHelper.suffix + (index == 2 ? ".h2020" : (index == 1 ? ".fp7" : "")) + '.' + dbTypePlural + '.gold.year"}}],"chart":{"backgroundColor":"#FFFFFFFF","borderColor":"#335cadff","borderRadius":0,"borderWidth":0,"plotBorderColor":"#ccccccff","plotBorderWidth":0},"title":{"text":"' + chartTitle[index] + ' Green vs Gold Open Access"},"subtitle":{"text":"by year"},"yAxis":{"title":{}},"xAxis":{"title":{}},"lang":{"noData":"No Data available for the Query"},"exporting":{"enabled":false},"plotOptions":{"series":{"dataLabels":{"enabled":false}}},"legend":{"enabled":true,"align":"center","verticalAlign":"bottom","layout":"horizontal"},"credits":{"href":null,"enabled":true,"text":"Created by OpenAIRE via HighCharts"}'+greenAndGoldPalette+'}}');
let gold_vs_green_time_ind: Indicator = (new Indicator("", "", "chart", "small", true, true, [utils.generateIndicatorByChartUrl("stats-tool", gold_vs_green_time_url, "column",stakeholder)]));
gold_vs_green_time_ind.indicatorPaths[0].parameters["index_id"] = stakeholder.index_shortName.toLowerCase();
if (index != 0) {
gold_vs_green_time_ind.recommendedFor.push("ec__________::EC");
}
indicators.push(gold_vs_green_time_ind);
}
let top_project_url = "http://88.197.53.71:8080/stats-api/chart?json="+ encodeURIComponent('{"library":"HighCharts","chartDescription":{"queries":[{"name":"Data","type":"bar","query":{"name":"monitor.'+ ChartHelper.prefix + 'id' + ChartHelper.suffix +(index==2?".h2020":(index==1?".fp7":""))+ '.' + dbTypePlural+'.top10projects"}}],"chart":{"backgroundColor":"#FFFFFFFF","borderColor":"#335cadff","borderRadius":0,"borderWidth":0,"plotBorderColor":"#ccccccff","plotBorderWidth":0},"title":{"text":"' + chartTitle[index] + 'Top 10 projects"},"subtitle":{"text":"by '+typePlural+'"},"yAxis":{"title":{}},"xAxis":{"title":{}},"lang":{"noData":"No Data available for the Query"},"exporting":{"enabled":false},"plotOptions":{"series":{"dataLabels":{"enabled":false}}},"legend":{"enabled":true,"align":"center","verticalAlign":"bottom","layout":"horizontal"},"credits":{"href":null,"enabled":true,"text":"Created by OpenAIRE via HighCharts"}}}');
let top_project_ind:Indicator = (new Indicator("", "", "chart", "medium", true, true, [utils.generateIndicatorByChartUrl("stats-tool", top_project_url, "column",stakeholder)]));
top_project_ind.indicatorPaths[0].parameters["index_id"] = stakeholder.index_shortName.toLowerCase();
if(index!=0){
top_project_ind.recommendedFor.push("ec__________::EC");
}
indicators.push(top_project_ind);
if(index == 0) {
let top_datasources_url = "http://88.197.53.71:8080/stats-api/chart?json=" + encodeURIComponent('{"library":"HighCharts","chartDescription":{"queries":[{"name":"Data","type":"bar","query":{"name":"monitor.' + ChartHelper.prefix + 'id' + ChartHelper.suffix + '.' + dbTypePlural + '.top10datasources"}}],"chart":{"backgroundColor":"#FFFFFFFF","borderColor":"#335cadff","borderRadius":0,"borderWidth":0,"plotBorderColor":"#ccccccff","plotBorderWidth":0},"title":{"text":"' + chartTitle[index] + 'Top 10 Datasources"},"subtitle":{},"yAxis":{"title":{}},"xAxis":{"title":{}},"lang":{"noData":"No Data available for the Query"},"exporting":{"enabled":false},"plotOptions":{"series":{"dataLabels":{"enabled":false}}},"legend":{"enabled":true,"align":"center","verticalAlign":"bottom","layout":"horizontal"},"credits":{"href":null,"enabled":true,"text":"Created by OpenAIRE via HighCharts"}}}');
let top_datasources_ind: Indicator = (new Indicator("", "", "chart", "medium", true, true, [utils.generateIndicatorByChartUrl("stats-tool", top_datasources_url, "column",stakeholder)]));
top_datasources_ind.indicatorPaths[0].parameters["index_id"] = stakeholder.index_shortName.toLowerCase();
indicators.push(top_datasources_ind);
}
if(index != 0) {
let open_non_fl2 = "http://88.197.53.71:8080/stats-api/chart?json=" + encodeURIComponent(
'{"library":"HighCharts","chartDescription":{"queries":[{"name":"Open Access","type":"bar","query":{"select":[{"field":"' + dbType + '","aggregate":"count"},{"field":"' + dbType + '.project.funding level 2","aggregate":null}],"filters":['+fundingFilter[index]+',{"groupFilters":[{"field":"' + dbType + '.access mode","type":"=","values":["Open Access"]}],"op":"AND"}],"entity":"' + dbType + '","profile":"OpenAIRE All-inclusive","limit":"30"}},{"name":"Non Open Access","type":"bar","query":{"select":[{"field":"' + dbType + '","aggregate":"count"},{"field":"' + dbType + '.project.funding level 2","aggregate":null}],"filters":[{"groupFilters":[{"field":"' + dbType + '.access mode","type":"!=","values":["Open Access"]}],"op":"AND"}'+(fundingFilter[index].length >0?', ':'')+fundingFilter[index]+'],"entity":"' + dbType + '","profile":"OpenAIRE All-inclusive","limit":"30"}}],"chart":{"backgroundColor":"#FFFFFFFF","borderColor":"#335cadff","borderRadius":0,"borderWidth":0,"plotBorderColor":"#ccccccff","plotBorderWidth":0},"title":{"text":"' + chartTitle[index] + 'Open Access vs Non Open Access"},"subtitle":{"text":"By Scientific area"},"yAxis":{"title":{}},"xAxis":{"title":{}},"lang":{"noData":"No Data available for the Query"},"exporting":{"enabled":false},"plotOptions":{"series":{"dataLabels":{"enabled":false}}},"legend":{"enabled":true,"align":"center","verticalAlign":"bottom","layout":"horizontal"},"credits":{"href":null,"enabled":true,"text":"Created by OpenAIRE via HighCharts"}}}');
let open_non_fl2_ind: Indicator = (new Indicator("", "", "chart", "medium", true, true, [utils.generateIndicatorByChartUrl("stats-tool", open_non_fl2, "column",stakeholder)]));
indicators.push(open_non_fl2_ind);
if (index != 0) {
open_non_fl2_ind.recommendedFor.push("ec__________::EC");
}
if(dbType == "publication") {
let gold_green__fl2 = "http://88.197.53.71:8080/stats-api/chart?json=" + encodeURIComponent(
'{"library":"HighCharts","chartDescription":{"queries":[{"name":"Green OA","type":"bar","query":{"select":[{"field":"' + dbType + '","aggregate":"count"},{"field":"' + dbType + '.project.funding level 2","aggregate":null}],"filters":[{"groupFilters":[{"field":"' + dbType + '.project.funding level 0","type":"=","values":["' + fieldValue[index] + '"]}],"op":"AND"},{"groupFilters":[{"field":"' + dbType + '.access mode","type":"=","values":["Open Access"]}],"op":"AND"},{"groupFilters":[{"field":"' + dbType + '.datasource.type","type":"contains","values":["repo"]}],"op":"AND"}],"entity":"' + dbType + '","profile":"OpenAIRE All-inclusive","limit":"30"}},{"name":"Gold OA","type":"bar","query":{"select":[{"field":"' + dbType + '","aggregate":"count"},{"field":"' + dbType + '.project.funding level 2","aggregate":null}],"filters":[{"groupFilters":[{"field":"' + dbType + '.access mode","type":"=","values":["Open Access"]}],"op":"AND"},{"groupFilters":[{"field":"' + dbType + '.project.funding level 0","type":"=","values":["' + fieldValue[index] + '"]}],"op":"AND"},{"groupFilters":[{"field":"' + dbType + '.datasource.id","type":"starts_with","values":["doaj"]}],"op":"AND"}],"entity":"' + dbType + '","profile":"OpenAIRE All-inclusive","limit":"30"}}],"chart":{"backgroundColor":"#FFFFFFFF","borderColor":"#335cadff","borderRadius":0,"borderWidth":0,"plotBorderColor":"#ccccccff","plotBorderWidth":0},"title":{"text":"' + chartTitle[index] + 'Green vs Gold Open Access"},"subtitle":{"text":"By Scientific area"},"yAxis":{"title":{}},"xAxis":{"title":{}},"lang":{"noData":"No Data available for the Query"},"exporting":{"enabled":false},"plotOptions":{"series":{"dataLabels":{"enabled":false}}},"legend":{"enabled":true,"align":"center","verticalAlign":"bottom","layout":"horizontal"},"credits":{"href":null,"enabled":true,"text":"Created by OpenAIRE via HighCharts"}'+greenAndGoldPalette+'}}');
let gold_green_ind_fl2: Indicator = (new Indicator("", "", "chart", "medium", true, true, [utils.generateIndicatorByChartUrl("stats-tool", gold_green__fl2, "column",stakeholder)]));
indicators.push(gold_green_ind_fl2);
if (index != 0) {
gold_green_ind_fl2.recommendedFor.push("ec__________::EC");
}
}
let open_non_fl1 = "http://88.197.53.71:8080/stats-api/chart?json=" + encodeURIComponent(
'{"library":"HighCharts","chartDescription":{"queries":[{"name":"Open Access","type":"bar","query":{"select":[{"field":"' + dbType + '","aggregate":"count"},{"field":"' + dbType + '.project.funding level 1","aggregate":null}],"filters":['+fundingFilter[index]+',{"groupFilters":[{"field":"' + dbType + '.access mode","type":"=","values":["Open Access"]}],"op":"AND"}],"entity":"' + dbType + '","profile":"OpenAIRE All-inclusive","limit":"30"}},{"name":"Non Open Access","type":"bar","query":{"select":[{"field":"' + dbType + '","aggregate":"count"},{"field":"' + dbType + '.project.funding level 1","aggregate":null}],"filters":[{"groupFilters":[{"field":"' + dbType + '.access mode","type":"!=","values":["Open Access"]}],"op":"AND"}'+(fundingFilter[index].length >0?', ':'')+fundingFilter[index]+'],"entity":"' + dbType + '","profile":"OpenAIRE All-inclusive","limit":"30"}}],"chart":{"backgroundColor":"#FFFFFFFF","borderColor":"#335cadff","borderRadius":0,"borderWidth":0,"plotBorderColor":"#ccccccff","plotBorderWidth":0},"title":{"text":"' + chartTitle[index] + 'Open Access vs Non Open Access"},"subtitle":{"text":"By Programme"},"yAxis":{"title":{}},"xAxis":{"title":{}},"lang":{"noData":"No Data available for the Query"},"exporting":{"enabled":false},"plotOptions":{"series":{"dataLabels":{"enabled":false}}},"legend":{"enabled":true,"align":"center","verticalAlign":"bottom","layout":"horizontal"},"credits":{"href":null,"enabled":true,"text":"Created by OpenAIRE via HighCharts"}}}');
let open_non_fl1_ind: Indicator = (new Indicator("", "", "chart", "medium", true, true, [utils.generateIndicatorByChartUrl("stats-tool", open_non_fl1, "column",stakeholder)]));
indicators.push(open_non_fl1_ind);
if (index != 0) {
open_non_fl1_ind.recommendedFor.push("ec__________::EC");
}
if(dbType == "publication") {
let gold_green__fl1 = "http://88.197.53.71:8080/stats-api/chart?json=" + encodeURIComponent(
'{"library":"HighCharts","chartDescription":{"queries":[{"name":"Green OA","type":"bar","query":{"select":[{"field":"' + dbType + '","aggregate":"count"},{"field":"' + dbType + '.project.funding level 1","aggregate":null}],"filters":[{"groupFilters":[{"field":"' + dbType + '.project.funding level 0","type":"=","values":["' + fieldValue[index] + '"]}],"op":"AND"},{"groupFilters":[{"field":"' + dbType + '.access mode","type":"=","values":["Open Access"]}],"op":"AND"},{"groupFilters":[{"field":"' + dbType + '.datasource.type","type":"contains","values":["repo"]}],"op":"AND"}],"entity":"' + dbType + '","profile":"OpenAIRE All-inclusive","limit":"30"}},{"name":"Gold OA","type":"bar","query":{"select":[{"field":"' + dbType + '","aggregate":"count"},{"field":"' + dbType + '.project.funding level 1","aggregate":null}],"filters":[{"groupFilters":[{"field":"' + dbType + '.access mode","type":"=","values":["Open Access"]}],"op":"AND"},{"groupFilters":[{"field":"' + dbType + '.project.funding level 0","type":"=","values":["' + fieldValue[index] + '"]}],"op":"AND"},{"groupFilters":[{"field":"' + dbType + '.datasource.id","type":"starts_with","values":["doaj"]}],"op":"AND"}],"entity":"' + dbType + '","profile":"OpenAIRE All-inclusive","limit":"30"}}],"chart":{"backgroundColor":"#FFFFFFFF","borderColor":"#335cadff","borderRadius":0,"borderWidth":0,"plotBorderColor":"#ccccccff","plotBorderWidth":0},"title":{"text":"' + chartTitle[index] + 'Green vs Gold Open Access"},"subtitle":{"text":"By Programme"},"yAxis":{"title":{}},"xAxis":{"title":{}},"lang":{"noData":"No Data available for the Query"},"exporting":{"enabled":false},"plotOptions":{"series":{"dataLabels":{"enabled":false}}},"legend":{"enabled":true,"align":"center","verticalAlign":"bottom","layout":"horizontal"},"credits":{"href":null,"enabled":true,"text":"Created by OpenAIRE via HighCharts"}'+greenAndGoldPalette+'}}');
let gold_green_ind_fl1: Indicator = (new Indicator("", "", "chart", "medium", true, true, [utils.generateIndicatorByChartUrl("stats-tool", gold_green__fl1, "column",stakeholder)]));
// open_non_fl2_ind.indicatorPaths[0].parameters["index_id"] = stakeholder.index_shortName.toLowerCase();
indicators.push(gold_green_ind_fl1);
if (index != 0) {
gold_green_ind_fl1.recommendedFor.push("ec__________::EC");
}
}
}
return indicators;
}
static createOSTopic(stakeholder:Stakeholder):Topic{
let topic = new Topic("Open Science","","open-science",true,true);
topic.categories.push(this.createOpenAccessTopic(stakeholder));
let linked:Category = new Category("Fair / Linked","Indicators based on FAIR data maturity model will soon be included","linked",true,true);
topic.categories.push(linked);
linked.subCategories.push(this.createOSOverviewPerType(stakeholder,"Publications","Publication","publication","publications"));
linked.subCategories.push(this.createOSOverviewPerType(stakeholder,"Research data","Research data","dataset","datasets"));
linked.subCategories.push(this.createOSOverviewPerType(stakeholder,"Software","Software","software","software"));
linked.subCategories.push(this.createOSOverviewPerType(stakeholder,"Other research products","Other research product","other","other"));
let openInfra:Category = new Category("Open Infrastructures","Indicators based on the use of services for generating, producing and publishing research","open-infrastructures",true,true);
openInfra.subCategories.push(new SubCategory("Overview","","overview",true,true));
topic.categories.push(openInfra);
return topic;
}
static createOSOverviewPerType(stakeholder:Stakeholder,typePlural, typeSingl, dbType, dbTypePlural ):SubCategory {
let pubDefSub = new SubCategory(typePlural, null, dbTypePlural, true, true);
pubDefSub.numbers.push(new Section("number", null, null, stakeholder.alias));
if( dbType != "publication") {
pubDefSub.numbers[0].indicators.push(this.createLinkToIndicator(stakeholder,typePlural,typeSingl, dbType,"Publications","publication"));
}
if( dbType != "dataset") {
pubDefSub.numbers[0].indicators.push(this.createLinkToIndicator(stakeholder,typePlural,typeSingl, dbType,"Research data","dataset"));
}
if( dbType != "software") {
pubDefSub.numbers[0].indicators.push(this.createLinkToIndicator(stakeholder,typePlural,typeSingl, dbType,"Software","software"));
}
if( dbType != "other") {
pubDefSub.numbers[0].indicators.push(this.createLinkToIndicator(stakeholder,typePlural,typeSingl, dbType,"Other Research products","other"));
}
return pubDefSub;
}
static createLinkToIndicator(stakeholder:Stakeholder,typePlural, typeSingl, dbType, linkedToName,linkedToType ):Indicator {
let n_linkedPubs = new Indicator(typePlural+" linked to "+linkedToName, null, "number", "small", true, true, [new IndicatorPath(null, "search",
"/resources?query=" + encodeURIComponent(" ( (oaftype exact result) and (resulttypeid exact " + dbType + ") and (relresulttype="+linkedToType+") )") + "&fq=" + (encodeURIComponent("relfunderid exact index_id")) + "&page=0&size=0&format=json", null, ["meta", "total"])]);
n_linkedPubs.indicatorPaths[0].filters["fundingL0"] = "&fq=relfundinglevel0_name exact "+ChartHelper.prefix+'fundingL0'+ChartHelper.suffix;
/*
filters.set("start_year",'{"groupFilters":[{"field":"'+dbType+'.year","type":">=","values":["'+ChartHelper.prefix+'start_year'+ChartHelper.suffix+'"]}],"op":"AND"}');
filters.set("end_year",'{"groupFilters":[{"field":"'+dbType+'.year","type":"<=","values":["'+ChartHelper.prefix+'end_year'+ChartHelper.suffix+'"]}],"op":"AND"}');
*/
return n_linkedPubs;
}
static createFundingImpactTopic():Topic{
let topic = new Topic("Impact/Correlation","Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do...","impact",true,true);
let pubCategory:Category = new Category("Publications","","publications",true,true);
topic.categories.push(pubCategory);
let pubDefSub = new SubCategory(null, null,null,true, true);
pubCategory.subCategories.push(pubDefSub);
let dataCategory:Category = new Category("Research data","","data",true,true);
topic.categories.push(dataCategory);
let dataDefSub = new SubCategory(null, null,null,true, true);
dataCategory.subCategories.push(dataDefSub);
let softwareCategory:Category = new Category("Software","","software",true,true);
topic.categories.push(softwareCategory);
let softDefSub = new SubCategory(null, null,null,true, true);
softwareCategory.subCategories.push(softDefSub);
/* let otherCategory:Category = new Category("Other research products","","other",true,true);
topic.categories.push(otherCategory);
let otherDefSub = new SubCategory(null, null,null,true, true);
otherCategory.subCategories.push(otherDefSub);*/
return topic;
}
createCollaborationTopic():Topic{
let topic = new Topic("Demo Topic","This is a demo topic","demo-topic",true,true);
let category1:Category = new Category("Category 1","This is ","cat-1",true,true);
topic.categories.push(category1);
let subCat1 = new SubCategory("Sub-category 1","","sub-cat-1",true,true);
category1.subCategories.push(subCat1);
let subCat2 = new SubCategory("Sub-category 2","","sub-cat-2",true,true);
category1.subCategories.push(subCat2);
let category2:Category = new Category("Category 2 - no subcategories","","cat-2",true,true);
topic.categories.push(category2);
let defSub = new SubCategory(null, null,null,true, true);
//defSub.charts.push(new Section("chart", null, null, stakeholder.alias));
category2.subCategories.push(defSub);
let chart1 = new Indicator(
"Chart title goes here","Chart description goes here", "chart","medium",true, true,
[new IndicatorPath("other", "image","https://visme.co/blog/wp-content/uploads/2017/03/Dogs-vs-Cats-How-much-they-miss-you-relative-to-the-time-you-are-gone.png", null, null)]);
let chart2 = new Indicator("Chart title goes here","Chart description goes here", "chart","medium",true, true, [new IndicatorPath("other", "image","https://static.boredpanda.com/blog/wp-content/uuuploads/funny-graphs-2/funny-graphs-legs.jpg", null, null)]);
subCat1.charts[0].indicators.push(chart1);
subCat2.charts[0].indicators.push(chart2);
defSub.charts[0].indicators.push(chart1);
defSub.charts[0].indicators.push(chart2);
return topic;
}
}

View File

@ -5,7 +5,7 @@ import {
SourceType, SourceType,
Stakeholder, Stakeholder,
SubCategory, SubCategory,
Topic Topic, Visibility
} from "../openaireLibrary/monitor/entities/stakeholder"; } from "../openaireLibrary/monitor/entities/stakeholder";
import {AbstractControl, ValidatorFn, Validators} from "@angular/forms"; import {AbstractControl, ValidatorFn, Validators} from "@angular/forms";
import {Option} from "../openaireLibrary/dashboard/sharedComponents/input/input.component"; import {Option} from "../openaireLibrary/dashboard/sharedComponents/input/input.component";
@ -24,9 +24,10 @@ export class StakeholderUtils {
{value: 'organization', label: 'Organization'} {value: 'organization', label: 'Organization'}
]; ];
isPublic: Option[] = [ visibility: Option[] = [
{icon: 'public', value: true, label: 'Public'}, {icon: 'world', value: "PUBLIC", label: 'Public'},
{icon: 'lock', value: false, label: 'Private'}, {icon: 'lock', value: "RESTRICTED", label: 'Restricted'},
{icon: 'users', value: "PRIVATE", label: 'Private'},
]; ];
isActive: Option[] = [ isActive: Option[] = [
@ -34,9 +35,10 @@ export class StakeholderUtils {
{icon: 'brightness_1', value: false, label: 'Inactive'}, {icon: 'brightness_1', value: false, label: 'Inactive'},
]; ];
isPublicIcon: Map<boolean, string> = new Map([ isPublicIcon: Map<Visibility, string> = new Map<Visibility, string> ([
[true, 'public'], ["PUBLIC", 'world'],
[false, 'lock'] ["PRIVATE", 'lock'],
["RESTRICTED", 'users']
]); ]);
isActiveIcon: string = 'brightness_1'; isActiveIcon: string = 'brightness_1';
@ -505,7 +507,7 @@ export class IndicatorUtils {
} }
generateIndicatorByForm(form: any, indicatorPaths: IndicatorPath[], type:IndicatorType, addParameters:boolean = true ): Indicator { generateIndicatorByForm(form: any, indicatorPaths: IndicatorPath[], type:IndicatorType, addParameters:boolean = true ): Indicator {
let indicator: Indicator = new Indicator(form.name, form.description, type, let indicator: Indicator = new Indicator(form.name, form.description, type,
form.width, form.isActive, form.isPublic, indicatorPaths, form.defaultId); form.width, form.visibility, indicatorPaths, form.defaultId);
indicator._id = form._id; indicator._id = form._id;
form.indicatorPaths.forEach((indicatorPath, index) => { form.indicatorPaths.forEach((indicatorPath, index) => {
indicator.indicatorPaths[index].type = indicatorPath.type; indicator.indicatorPaths[index].type = indicatorPath.type;

View File

@ -18,8 +18,8 @@ export class StatisticsService {
this.numberSources.set('statistics', [properties.statisticsAPIURL]); this.numberSources.set('statistics', [properties.statisticsAPIURL]);
this.numberSources.set('search', [properties.searchAPIURLLAst]); this.numberSources.set('search', [properties.searchAPIURLLAst]);
this.numberSources.set('metrics', [properties.metricsAPIURL]); this.numberSources.set('metrics', [properties.metricsAPIURL]);
this.numberSources.set('stats-tool', [properties.statisticsFrameNewAPIURL, "http://marilyn.athenarc.gr:8080/stats-api/", "http://88.197.53.71:8080/stats-api/", "https://stats.madgik.di.uoa.gr/stats-api/"]); this.numberSources.set('stats-tool', [properties.statisticsFrameNewAPIURL, "http://marilyn.athenarc.gr:8080/stats-api/", "http://88.197.53.71:8080/stats-api/", "https://stats.madgik.di.uoa.gr/stats-api/","https://beta.services.openaire.eu/stats-tool/","https://services.openaire.eu/stats-tool/"]);
this.chartSources.set('stats-tool', [properties.statisticsFrameNewAPIURL, "http://marilyn.athenarc.gr:8080/stats-api/", "http://88.197.53.71:8080/stats-api/", "https://stats.madgik.di.uoa.gr/stats-api/"]); this.chartSources.set('stats-tool', [properties.statisticsFrameNewAPIURL, "http://marilyn.athenarc.gr:8080/stats-api/", "http://88.197.53.71:8080/stats-api/", "https://stats.madgik.di.uoa.gr/stats-api/","https://beta.services.openaire.eu/stats-tool/","https://services.openaire.eu/stats-tool/"]);
this.chartSources.set('old', [properties.statisticsFrameAPIURL]); this.chartSources.set('old', [properties.statisticsFrameAPIURL]);
this.chartSources.set('metrics', [properties.metricsAPIURL]); this.chartSources.set('metrics', [properties.metricsAPIURL]);
this.chartSources.set('image', [""]); this.chartSources.set('image', [""]);

View File

@ -264,3 +264,26 @@
margin-top: 30px; margin-top: 30px;
height: 250px; height: 250px;
} }
li.selectedVisibility::before a, li.selectedVisibility a::before, li.selectedVisibility::after a, li.selectedVisibility a, .selectedVisibility{
background-color:var(--secondary-color);
background:blue;
opacity: 0.5;
}
li.selectedVisibility{
position: relative;
}
li.selectedVisibility::before {
content: "";
width: 100%;
height: 100%;
position: absolute;
left: 0;
background-color: var(--secondary-color);
opacity: 0.3;
}
.uk-modal .large-modal {
width: 800px;
}

View File

@ -4860,7 +4860,7 @@ address p + p {
transition: opacity 400ms; transition: opacity 400ms;
z-index: -1; z-index: -1;
} }
#page_content_inner { #page_content_inner, openaire-user #tm-main {
padding: 24px 24px 100px; padding: 24px 24px 100px;
} }
#page_overflow { #page_overflow {

View File

@ -11,7 +11,7 @@ export let properties: EnvProperties = {
framesAPIURL: "https://beta.openaire.eu/stats3/", framesAPIURL: "https://beta.openaire.eu/stats3/",
statisticsAPIURL: "https://beta.services.openaire.eu/stats-api/", statisticsAPIURL: "https://beta.services.openaire.eu/stats-api/",
statisticsFrameAPIURL: "https://beta.openaire.eu/stats/", statisticsFrameAPIURL: "https://beta.openaire.eu/stats/",
statisticsFrameNewAPIURL: "https://stats.madgik.di.uoa.gr/stats-api/", statisticsFrameNewAPIURL: "https://beta.services.openaire.eu/stats-tool/",
useNewStatistisTool: true, useNewStatistisTool: true,
claimsAPIURL: "https://beta.services.openaire.eu/claims/rest/claimsService/", claimsAPIURL: "https://beta.services.openaire.eu/claims/rest/claimsService/",
searchAPIURLLAst: "https://beta.services.openaire.eu/search/v2/api/", searchAPIURLLAst: "https://beta.services.openaire.eu/search/v2/api/",

View File

@ -16,7 +16,7 @@ export let properties: EnvProperties = {
framesAPIURL: "https://beta.openaire.eu/stats3/", framesAPIURL: "https://beta.openaire.eu/stats3/",
statisticsAPIURL: "https://beta.services.openaire.eu/stats-api/", statisticsAPIURL: "https://beta.services.openaire.eu/stats-api/",
statisticsFrameAPIURL: "https://beta.openaire.eu/stats/", statisticsFrameAPIURL: "https://beta.openaire.eu/stats/",
statisticsFrameNewAPIURL: "http://88.197.53.71:8080/stats-api/", statisticsFrameNewAPIURL: "https://beta.services.openaire.eu/stats-tool/",
useNewStatistisTool: false, useNewStatistisTool: false,
claimsAPIURL: "http://scoobydoo.di.uoa.gr:8080/dnet-claims-service-2.0.0-SNAPSHOT/rest/claimsService/", claimsAPIURL: "http://scoobydoo.di.uoa.gr:8080/dnet-claims-service-2.0.0-SNAPSHOT/rest/claimsService/",
searchAPIURLLAst: "https://beta.services.openaire.eu/search/v2/api/", searchAPIURLLAst: "https://beta.services.openaire.eu/search/v2/api/",