Compare commits
31 Commits
|
@ -9,6 +9,10 @@ import {HelperFunctions} from "../openaireLibrary/utils/HelperFunctions.class";
|
|||
loadChildren: () => import('../openaireLibrary/monitor-admin/general/general.module').then(m => m.GeneralModule),
|
||||
pathMatch: 'full'
|
||||
},
|
||||
{
|
||||
path: 'users/links',
|
||||
loadChildren: () => import('../claims/claimsAdmin/claimsAdmin.module').then(m => m.LibClaimsAdminModule), pathMatch: 'full', data: {param: 'stakeholder', parentClass: 'monitor'}
|
||||
},
|
||||
{
|
||||
path: 'users',
|
||||
redirectTo: 'users/manager',
|
||||
|
@ -25,10 +29,20 @@ import {HelperFunctions} from "../openaireLibrary/utils/HelperFunctions.class";
|
|||
data: {hasInternalSidebar: true},
|
||||
pathMatch: 'full'
|
||||
},
|
||||
{
|
||||
path: 'umbrella',
|
||||
loadChildren: () => import('../openaireLibrary/monitor-admin/umbrella/umbrella.module').then(m => m.UmbrellaModule),
|
||||
pathMatch: 'full'
|
||||
},
|
||||
{
|
||||
path: 'admin-tools',
|
||||
loadChildren: () => import('../admin-tools/admin-tools-routing.module').then(m => m.AdminToolsRoutingModule),
|
||||
data: {param: 'stakeholder', parentClass: 'monitor'}
|
||||
},
|
||||
{
|
||||
path: 'claims/link',
|
||||
loadChildren: () => import('../claims/directLinking/directLinking.module').then(m => m.LibDirectLinkingModule),
|
||||
data: {param: 'stakeholder', parentClass: 'monitor'}
|
||||
}
|
||||
])]
|
||||
})
|
||||
|
|
|
@ -4,6 +4,7 @@ import {OpenaireErrorPageComponent} from './error/errorPage.component';
|
|||
import {AdminLoginGuard} from "./openaireLibrary/login/adminLoginGuard.guard";
|
||||
import {LoginGuard} from "./openaireLibrary/login/loginGuard.guard";
|
||||
import {AdminDashboardGuard} from "./openaireLibrary/monitor-admin/utils/adminDashboard.guard";
|
||||
import {HasDashboardGuard} from "./openaireLibrary/monitor/services/hasDashboard.guard";
|
||||
|
||||
const routes: Routes = [
|
||||
{
|
||||
|
@ -59,6 +60,7 @@ const routes: Routes = [
|
|||
{
|
||||
path: '',
|
||||
loadChildren: () => import('./monitor/monitor.module').then(m => m.MonitorModule),
|
||||
canActivateChild: [HasDashboardGuard],
|
||||
data: {isFrontPage: true}
|
||||
},
|
||||
{
|
||||
|
|
|
@ -1,70 +1,167 @@
|
|||
<div *ngIf="loading">
|
||||
<loading [full]="true"></loading>
|
||||
<loading [full]="true"></loading>
|
||||
</div>
|
||||
<div *ngIf="!loading" [class.monitor]="isFrontPage">
|
||||
<div id="modal-container"></div>
|
||||
<ng-container *ngIf="!isHidden">
|
||||
<navbar *ngIf="hasHeader" portal="monitor_dashboard" [header]="menuHeader" [userMenuItems]=userMenuItems [menuItems]="menuItems" [user]="user"
|
||||
[notificationConfiguration]="isMobile && user && notificationGroupsInitialized?notificationConfiguration:null"></navbar>
|
||||
<div>
|
||||
<div class="sidebar_main_swipe uk-flex uk-background-default" [class.sidebar_main_active]="open && (hasSidebar || hasAdminMenu || hasInternalSidebar)"
|
||||
[class.sidebar_mini]="!open && (hasSidebar || hasAdminMenu || hasInternalSidebar)" [class.sidebar_hover]="hover">
|
||||
<dashboard-sidebar *ngIf="stakeholder && isFrontPage && hasSidebar && !hasInternalSidebar" queryParamsHandling="merge" [items]="sideBarItems"
|
||||
[activeItem]="activeTopic?activeTopic.alias:null" [activeSubItem]="activeCategory?activeCategory.alias:null"></dashboard-sidebar>
|
||||
<dashboard-sidebar *ngIf="hasAdminMenu && !hasInternalSidebar" [items]="adminMenuItems" [backItem]="backItem"></dashboard-sidebar>
|
||||
<main class="uk-width-1-1">
|
||||
<router-outlet></router-outlet>
|
||||
</main>
|
||||
<div id="modal-container"></div>
|
||||
<ng-container *ngIf="!isHidden">
|
||||
<navbar *ngIf="hasHeader" portal="monitor_dashboard" [header]="menuHeader" [userMenuItems]=userMenuItems
|
||||
[menuItems]="menuItems" [user]="user"
|
||||
[notificationConfiguration]="isMobile && user && notificationGroupsInitialized?notificationConfiguration:null"></navbar>
|
||||
<div *ngIf="isChild" class="uk-banner uk-padding uk-padding-remove-horizontal uk-light">
|
||||
<div class="uk-container uk-container-large">
|
||||
<div class="uk-padding-small uk-padding-remove-vertical">
|
||||
<div class="uk-grid uk-grid-large uk-flex-middle uk-margin-medium-bottom" uk-grid>
|
||||
<div class="uk-width-expand">
|
||||
<div class="uk-grid uk-grid-small uk-flex-middle" uk-grid>
|
||||
<div class="uk-card uk-card-default uk-padding-small">
|
||||
<img *ngIf="stakeholder.logoUrl; else elseBlock" [src]="stakeholder | logoUrl"
|
||||
[alt]="stakeholder.name + ' logo'" class="uk-height-max-xsmall"
|
||||
style="height: 65px; max-width: 180px;">
|
||||
<ng-template #elseBlock>
|
||||
<img src="assets/common-assets/placeholder.png" alt="OpenAIRE placeholder logo"
|
||||
class="uk-height-max-xsmall" style="height: 65px; max-width: 180px;">
|
||||
</ng-template>
|
||||
</div>
|
||||
<div class="uk-width-expand uk-margin-small-left">
|
||||
<h1 class="uk-h5 uk-margin-remove uk-text-truncate">{{ stakeholder.name }}</h1>
|
||||
<div class="uk-text-small uk-margin-small-top">
|
||||
<breadcrumbs [breadcrumbs]="breadcrumbs"></breadcrumbs>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div *ngIf="stakeholder.otherParents?.length" class="uk-width-auto">
|
||||
<div class="uk-text-small uk-margin-small-bottom">
|
||||
Other related {{ stakeholderUtils.entities.stakeholders.toLowerCase() }}
|
||||
</div>
|
||||
<div class="uk-flex uk-flex-middle">
|
||||
<a *ngFor="let item of stakeholder.otherParents" [routerLink]="item.alias"
|
||||
class="uk-link-reset uk-margin-small-right">
|
||||
<button class="uk-icon-button uk-button-default" [attr.uk-tooltip]="item.name">
|
||||
<img *ngIf="item.logoUrl; else elseBlock" [src]="item | logoUrl"
|
||||
[alt]="item.name + ' logo'" style="max-width: 35px;">
|
||||
<ng-template #elseBlock>
|
||||
<img src="assets/common-assets/placeholder.png"
|
||||
alt="OpenAIRE placeholder logo" style="max-width: 35px;">
|
||||
</ng-template>
|
||||
</button>
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="uk-banner-footer uk-padding-remove">
|
||||
<div class="uk-container uk-container-large uk-flex uk-flex-between">
|
||||
<ul class="uk-banner-tab">
|
||||
<li [class.uk-active]="!isSearch">
|
||||
<a [routerLink]="[stakeholder.parent.alias, 'browse', stakeholder.type, stakeholder.alias]">
|
||||
{{ stakeholderUtils.entities.stakeholder }}
|
||||
</a>
|
||||
</li>
|
||||
<li [class.uk-active]="isSearch">
|
||||
<a [routerLink]="properties.searchLinkToResults">
|
||||
Browse {{ openaireEntities.RESULTS }}
|
||||
</a>
|
||||
</li>
|
||||
</ul>
|
||||
<div *ngIf="!isMobile" class="uk-margin-large-right uk-flex uk-flex-middle">
|
||||
<a *ngIf="isManager" [routerLink]="'admin/' + stakeholder.alias" target="_blank"
|
||||
class="uk-button uk-flex uk-flex-middle uk-margin-small-right">
|
||||
Manage
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<bottom id="bottom" *ngIf="isFrontPage" [centered]="true" [properties]="properties" [showMenuItems]="true"></bottom>
|
||||
<notification-sidebar *ngIf="!isMobile && user && notificationGroupsInitialized" [configuration]="notificationConfiguration" [user]="user"></notification-sidebar>
|
||||
<cache-indicators *ngIf="stakeholder && !isFrontPage && isCurator()" [alias]="stakeholder.alias"></cache-indicators>
|
||||
<div *ngIf="view" class="preview uk-text-small uk-flex uk-flex-middle">
|
||||
<span>You are currently in a <span class="uk-text-bold">"Preview"</span> mode. <span class="uk-visible@m"><a (click)="removeView()">The current view</a> of this dashboard may differ.</span></span>
|
||||
</div>
|
||||
</div>
|
||||
</ng-container>
|
||||
<div *ngIf="projectUpdate && !isFrontPage" class="project-update">
|
||||
<div *ngIf="projectUpdate === 'danger'" class="uk-alert uk-alert-danger" uk-alert>
|
||||
<a class="uk-alert-close" uk-close></a>
|
||||
<div class="uk-text-bold uk-text-small">Projects Status: Urgent Update Needed</div>
|
||||
<div class="uk-margin-xsmall-top uk-text-xsmall">
|
||||
Your project list was last updated more than a year ago. Please send an updated project list to
|
||||
<a href="mailto:mining@openaire.eu">mining@openaire.eu</a> or contact <a [href]="monitorLink + '/contact-us'">support</a>.
|
||||
</div>
|
||||
</div>
|
||||
<div *ngIf="projectUpdate === 'warning'" class="uk-alert uk-alert-warning" uk-alert>
|
||||
<a class="uk-alert-close" uk-close></a>
|
||||
<div class="uk-text-bold uk-text-small">Projects Status: Update Needed</div>
|
||||
<div class="uk-margin-xsmall-top uk-text-xsmall">
|
||||
Your project list was last updated between 6 to 12 months ago. Please send an updated project list to
|
||||
<a href="mailto:mining@openaire.eu">mining@openaire.eu</a> or contact <a [href]="monitorLink + '/contact-us'" target="_blank" class="custom-external">support</a>.
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div *ngIf="isHidden" class="private-data uk-light dark">
|
||||
<div class="uk-section uk-section-small uk-container uk-container-small uk-text-center">
|
||||
<img src="assets/common-assets/logo-services/monitor/inverted.svg" style="height: 80px;">
|
||||
<h1 class="uk-h4 uk-margin-large-top">Private Content</h1>
|
||||
<div class="uk-text-large">
|
||||
The contents of this dashboard are only visible to invited members.
|
||||
</div>
|
||||
<div class="uk-margin-large-top uk-margin-large-bottom">
|
||||
<icon name="incognito" ratio="7"></icon>
|
||||
</div>
|
||||
<div class="uk-margin-medium-bottom">
|
||||
<div *ngIf="!user">
|
||||
If you are a member of this dashboard, please sign in.
|
||||
<div *ngIf="isUmbrella" class="uk-banner uk-padding-remove">
|
||||
<ul class="uk-banner-tab uk-flex-center">
|
||||
<li [class.uk-active]="!isBrowse">
|
||||
<a [routerLink]="stakeholder.alias">
|
||||
{{ stakeholderUtils.entities.stakeholder }}
|
||||
</a>
|
||||
</li>
|
||||
<li *ngFor="let type of stakeholder.umbrella.types" [class.uk-active]="isBrowse && activeType === type"
|
||||
[class.uk-hidden]="stakeholder.umbrella.children[type].length === 0">
|
||||
<a [routerLink]="stakeholder.alias + '/browse/' + type">
|
||||
Browse {{ stakeholderUtils.entities[type + 's'] }}
|
||||
</a>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
<div>
|
||||
If you want to be a member of this dashboard - Contact us.
|
||||
<div class="sidebar_main_swipe uk-flex uk-background-default"
|
||||
[class.sidebar_main_active]="open && (hasSidebar || hasAdminMenu || hasInternalSidebar)"
|
||||
[class.sidebar_mini]="!open && (hasSidebar || hasAdminMenu || hasInternalSidebar)"
|
||||
[class.sidebar_hover]="hover">
|
||||
<dashboard-sidebar *ngIf="stakeholder && isFrontPage && hasSidebar && !hasInternalSidebar"
|
||||
queryParamsHandling="merge" [items]="sideBarItems"
|
||||
[activeItem]="activeTopic?activeTopic.alias:null"
|
||||
[activeSubItem]="activeCategory?activeCategory.alias:null"></dashboard-sidebar>
|
||||
<dashboard-sidebar *ngIf="hasAdminMenu && !hasInternalSidebar" [items]="adminMenuItems"
|
||||
[backItem]="backItem"></dashboard-sidebar>
|
||||
<main class="uk-width-1-1">
|
||||
<router-outlet></router-outlet>
|
||||
</main>
|
||||
</div>
|
||||
<bottom id="bottom" *ngIf="isFrontPage" [centered]="true" [properties]="properties"
|
||||
[showMenuItems]="true"></bottom>
|
||||
<notification-sidebar *ngIf="!isMobile && user && notificationGroupsInitialized"
|
||||
[configuration]="notificationConfiguration" [user]="user"></notification-sidebar>
|
||||
<cache-indicators *ngIf="stakeholder && !isFrontPage && isCurator()"
|
||||
[alias]="stakeholder.alias"></cache-indicators>
|
||||
<div *ngIf="view" class="preview uk-text-small uk-flex uk-flex-middle">
|
||||
<span>You are currently in a <span class="uk-text-bold">"Preview"</span> mode. <span
|
||||
class="uk-visible@m"><a (click)="removeView()">The current view</a> of this dashboard may differ.</span></span>
|
||||
</div>
|
||||
</div>
|
||||
</ng-container>
|
||||
<div *ngIf="projectUpdate && !isFrontPage" class="project-update">
|
||||
<div *ngIf="projectUpdate === 'danger'" class="uk-alert uk-alert-danger" uk-alert>
|
||||
<a class="uk-alert-close" uk-close></a>
|
||||
<div class="uk-text-bold uk-text-small">Projects Status: Urgent Update Needed</div>
|
||||
<div class="uk-margin-xsmall-top uk-text-xsmall">
|
||||
Your project list was last updated more than a year ago. Please send an updated project list to
|
||||
<a href="mailto:mining@openaire.eu">mining@openaire.eu</a> or contact <a
|
||||
[href]="monitorLink + '/contact-us'">support</a>.
|
||||
</div>
|
||||
</div>
|
||||
<div *ngIf="projectUpdate === 'warning'" class="uk-alert uk-alert-warning" uk-alert>
|
||||
<a class="uk-alert-close" uk-close></a>
|
||||
<div class="uk-text-bold uk-text-small">Projects Status: Update Needed</div>
|
||||
<div class="uk-margin-xsmall-top uk-text-xsmall">
|
||||
Your project list was last updated between 6 to 12 months ago. Please send an updated project list to
|
||||
<a href="mailto:mining@openaire.eu">mining@openaire.eu</a> or contact <a
|
||||
[href]="monitorLink + '/contact-us'" target="_blank" class="custom-external">support</a>.
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="uk-flex uk-flex-center uk-flex-middle">
|
||||
<a *ngIf="!user" class="uk-button uk-button-primary uk-margin-right" (click)="login()">Sign in</a>
|
||||
<a class="uk-button uk-button-secondary" [href]="monitorLink + '/contact-us'">Contact us</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<role-verification *ngIf="stakeholder" [id]="stakeholder.alias" [name]="stakeholder.name" [type]="stakeholder.type" [userInfoLink]="monitorLink + '/user-info'"></role-verification>
|
||||
<div *ngIf="isHidden" class="private-data uk-light dark">
|
||||
<div class="uk-section uk-section-small uk-container uk-container-small uk-text-center">
|
||||
<img src="assets/common-assets/logo-services/monitor/inverted.svg" style="height: 80px;">
|
||||
<h1 class="uk-h4 uk-margin-large-top">Private Content</h1>
|
||||
<div class="uk-text-large">
|
||||
The contents of this dashboard are only visible to invited members.
|
||||
</div>
|
||||
<div class="uk-margin-large-top uk-margin-large-bottom">
|
||||
<icon name="incognito" ratio="7"></icon>
|
||||
</div>
|
||||
<div class="uk-margin-medium-bottom">
|
||||
<div *ngIf="!user">
|
||||
If you are a member of this dashboard, please sign in.
|
||||
</div>
|
||||
<div>
|
||||
If you want to be a member of this dashboard - Contact us.
|
||||
</div>
|
||||
</div>
|
||||
<div class="uk-flex uk-flex-center uk-flex-middle">
|
||||
<a *ngIf="!user" class="uk-button uk-button-primary uk-margin-right" (click)="login()">Sign in</a>
|
||||
<a class="uk-button uk-button-secondary" [href]="monitorLink + '/contact-us'">Contact us</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<role-verification *ngIf="stakeholder" [id]="stakeholder.alias" [name]="stakeholder.name"
|
||||
[dashboard]="'OpenAIRE Monitor'"
|
||||
[type]="stakeholder.type" [userInfoLink]="monitorLink + '/user-info'"></role-verification>
|
||||
</div>
|
||||
|
|
|
@ -1,24 +1,22 @@
|
|||
import {ChangeDetectorRef, Component, OnDestroy, OnInit} from '@angular/core';
|
||||
import {ActivatedRoute, Data, NavigationEnd, Params, Router} from '@angular/router';
|
||||
import {EnvProperties} from './openaireLibrary/utils/properties/env-properties';
|
||||
import {ChangeDetectorRef, Component, OnInit} from '@angular/core';
|
||||
import {ActivatedRoute, Params, Router} from '@angular/router';
|
||||
import {Role, Session, User} from './openaireLibrary/login/utils/helper.class';
|
||||
import {UserManagementService} from "./openaireLibrary/services/user-management.service";
|
||||
import {StakeholderService} from "./openaireLibrary/monitor/services/stakeholder.service";
|
||||
import {BehaviorSubject, Subscriber, Subscription} from "rxjs";
|
||||
import {Subscription} from "rxjs";
|
||||
import {LayoutService} from "./openaireLibrary/dashboard/sharedComponents/sidebar/layout.service";
|
||||
import {MenuItem} from "./openaireLibrary/sharedComponents/menu";
|
||||
import {
|
||||
Category,
|
||||
Stakeholder,
|
||||
StakeholderEntities,
|
||||
StakeholderType,
|
||||
Topic,
|
||||
Visibility
|
||||
} from "./openaireLibrary/monitor/entities/stakeholder";
|
||||
import {LinksResolver} from "./search/links-resolver";
|
||||
import {Header} from "./openaireLibrary/sharedComponents/navigationBar.component";
|
||||
import {properties} from "../environments/environment";
|
||||
import {ConfigurationService} from "./openaireLibrary/utils/configuration/configuration.service";
|
||||
import {StakeholderConfiguration, StakeholderUtils} from "./openaireLibrary/monitor-admin/utils/indicator-utils";
|
||||
import {StakeholderUtils} from "./openaireLibrary/monitor-admin/utils/indicator-utils";
|
||||
import {SmoothScroll} from "./openaireLibrary/utils/smooth-scroll";
|
||||
import {ConnectHelper} from "./openaireLibrary/connect/connectHelper";
|
||||
import {ResourcesService} from "./openaireLibrary/monitor/services/resources.service";
|
||||
|
@ -26,8 +24,9 @@ import {StringUtils} from "./openaireLibrary/utils/string-utils.class";
|
|||
import {
|
||||
NotificationConfiguration
|
||||
} from "./openaireLibrary/notifications/notifications-sidebar/notifications-sidebar.component";
|
||||
import {StakeholderBaseComponent} from "./openaireLibrary/monitor-admin/utils/stakeholder-base.component";
|
||||
import {SidebarBaseComponent} from "./openaireLibrary/dashboard/sharedComponents/sidebar/sidebar-base.component";
|
||||
import {Breadcrumb} from './openaireLibrary/utils/breadcrumbs/breadcrumbs.component';
|
||||
import {OpenaireEntities} from './openaireLibrary/utils/properties/searchFields';
|
||||
|
||||
|
||||
@Component({
|
||||
|
@ -42,6 +41,9 @@ export class AppComponent extends SidebarBaseComponent implements OnInit {
|
|||
hasHeader: boolean = false;
|
||||
hasAdminMenu: boolean = false;
|
||||
hasInternalSidebar: boolean = false;
|
||||
breadcrumbs: Breadcrumb[] = [];
|
||||
isBrowse: boolean;
|
||||
isSearch: boolean;
|
||||
isFrontPage: boolean = false;
|
||||
isMobile: boolean = false;
|
||||
view: Visibility;
|
||||
|
@ -69,6 +71,8 @@ export class AppComponent extends SidebarBaseComponent implements OnInit {
|
|||
innerWidth;
|
||||
projectUpdate: 'danger' | 'warning';
|
||||
paramsSubscription: Subscription;
|
||||
openaireEntities = OpenaireEntities;
|
||||
activeType: StakeholderType;
|
||||
|
||||
constructor(protected _route: ActivatedRoute,
|
||||
protected _router: Router,
|
||||
|
@ -80,7 +84,10 @@ export class AppComponent extends SidebarBaseComponent implements OnInit {
|
|||
private configurationService: ConfigurationService,
|
||||
private resourcesService: ResourcesService) {
|
||||
super();
|
||||
this.initRouterParams(_route);
|
||||
this.initRouterParams(_route, event => {
|
||||
this.isBrowse = event.url.includes('browse');
|
||||
this.isSearch = event.url.includes('search');
|
||||
});
|
||||
}
|
||||
|
||||
ngOnInit() {
|
||||
|
@ -113,7 +120,6 @@ export class AppComponent extends SidebarBaseComponent implements OnInit {
|
|||
this.subscriptions.push(this.data.subscribe(data => {
|
||||
if (data && data.portal) {
|
||||
this.setProperties(data.portal);
|
||||
this.configurationService.initPortal(this.properties, this.properties.adminToolsCommunity);
|
||||
}
|
||||
}));
|
||||
this.subscriptions.push(this.userManagementService.getUserInfo().subscribe(user => {
|
||||
|
@ -134,28 +140,39 @@ export class AppComponent extends SidebarBaseComponent implements OnInit {
|
|||
this.paramsSubscription = this.params.subscribe(params => {
|
||||
if (this.paramsResolved) {
|
||||
this.loading = true;
|
||||
this.activeType = params['type'];
|
||||
if (params && params['stakeholder']) {
|
||||
if (!this.stakeholder || this.stakeholder.alias !== params['stakeholder'] || this.updateStakeholder) {
|
||||
this.subscriptions.push(this.stakeholderService.getStakeholder(params['stakeholder'], this.updateStakeholder).subscribe(stakeholder => {
|
||||
if (stakeholder) {
|
||||
this.stakeholder = stakeholder;
|
||||
this.updateStakeholder = false;
|
||||
LinksResolver.setProperties(this.stakeholder.alias);
|
||||
this.setProperties(this.stakeholder.alias, this.stakeholder.type);
|
||||
this.buildMenu();
|
||||
this.setActives(params);
|
||||
this.setSideBar();
|
||||
this.loading = false;
|
||||
} else {
|
||||
this.stakeholder = null;
|
||||
LinksResolver.resetProperties();
|
||||
this.navigateToError();
|
||||
this.buildMenu();
|
||||
this.loading = false;
|
||||
let callback = (stakeholder: Stakeholder) => {
|
||||
if (stakeholder) {
|
||||
this.stakeholder = stakeholder;
|
||||
if (this.isChild) {
|
||||
this.breadcrumbs = [
|
||||
{name: this.stakeholder.parent.name, route: this.stakeholder.parent.alias},
|
||||
{name: this.stakeholderUtils.entities[this.stakeholder.type + 's'], route: this.stakeholder.parent.alias + '/browse/' + this.stakeholder.type},
|
||||
{name: this.stakeholder.name}
|
||||
];
|
||||
}
|
||||
}));
|
||||
this.updateStakeholder = false;
|
||||
this.buildMenu(this.stakeholder?.parent?this.stakeholder.parent:this.stakeholder);
|
||||
LinksResolver.setProperties(this.aliasPrefix + this.stakeholder.alias);
|
||||
this.setProperties(this.stakeholder.alias, this.stakeholder.type);
|
||||
this.setActives(params);
|
||||
this.setSideBar();
|
||||
this.loading = false;
|
||||
} else {
|
||||
this.stakeholder = null;
|
||||
LinksResolver.resetProperties();
|
||||
this.navigateToError();
|
||||
this.buildMenu();
|
||||
this.loading = false;
|
||||
}
|
||||
};
|
||||
if (params['child'] && (!this.stakeholder || this.stakeholder.alias !== params['child'] || this.updateStakeholder)) {
|
||||
this.subscriptions.push(this.stakeholderService.getChildStakeholder(params['stakeholder'], params['type'], params['child'], this.updateStakeholder).subscribe(callback));
|
||||
} else if (!params['child'] && (!this.stakeholder || this.stakeholder.alias !== params['stakeholder'] || this.updateStakeholder)) {
|
||||
this.subscriptions.push(this.stakeholderService.getStakeholder(params['stakeholder'], this.updateStakeholder).subscribe(callback));
|
||||
} else {
|
||||
this.buildMenu();
|
||||
this.buildMenu(this.stakeholder?.parent?this.stakeholder.parent:this.stakeholder);
|
||||
this.setActives(params);
|
||||
this.loading = false;
|
||||
}
|
||||
|
@ -203,7 +220,10 @@ export class AppComponent extends SidebarBaseComponent implements OnInit {
|
|||
this.notificationConfiguration.availableGroups.push({value: Role.typeMember(type.value), label: type.label + ' Members'});
|
||||
}
|
||||
}
|
||||
this.subscriptions.push(this.stakeholderService.getMyStakeholders(this.properties.monitorServiceAPIURL).subscribe(stakeholders => {
|
||||
this.subscriptions.push(this.stakeholderService.getMyStakeholders(this.properties.monitorServiceAPIURL).subscribe(manageStakeholder => {
|
||||
let stakeholders = manageStakeholder.standalone;
|
||||
stakeholders.concat(manageStakeholder.umbrella);
|
||||
stakeholders.concat(manageStakeholder.dependent);
|
||||
stakeholders.forEach(stakeholder => {
|
||||
this.notificationConfiguration.availableGroups.push({
|
||||
value: Role.manager(stakeholder.type, stakeholder.alias),
|
||||
|
@ -267,18 +287,34 @@ export class AppComponent extends SidebarBaseComponent implements OnInit {
|
|||
return "https://" + (this.properties.environment == 'beta' ? 'beta.' : '') + 'monitor.openaire.eu';
|
||||
}
|
||||
|
||||
get isUmbrella(): boolean {
|
||||
return !!this.stakeholder?.umbrella && this.data.value.activeMenuItem === 'dashboard';
|
||||
}
|
||||
|
||||
get isChild(): boolean {
|
||||
return !!this.stakeholder?.parent;
|
||||
}
|
||||
|
||||
get aliasPrefix(): string {
|
||||
if(this.isChild) {
|
||||
return this.stakeholder.parent.alias + '/browse/' + this.stakeholder.type + '/';
|
||||
} else {
|
||||
return '';
|
||||
}
|
||||
}
|
||||
|
||||
private setSideBar() {
|
||||
let items: MenuItem[] = [];
|
||||
if (this.hasPermission(this.view?this.view:this.stakeholder.visibility)) {
|
||||
this.stakeholder.topics.forEach((topic: Topic) => {
|
||||
if (this.hasPermission(topic.visibility)) {
|
||||
let topicItem: MenuItem = new MenuItem(topic.alias, topic.name, "", '/' + this.stakeholder.alias + '/' + topic.alias,
|
||||
let topicItem: MenuItem = new MenuItem(topic.alias, topic.name, "", this.aliasPrefix + this.stakeholder.alias + '/' + topic.alias,
|
||||
null, [], [], {}, {svg: topic.icon}, null, null, (
|
||||
'/' + this.stakeholder.alias + '/' + topic.alias));
|
||||
this.aliasPrefix + this.stakeholder.alias + '/' + topic.alias));
|
||||
topicItem.items = topic.categories.filter(category => this.hasPermission(category.visibility)).map(category => {
|
||||
return new MenuItem(category.alias, category.name, "", ('/' + this.stakeholder.alias + '/' + topic.alias + '/' + category.alias),
|
||||
return new MenuItem(category.alias, category.name, "", this.aliasPrefix + this.stakeholder.alias + '/' + topic.alias + '/' + category.alias,
|
||||
null, [], [], {}, {svg: topic.icon}, null, null,
|
||||
('/' + this.stakeholder.alias + '/' + topic.alias + '/' + category.alias));
|
||||
this.aliasPrefix + this.stakeholder.alias + '/' + topic.alias + '/' + category.alias);
|
||||
});
|
||||
items.push(topicItem);
|
||||
}
|
||||
|
@ -292,16 +328,22 @@ export class AppComponent extends SidebarBaseComponent implements OnInit {
|
|||
this.adminMenuItems.push(new MenuItem("indicators", "Indicators", "", "/admin/" + this.stakeholder.alias + '/indicators', false, [], [], {}, {name: 'bar_chart'}, null, "uk-visible@m"));
|
||||
if (this.stakeholder.defaultId) {
|
||||
this.adminMenuItems.push(new MenuItem("users", "Users", "", "/admin/" + this.stakeholder.alias + "/users", false, [], [], {}, {name: 'group'}, null, "uk-visible@m", "/admin/" + this.stakeholder.alias + "/users"));
|
||||
if(this.stakeholder.umbrella) {
|
||||
this.adminMenuItems.push(new MenuItem("umbrella", "Umbrella", "", "/admin/" + this.stakeholder.alias + "/umbrella", false, [], [], {}, {name: 'workspaces'}, null, "uk-visible@m", "/admin/" + this.stakeholder.alias + "/umbrella"));
|
||||
}
|
||||
if (this.isCurator()) {
|
||||
this.adminMenuItems.push(new MenuItem("admin-tools", "Pages & Entities", "", "/admin/" + this.stakeholder.alias + "/admin-tools/pages", false, [], [], {}, {name: 'description'}, null, "uk-visible@m", "/admin/" + this.stakeholder.alias + "/admin-tools"));
|
||||
}
|
||||
if(this.stakeholder.type == "organization") {
|
||||
this.adminMenuItems.push(new MenuItem("claim", "Link results", "", "/admin/" + this.stakeholder.alias + "/claims/link", false, [], [], {}, {name: 'link', ratio: 1}, null, "uk-visible@m", "/admin/" + this.stakeholder.alias + "/claims/link"));
|
||||
}
|
||||
}
|
||||
this.backItem = new MenuItem("back", "Manage profiles", "", "/admin", false, [], null, {}, {name: 'west'});
|
||||
this.sideBarItems = items;
|
||||
this.hasSidebar = this.hasSidebar && this.sideBarItems.length > 0;
|
||||
}
|
||||
|
||||
buildMenu() {
|
||||
buildMenu(stakeholder: Stakeholder = null) {
|
||||
this.menuItems = [];
|
||||
this.userMenuItems = [];
|
||||
if (this.user) {
|
||||
|
@ -316,57 +358,57 @@ export class AppComponent extends SidebarBaseComponent implements OnInit {
|
|||
this.userMenuItems.push(new MenuItem("monitorOptions", "Monitor options", "", "/admin/monitor/admin-tools/pages", false, [], [], {},null, null, "uk-visible@m"));
|
||||
}
|
||||
}
|
||||
if (this.stakeholder) {
|
||||
this.userMenuItems.push(new MenuItem("", "User information", "", "/" + this.stakeholder.alias + "/user-info", false, [], [], {}));
|
||||
if (this.hasPermission((this.view && this.isManager(this.stakeholder))?this.view:this.stakeholder.visibility)) {
|
||||
if (stakeholder) {
|
||||
this.userMenuItems.push(new MenuItem("", "User information", "", "/" + stakeholder.alias + "/user-info", false, [], [], {}));
|
||||
if (this.hasPermission((this.view && this.isManager(stakeholder))?this.view:stakeholder.visibility) && stakeholder.standalone) {
|
||||
this.menuItems.push(
|
||||
new MenuItem("dashboard", "Dashboard",
|
||||
"", "/" + this.stakeholder.alias, false, [], null, {}
|
||||
new MenuItem("dashboard", this.stakeholderUtils.entities.stakeholder,
|
||||
"", "/" + stakeholder.alias, false, [], null, {}
|
||||
, null, null, null, null)
|
||||
);
|
||||
this.menuItems.push(
|
||||
new MenuItem("search", "Browse Data", "", this.properties.searchLinkToResults,
|
||||
false, [], null, {resultbestaccessright: '"' + encodeURIComponent("Open Access") + '"'},
|
||||
new MenuItem("search", "Browse Data", "", '/' + stakeholder.alias + '/' + LinksResolver.default.searchLinkToResults,
|
||||
false, [], null, null,
|
||||
null, null, null, null)
|
||||
);
|
||||
this.resourcesService.setResources(this.menuItems, '', this.monitorLink, '_blank');
|
||||
this.menuItems.push(new MenuItem("support", "Support", this.monitorLink + '/support/', "", false, [], null, {}));
|
||||
if (this.stakeholder.type === "funder") {
|
||||
if (stakeholder.type === "funder") {
|
||||
this.menuItems.push(
|
||||
new MenuItem("develop", "Develop",
|
||||
"", "/" + this.stakeholder.alias + "/develop", false, [], null, {})
|
||||
"", "/" + stakeholder.alias + "/develop", false, [], null, {})
|
||||
);
|
||||
}
|
||||
}
|
||||
if (this.isManager(this.stakeholder)) {
|
||||
if (this.isManager(stakeholder)) {
|
||||
this.menuItems.push(
|
||||
new MenuItem("manage", "Manage",
|
||||
"", "/admin/" + this.stakeholder.alias, false, [], null, {}
|
||||
"", "/admin/" + stakeholder.alias, false, [], null, {}
|
||||
, null, null, "uk-visible@m", null)
|
||||
);
|
||||
}
|
||||
if (!this.hasAdminMenu && this.isFrontPage) {
|
||||
this.menuHeader = {
|
||||
route: './' + this.stakeholder.alias,
|
||||
route: './' + stakeholder.alias,
|
||||
url: null,
|
||||
title: this.stakeholder.name,
|
||||
logoUrl: StringUtils.getLogoUrl(this.stakeholder),
|
||||
logoSmallUrl: StringUtils.getLogoUrl(this.stakeholder),
|
||||
title: stakeholder.name,
|
||||
logoUrl: StringUtils.getLogoUrl(stakeholder),
|
||||
logoSmallUrl: StringUtils.getLogoUrl(stakeholder),
|
||||
logoInfo: '<div class="uk-margin-left uk-width-medium"><div class="uk-margin-remove uk-text-background uk-text-bold uk-text-small">Monitor Dashboard</div>' +
|
||||
'<div class="uk-h6 uk-text-truncate uk-margin-remove">' + this.stakeholder.name + '</div></div>',
|
||||
'<div class="uk-h6 uk-text-truncate uk-margin-remove">' + stakeholder.name + '</div></div>',
|
||||
position: 'left',
|
||||
badge: true,
|
||||
menuPosition: "center"
|
||||
};
|
||||
} else {
|
||||
this.menuHeader = {
|
||||
route: './' + this.stakeholder.alias,
|
||||
route: './' + stakeholder.alias,
|
||||
url: null,
|
||||
title: this.stakeholder.name,
|
||||
logoUrl: StringUtils.getLogoUrl(this.stakeholder),
|
||||
logoSmallUrl: StringUtils.getLogoUrl(this.stakeholder),
|
||||
title: stakeholder.name,
|
||||
logoUrl: StringUtils.getLogoUrl(stakeholder),
|
||||
logoSmallUrl: StringUtils.getLogoUrl(stakeholder),
|
||||
logoInfo: '<div class="uk-margin-left uk-width-medium"><div class="uk-margin-remove uk-text-background uk-text-bold uk-text-small">Monitor Admin Dashboard</div>' +
|
||||
'<div class="uk-h6 uk-text-truncate uk-margin-remove">' + this.stakeholder.name + '</div></div>',
|
||||
'<div class="uk-h6 uk-text-truncate uk-margin-remove">' + stakeholder.name + '</div></div>',
|
||||
position: 'left',
|
||||
badge: true,
|
||||
menuPosition: "center"
|
||||
|
|
|
@ -27,9 +27,13 @@ import {
|
|||
import {LoginGuard} from "./openaireLibrary/login/loginGuard.guard";
|
||||
import {IconsModule} from "./openaireLibrary/utils/icons/icons.module";
|
||||
import {IconsService} from "./openaireLibrary/utils/icons/icons.service";
|
||||
import {incognito} from "./openaireLibrary/utils/icons/icons";
|
||||
import {incognito, link} from "./openaireLibrary/utils/icons/icons";
|
||||
import {AdminDashboardGuard} from "./openaireLibrary/monitor-admin/utils/adminDashboard.guard";
|
||||
import {CacheIndicatorsModule} from "./openaireLibrary/monitor-admin/utils/cache-indicators/cache-indicators.module";
|
||||
import {CustomRouteReuseStrategy} from "./openaireLibrary/shared/custom-route-reuse-strategy";
|
||||
import {RouteReuseStrategy} from "@angular/router";
|
||||
import {LogoUrlPipeModule} from './openaireLibrary/utils/pipes/logoUrlPipe.module';
|
||||
import {BreadcrumbsModule} from './openaireLibrary/utils/breadcrumbs/breadcrumbs.module';
|
||||
|
||||
@NgModule({
|
||||
|
||||
|
@ -45,11 +49,14 @@ import {CacheIndicatorsModule} from "./openaireLibrary/monitor-admin/utils/cache
|
|||
CookieLawModule,
|
||||
BrowserModule,
|
||||
AppRoutingModule,
|
||||
SideBarModule, Schema2jsonldModule, RoleVerificationModule, LoadingModule, NotificationsSidebarModule, IconsModule, CacheIndicatorsModule
|
||||
SideBarModule, Schema2jsonldModule, RoleVerificationModule, LoadingModule, NotificationsSidebarModule, IconsModule, CacheIndicatorsModule,
|
||||
LogoUrlPipeModule,
|
||||
BreadcrumbsModule
|
||||
],
|
||||
declarations: [AppComponent, OpenaireErrorPageComponent],
|
||||
exports: [AppComponent],
|
||||
providers: [
|
||||
{provide: RouteReuseStrategy, useClass: CustomRouteReuseStrategy},
|
||||
{provide: APP_ID, useValue: 'monitor-dashboard'},
|
||||
AdminLoginGuard, AdminDashboardGuard, LoginGuard,
|
||||
{
|
||||
|
@ -70,6 +77,6 @@ import {CacheIndicatorsModule} from "./openaireLibrary/monitor-admin/utils/cache
|
|||
//
|
||||
export class AppModule {
|
||||
constructor(private iconsService: IconsService) {
|
||||
this.iconsService.registerIcons([incognito])
|
||||
this.iconsService.registerIcons([incognito, link])
|
||||
}
|
||||
}
|
||||
|
|
|
@ -0,0 +1,125 @@
|
|||
<ng-container *ngIf="showLoading">
|
||||
<div class="uk-container uk-container-large uk-section">
|
||||
<loading></loading>
|
||||
</div>
|
||||
</ng-container>
|
||||
<div *ngIf="!showLoading" class="uk-container uk-container-large uk-section">
|
||||
<div class="uk-flex uk-flex-middle uk-flex-between">
|
||||
<div class="uk-visible@m uk-width-small">
|
||||
</div>
|
||||
<div search-input *ngIf="keywordControl" [searchControl]="keywordControl" [searchInputClass]="'flat'" [iconPosition]="'left'"
|
||||
placeholder="Search for {{typeAsLabel.toLowerCase()}}s" [disabled]="stakeholders.length === 0" class="uk-width-xlarge@l uk-width-large@m uk-width-1-1">
|
||||
</div>
|
||||
<div *ngIf="!isMobile">
|
||||
<div [class.uk-disabled]="stakeholders.length === 0" class="uk-flex uk-flex-middle uk-flex-right uk-width-small">
|
||||
<button (click)="gridView = true" [class.uk-button-primary]="gridView" [disabled]="stakeholders.length === 0"
|
||||
class="uk-icon-button uk-button-default uk-border-rounded uk-icon-button-small">
|
||||
<icon name="apps" [flex]="true" type="round" [ratio]="1.2"></icon>
|
||||
</button>
|
||||
<button (click)="gridView = false" [class.uk-button-primary]="!gridView" [disabled]="stakeholders.length === 0"
|
||||
class="uk-icon-button uk-button-default uk-border-rounded uk-icon-button-small uk-margin-small-left">
|
||||
<icon name="view_list" [flex]="true" type="round" [ratio]="1.2"></icon>
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="uk-flex uk-flex-middle uk-flex-between uk-margin-large-top">
|
||||
<div class="uk-flex uk-flex-middle">
|
||||
<div *ngIf="sortOptions?.length > 0" class="uk-width-small uk-margin-medium-right">
|
||||
<div input
|
||||
type="select" placeholder="Sort by" inputClass="border-bottom"
|
||||
[options]="sortOptions" [(value)]="sortBy" (valueChange)="sortByChanged()">
|
||||
</div>
|
||||
</div>
|
||||
<div class="uk-width-xsmall">
|
||||
<div input
|
||||
type="select" placeholder="Results per page" inputClass="border-bottom"
|
||||
[options]="pageOptions" [(value)]="pageSize" (valueChange)="sizeChanged($event)">
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div>
|
||||
<paging-no-load *ngIf="filteredStakeholders.length > pageSize"
|
||||
(pageChange)="updateCurrentPage($event)"
|
||||
[currentPage]="currentPage" [size]="pageSize"
|
||||
[totalResults]="filteredStakeholders.length">
|
||||
</paging-no-load>
|
||||
</div>
|
||||
</div>
|
||||
<div class="uk-margin-large-top" id="target">
|
||||
<div *ngIf="!filteredStakeholders || filteredStakeholders?.length == 0" class="uk-flex uk-flex-center">
|
||||
<div class="uk-alert uk-alert-primary uk-text-center uk-width-2-3@m uk-width-1-1">
|
||||
No {{entities.stakeholders}} available
|
||||
</div>
|
||||
</div>
|
||||
<!-- STAKEHOLDERS -->
|
||||
<!-- Grid view -->
|
||||
<ng-container *ngIf="gridView || isMobile; else elseBlock">
|
||||
<div class="uk-grid" class="uk-child-width-1-4@l uk-child-width-1-3@m uk-child-width-1-1"
|
||||
uk-grid uk-height-match="target: .top-info;">
|
||||
<div *ngFor="let item of filteredStakeholders.slice((currentPage-1)*pageSize, currentPage*pageSize)">
|
||||
<a [routerLink]="'./' + item.alias" class="uk-link-reset" [class.uk-disabled]="!hasPermission(item)">
|
||||
<div class="uk-card uk-card-default uk-card-hover" [class.uk-disabled]="!hasPermission(item)">
|
||||
<div *ngIf="item.visibility" [ngClass]="isMobile?'uk-flex uk-flex-middle uk-flex-right uk-margin-small-right uk-margin-small-top':'uk-position-top-right uk-margin-small-top uk-margin-small-right uk-flex uk-flex-column uk-flex-middle'">
|
||||
<icon [name]="visibilityIcon.get(item.visibility)" [ratio]="isMobile?0.8:1" [flex]="true"></icon>
|
||||
</div>
|
||||
<div class="uk-padding-small top-info">
|
||||
<!-- logo -->
|
||||
<div class="uk-flex uk-flex-center uk-flex-middle uk-height-xsmall">
|
||||
<img *ngIf="item.logoUrl; else elseBlock" [src]="item | logoUrl" [alt]="item.name + ' logo'" class="uk-height-max-xsmall uk-blend-multiply" style="max-width: 180px;">
|
||||
<ng-template #elseBlock>
|
||||
<img src="assets/common-assets/placeholder.png" alt="OpenAIRE placeholder logo" class="uk-height-max-xsmall uk-blend-multiply" style="max-width: 180px;">
|
||||
</ng-template>
|
||||
</div>
|
||||
<!-- name -->
|
||||
<div class="uk-text-center uk-text-bold uk-margin-top multi-line-ellipsis lines-2">
|
||||
<div [title]="item.name">
|
||||
{{item.name}}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
</ng-container>
|
||||
<!-- List view -->
|
||||
<ng-template #elseBlock>
|
||||
<div>
|
||||
<table class="uk-table uk-table-striped uk-table-middle uk-table-responsive uk-table-hover">
|
||||
<thead>
|
||||
<tr>
|
||||
<th>Logo</th>
|
||||
<th>Name</th>
|
||||
<th>Status</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr *ngFor="let item of filteredStakeholders.slice((currentPage-1)*pageSize, currentPage*pageSize)"
|
||||
class="clickable" routerLink="./{{item.alias}}" [class.uk-disabled]="!hasPermission(item)">
|
||||
<td>
|
||||
<div class="uk-flex uk-flex-middle uk-height-xsmall uk-margin-left">
|
||||
<img *ngIf="item.logoUrl; else elseBlock" [src]="item | logoUrl" [alt]="item.name + ' logo'" class="uk-height-max-xsmall uk-blend-multiply" style="max-width: 140px;">
|
||||
<ng-template #elseBlock>
|
||||
<img src="assets/common-assets/placeholder.png" alt="OpenAIRE placeholder logo" class="uk-height-max-xsmall uk-blend-multiply" style="max-width: 140px;">
|
||||
</ng-template>
|
||||
</div>
|
||||
</td>
|
||||
<td>
|
||||
<div class="uk-text-truncate uk-text-capitalize uk-text-italic uk-text-small uk-text-bold" [title]="item.name">
|
||||
{{item.name}}
|
||||
</div>
|
||||
</td>
|
||||
<td>
|
||||
<div class="uk-flex uk-flex-middle uk-text-xsmall">
|
||||
<icon [name]="visibilityIcon.get(item.visibility)" [ratio]="0.8" [flex]="true"></icon>
|
||||
<span class="uk-margin-small-left">{{item.visibility}}</span>
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
</ng-template>
|
||||
</div>
|
||||
</div>
|
|
@ -0,0 +1,19 @@
|
|||
@import (less) "~src/assets/openaire-theme/less/color.less";
|
||||
|
||||
.uk-button-default {
|
||||
box-shadow: none;
|
||||
border: 1px solid @gray-300;
|
||||
|
||||
&:hover {
|
||||
border: 1px solid @grey-color;
|
||||
}
|
||||
}
|
||||
|
||||
.uk-button-primary {
|
||||
box-shadow: none;
|
||||
border: 1px solid transparent;
|
||||
|
||||
&:hover {
|
||||
border: 1px solid transparent;
|
||||
}
|
||||
}
|
|
@ -0,0 +1,93 @@
|
|||
import {ChangeDetectorRef, Component} from "@angular/core";
|
||||
import {ActivatedRoute, Router} from "@angular/router";
|
||||
import {LayoutService} from "../openaireLibrary/dashboard/sharedComponents/sidebar/layout.service";
|
||||
import {FormBuilder} from "@angular/forms";
|
||||
import {
|
||||
BrowseStakeholderBaseComponent
|
||||
} from "../openaireLibrary/monitor/browse-stakeholder/browse-stakeholder-base.component";
|
||||
import {StakeholderInfo, Visibility} from "../openaireLibrary/monitor/entities/stakeholder";
|
||||
import {StakeholderService} from "../openaireLibrary/monitor/services/stakeholder.service";
|
||||
import {UserManagementService} from "../openaireLibrary/services/user-management.service";
|
||||
import {Session, User} from "../openaireLibrary/login/utils/helper.class";
|
||||
import {StakeholderUtils} from "../openaireLibrary/monitor-admin/utils/indicator-utils";
|
||||
import {Title} from "@angular/platform-browser";
|
||||
|
||||
@Component({
|
||||
selector: 'browse-stakeholder',
|
||||
templateUrl: 'browse-stakeholders.component.html',
|
||||
styleUrls: ['browse-stakeholders.component.less']
|
||||
})
|
||||
export class BrowseStakeholdersComponent extends BrowseStakeholderBaseComponent<StakeholderInfo> {
|
||||
user: User;
|
||||
stakeholderUtils: StakeholderUtils = new StakeholderUtils();
|
||||
|
||||
visibilityIcon: Map<Visibility, string> = new Map<Visibility, string>([
|
||||
["PUBLIC", 'earth'],
|
||||
["PRIVATE", 'incognito'],
|
||||
["RESTRICTED", 'restricted']
|
||||
]);
|
||||
|
||||
constructor(protected _route: ActivatedRoute,
|
||||
protected _router: Router,
|
||||
protected _title: Title,
|
||||
protected layoutService: LayoutService,
|
||||
protected cdr: ChangeDetectorRef,
|
||||
protected fb: FormBuilder,
|
||||
private stakeholderService: StakeholderService,
|
||||
private userManagementService: UserManagementService) {
|
||||
super();
|
||||
}
|
||||
|
||||
ngOnInit() {
|
||||
this.stakeholderType = this._route.snapshot.params.type;
|
||||
super.ngOnInit();
|
||||
this.subscriptions.push(this.userManagementService.getUserInfo().subscribe(user => {
|
||||
if (user) {
|
||||
this.user = user;
|
||||
}
|
||||
}));
|
||||
this.subscriptions.push(this.stakeholderService.getStakeholderAsObservable().subscribe(stakeholder => {
|
||||
this.subscriptions.push(this._route.params.subscribe(params => {
|
||||
if(stakeholder?.umbrella) {
|
||||
this.stakeholderType = params['type'];
|
||||
this.reset();
|
||||
this.title = "Monitor Dashboard | " + stakeholder.name + " | " + "Browse " + this.entities[this.stakeholderType + 's'];
|
||||
this.description = "Monitor Dashboard | " + stakeholder.name + " | " + "Browse " + this.entities[this.stakeholderType + 's'];
|
||||
this.setMetadata();
|
||||
if (stakeholder.umbrella.children[this._route.snapshot.params['type']] == null) {
|
||||
this.navigateToError();
|
||||
}
|
||||
this.stakeholders = stakeholder.umbrella.children[this._route.snapshot.params['type']];
|
||||
this.stakeholders.forEach(stakeholder => {
|
||||
stakeholder.isManager = this.isManager(stakeholder);
|
||||
stakeholder.isMember = this.isMember(stakeholder)
|
||||
});
|
||||
this.filteredStakeholders = this.stakeholders;
|
||||
this.showLoading = false;
|
||||
}
|
||||
}));
|
||||
}));
|
||||
}
|
||||
|
||||
reset() {
|
||||
this.sortBy = 'alphAsc';
|
||||
this.sortByChanged();
|
||||
this.sizeChanged(10);
|
||||
this.keywordControl.setValue(null);
|
||||
this.gridView = true;
|
||||
}
|
||||
|
||||
private isManager(stakeholder) {
|
||||
return Session.isPortalAdministrator(this.user) || Session.isMonitorCurator(this.user)
|
||||
|| Session.isCommunityCurator(this.user) || Session.isManager(stakeholder.type, stakeholder.alias, this.user);
|
||||
}
|
||||
|
||||
private isMember(stakeholder) {
|
||||
return this.isManager(stakeholder) || Session.isSubscribedTo(stakeholder.type, stakeholder.alias, this.user);
|
||||
}
|
||||
|
||||
hasPermission(item: StakeholderInfo) {
|
||||
return item.visibility === "PUBLIC" || (item.visibility === "RESTRICTED" && (item.isManager || item.isMember)) ||
|
||||
(item.visibility === "PRIVATE" && item.isManager);
|
||||
}
|
||||
}
|
|
@ -0,0 +1,31 @@
|
|||
import {NgModule} from "@angular/core";
|
||||
import {CommonModule} from "@angular/common";
|
||||
import {BrowseStakeholdersComponent} from "./browse-stakeholders.component";
|
||||
import {RouterModule, Routes} from "@angular/router";
|
||||
import {PreviousRouteRecorder} from "../openaireLibrary/utils/piwik/previousRouteRecorder.guard";
|
||||
import {LoadingModule} from "../openaireLibrary/utils/loading/loading.module";
|
||||
import {SearchInputModule} from "../openaireLibrary/sharedComponents/search-input/search-input.module";
|
||||
import {InputModule} from "../openaireLibrary/sharedComponents/input/input.module";
|
||||
import {PagingModule} from "../openaireLibrary/utils/paging.module";
|
||||
import {IconsModule} from "../openaireLibrary/utils/icons/icons.module";
|
||||
import {LogoUrlPipeModule} from "../openaireLibrary/utils/pipes/logoUrlPipe.module";
|
||||
import {Monitor} from "../monitor/monitor";
|
||||
import {IconsService} from "../openaireLibrary/utils/icons/icons.service";
|
||||
import {earth, incognito, restricted} from "../openaireLibrary/utils/icons/icons";
|
||||
|
||||
let routes: Routes = new Monitor(':child').routes;
|
||||
routes.splice(0, 0, {path: '', component: BrowseStakeholdersComponent, canDeactivate: [PreviousRouteRecorder], data: {hasSidebar: false}});
|
||||
|
||||
@NgModule({
|
||||
imports: [
|
||||
CommonModule, LoadingModule, SearchInputModule, InputModule, PagingModule, IconsModule, LogoUrlPipeModule,
|
||||
RouterModule.forChild(routes)
|
||||
],
|
||||
declarations: [BrowseStakeholdersComponent],
|
||||
exports: [BrowseStakeholdersComponent]
|
||||
})
|
||||
export class BrowseStakeholdersModule {
|
||||
constructor(private iconsService: IconsService) {
|
||||
this.iconsService.registerIcons([earth, incognito, restricted]);
|
||||
}
|
||||
}
|
|
@ -0,0 +1,18 @@
|
|||
import {NgModule} from '@angular/core';
|
||||
import {RouterModule} from '@angular/router';
|
||||
import {OpenaireClaimsAdminComponent} from './claimsAdmin.component';
|
||||
import {PreviousRouteRecorder} from '../../openaireLibrary/utils/piwik/previousRouteRecorder.guard';
|
||||
import {properties} from "../../../environments/environment";
|
||||
|
||||
|
||||
@NgModule({
|
||||
imports: [
|
||||
RouterModule.forChild([
|
||||
{ path: '', component: OpenaireClaimsAdminComponent, data: {
|
||||
redirect: properties.errorLink
|
||||
}, canDeactivate: [PreviousRouteRecorder]},
|
||||
|
||||
])
|
||||
]
|
||||
})
|
||||
export class ClaimsAdminRoutingModule { }
|
|
@ -0,0 +1,46 @@
|
|||
import {Component, OnInit} from '@angular/core';
|
||||
import {properties} from "../../../environments/environment";
|
||||
import {ActivatedRoute} from "@angular/router";
|
||||
import {StakeholderService} from "../../openaireLibrary/monitor/services/stakeholder.service";
|
||||
import {Title} from "@angular/platform-browser";
|
||||
|
||||
@Component({
|
||||
selector: 'openaire-claims-admin',
|
||||
template: `
|
||||
<div page-content>
|
||||
<div header>
|
||||
<ul class="uk-tab uk-margin-remove-bottom uk-margin-medium-top">
|
||||
<li><a routerLink="../../users/manager">Managers</a></li>
|
||||
<li ><a routerLink="../../users/member">Members</a></li>
|
||||
<li class="uk-active"><a >Links</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
<div inner>
|
||||
|
||||
<claims-admin *ngIf="claimsInfoURL" [claimsInfoURL]="claimsInfoURL" fetchBy="Organization"
|
||||
[fetchId]="fetchId" [isConnect]="true">
|
||||
</claims-admin>
|
||||
</div>
|
||||
</div>
|
||||
`,
|
||||
})
|
||||
export class OpenaireClaimsAdminComponent implements OnInit {
|
||||
claimsInfoURL: string;
|
||||
userInfoURL: string;
|
||||
subscriptions = []
|
||||
fetchId = null
|
||||
constructor( private route: ActivatedRoute, private stakeholderService: StakeholderService, private title: Title) {
|
||||
}
|
||||
|
||||
public ngOnInit() {
|
||||
this.claimsInfoURL = properties.claimsInformationLink;
|
||||
if(this.route.snapshot.data.param === 'stakeholder') {
|
||||
this.subscriptions.push(this.stakeholderService.getStakeholderAsObservable().subscribe(stakeholder => {
|
||||
if(stakeholder) {
|
||||
this.fetchId = stakeholder.index_id;
|
||||
this.title.setTitle(stakeholder.name + ' | Manage claims');
|
||||
}
|
||||
}));
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,25 @@
|
|||
import { NgModule } from '@angular/core';
|
||||
|
||||
import { SharedModule } from '../../openaireLibrary/shared/shared.module';
|
||||
import { OpenaireClaimsAdminComponent } from './claimsAdmin.component';
|
||||
import { ClaimsAdminRoutingModule } from './claimsAdmin-routing.module';
|
||||
import{ClaimsAdminModule } from '../../openaireLibrary/claims/claimsAdmin/claimsAdmin.module';
|
||||
import{ ClaimsCuratorGuard} from '../../openaireLibrary/login/claimsCuratorGuard.guard';
|
||||
import {PreviousRouteRecorder} from '../../openaireLibrary/utils/piwik/previousRouteRecorder.guard';
|
||||
import {IsRouteEnabled} from '../../openaireLibrary/error/isRouteEnabled.guard';
|
||||
import {PageContentModule} from "../../openaireLibrary/dashboard/sharedComponents/page-content/page-content.module";
|
||||
|
||||
|
||||
@NgModule({
|
||||
imports: [
|
||||
SharedModule,
|
||||
ClaimsAdminRoutingModule,
|
||||
ClaimsAdminModule,
|
||||
PageContentModule
|
||||
],
|
||||
providers:[ClaimsCuratorGuard, PreviousRouteRecorder,IsRouteEnabled],
|
||||
declarations: [
|
||||
OpenaireClaimsAdminComponent
|
||||
]
|
||||
})
|
||||
export class LibClaimsAdminModule { }
|
|
@ -0,0 +1,19 @@
|
|||
import {NgModule} from '@angular/core';
|
||||
import {RouterModule} from '@angular/router';
|
||||
|
||||
import {OpenaireDirectLinkingComponent} from './directLinking.component';
|
||||
import {PreviousRouteRecorder} from '../../openaireLibrary/utils/piwik/previousRouteRecorder.guard';
|
||||
import {properties} from "../../../environments/environment";
|
||||
|
||||
|
||||
@NgModule({
|
||||
imports: [
|
||||
RouterModule.forChild([
|
||||
{ path: '', component: OpenaireDirectLinkingComponent, data: {
|
||||
redirect: properties.errorLink, community : 'openaire'
|
||||
}, canDeactivate: [PreviousRouteRecorder]},
|
||||
|
||||
])
|
||||
]
|
||||
})
|
||||
export class DirectLinkingRoutingModule { }
|
|
@ -0,0 +1,44 @@
|
|||
import {Component, Input} from '@angular/core';
|
||||
import {ActivatedRoute} from "@angular/router";
|
||||
import {StakeholderService} from "../../openaireLibrary/monitor/services/stakeholder.service";
|
||||
import {Title} from "@angular/platform-browser";
|
||||
import {MonitorClaimsProperties} from "../monitorClaims.properties";
|
||||
|
||||
@Component({
|
||||
selector: 'openaire-directLinking',
|
||||
template: `
|
||||
<div page-content>
|
||||
<div header>
|
||||
<!-- <users-tabs tab="claims"></users-tabs>-->
|
||||
</div>
|
||||
<div inner>
|
||||
<directLinking *ngIf="claimsProperties" [organizationClaim]="true" [communityId]="alias" [id]="id" [claimsProperties]="claimsProperties" ></directLinking>
|
||||
</div>
|
||||
</div>
|
||||
`
|
||||
})
|
||||
export class OpenaireDirectLinkingComponent {
|
||||
id;
|
||||
alias;
|
||||
subscriptions = [];
|
||||
claimsProperties;
|
||||
|
||||
|
||||
constructor(private route: ActivatedRoute, private stakeholderService: StakeholderService, private title: Title) {
|
||||
this.claimsProperties = new MonitorClaimsProperties();
|
||||
}
|
||||
|
||||
public ngOnInit() {
|
||||
if (this.route.snapshot.data.param === 'stakeholder') {
|
||||
this.subscriptions.push(this.stakeholderService.getStakeholderAsObservable().subscribe(stakeholder => {
|
||||
if (stakeholder) {
|
||||
this.alias = stakeholder.alias;
|
||||
this.id = stakeholder.index_id;
|
||||
this.title.setTitle(stakeholder.name + ' | Claim Organization');
|
||||
}
|
||||
}));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -0,0 +1,21 @@
|
|||
import { NgModule } from '@angular/core';
|
||||
|
||||
import { SharedModule } from '../../openaireLibrary/shared/shared.module';
|
||||
import { OpenaireDirectLinkingComponent } from './directLinking.component';
|
||||
import{ DirectLinkingModule} from '../../openaireLibrary/claims/directLinking/directLinking.module';
|
||||
import {DirectLinkingRoutingModule} from './directLinking-routing.module';
|
||||
import {LoginGuard} from '../../openaireLibrary/login/loginGuard.guard';
|
||||
import {PreviousRouteRecorder} from '../../openaireLibrary/utils/piwik/previousRouteRecorder.guard';
|
||||
import {IsRouteEnabled} from '../../openaireLibrary/error/isRouteEnabled.guard';
|
||||
import {PageContentModule} from "../../openaireLibrary/dashboard/sharedComponents/page-content/page-content.module";
|
||||
|
||||
@NgModule({
|
||||
imports: [
|
||||
SharedModule, DirectLinkingModule, DirectLinkingRoutingModule, PageContentModule
|
||||
],
|
||||
providers:[LoginGuard, PreviousRouteRecorder, IsRouteEnabled],
|
||||
declarations: [
|
||||
OpenaireDirectLinkingComponent
|
||||
], exports:[OpenaireDirectLinkingComponent]
|
||||
})
|
||||
export class LibDirectLinkingModule { }
|
|
@ -0,0 +1,14 @@
|
|||
import {ClaimsProperties} from "../openaireLibrary/claims/claim-utils/claims.properties";
|
||||
|
||||
export class MonitorClaimsProperties extends ClaimsProperties{
|
||||
constructor() {
|
||||
super();
|
||||
this.ALLOW_ORGANIZATION_LINKING = true;
|
||||
this.INLINE_ENTITY.show = false;
|
||||
this.INLINE_ENTITY.guideText = "";
|
||||
this.BASKET.target_title = "Link to";
|
||||
this.METADATA_PREVIEW.edit_target_icon = "west";
|
||||
this.METADATA_PREVIEW.edit_target_title = "Go to search for results"
|
||||
|
||||
}
|
||||
}
|
|
@ -1,89 +1,22 @@
|
|||
import {NgModule} from '@angular/core';
|
||||
import {RouterModule} from '@angular/router';
|
||||
import {RouterModule, Routes} from '@angular/router';
|
||||
import {PreviousRouteRecorder} from '../openaireLibrary/utils/piwik/previousRouteRecorder.guard';
|
||||
import {MonitorComponent} from "./monitor.component";
|
||||
import {OpenaireErrorPageComponent} from "../error/errorPage.component";
|
||||
import {Monitor} from "./monitor";
|
||||
|
||||
let routes: Routes = new Monitor(':stakeholder').routes;
|
||||
routes.splice(0, 0, {path: '', redirectTo: '/admin', pathMatch: 'full'});
|
||||
routes.splice(2, 0, {
|
||||
path: ':stakeholder/browse/:type',
|
||||
loadChildren: () => import('../browse-stakeholders/browse-stakeholders.module').then(m => m.BrowseStakeholdersModule),
|
||||
canDeactivate: [PreviousRouteRecorder],
|
||||
data: {
|
||||
activeMenuItem: "dashboard"
|
||||
}
|
||||
});
|
||||
|
||||
@NgModule({
|
||||
imports: [
|
||||
RouterModule.forChild([
|
||||
{path: '', redirectTo: '/admin', pathMatch: 'full'},
|
||||
{
|
||||
path: ':stakeholder',
|
||||
component: MonitorComponent,
|
||||
canDeactivate: [PreviousRouteRecorder],
|
||||
data: {
|
||||
activeMenuItem: "dashboard"
|
||||
}
|
||||
},
|
||||
{
|
||||
path: ':stakeholder/indicators',
|
||||
loadChildren: () => import('../openaireLibrary/monitor/indicators/indicators.module').then(m => m.IndicatorsModule),
|
||||
canDeactivate: [PreviousRouteRecorder],
|
||||
data: {
|
||||
hasSidebar: false
|
||||
}
|
||||
},
|
||||
{
|
||||
path: ':stakeholder/develop',
|
||||
loadChildren: () => import('../develop/develop.module').then(m => m.DevelopModule),
|
||||
canDeactivate: [PreviousRouteRecorder],
|
||||
data: {
|
||||
hasSidebar: false
|
||||
}
|
||||
},
|
||||
{
|
||||
path: ':stakeholder/methodology',
|
||||
loadChildren: () => import('../openaireLibrary/monitor/methodology/methodology.module').then(m => m.MethodologyModule),
|
||||
canDeactivate: [PreviousRouteRecorder],
|
||||
data: {
|
||||
hasSidebar: false
|
||||
}
|
||||
},
|
||||
{
|
||||
path: ':stakeholder/search',
|
||||
loadChildren: () => import('../search/search.module').then(m => m.SearchModule),
|
||||
canDeactivate: [PreviousRouteRecorder],
|
||||
data: {
|
||||
hasSidebar: false,
|
||||
activeMenuItem: "search"
|
||||
}
|
||||
},
|
||||
{
|
||||
path: ':stakeholder/error',
|
||||
component: OpenaireErrorPageComponent,
|
||||
data: {hasSidebar: false}
|
||||
},
|
||||
{
|
||||
path: ':stakeholder/user-info',
|
||||
loadChildren: () => import('../login/libUser.module').then(m => m.LibUserModule),
|
||||
data: {hasSidebar: false}
|
||||
},
|
||||
{
|
||||
path: ':stakeholder/:topic',
|
||||
component: MonitorComponent,
|
||||
canDeactivate: [PreviousRouteRecorder],
|
||||
data: {
|
||||
activeMenuItem: "dashboard"
|
||||
}
|
||||
},
|
||||
{
|
||||
path: ':stakeholder/:topic/:category',
|
||||
component: MonitorComponent,
|
||||
canDeactivate: [PreviousRouteRecorder],
|
||||
data: {
|
||||
activeMenuItem: "dashboard"
|
||||
}
|
||||
},
|
||||
{
|
||||
path: ':stakeholder/:topic/:category/:subCategory',
|
||||
component: MonitorComponent,
|
||||
canDeactivate: [PreviousRouteRecorder],
|
||||
data: {
|
||||
activeMenuItem: "dashboard"
|
||||
}
|
||||
}
|
||||
])
|
||||
RouterModule.forChild(routes)
|
||||
]
|
||||
})
|
||||
export class MonitorRoutingModule {
|
||||
|
|
|
@ -4,7 +4,7 @@
|
|||
<div class="uk-slider-container" style="height: 40px">
|
||||
<ul #list class="uk-slider-items uk-grid uk-grid-small uk-margin-small-right uk-flex-nowrap">
|
||||
<li *ngIf="periodFilter.selectedFromAndToValues.length > 0">
|
||||
<span class="uk-label uk-label-primary uk-flex uk-flex-middle">
|
||||
<span class="uk-label uk-label-small uk-label-primary uk-flex uk-flex-middle">
|
||||
<span
|
||||
class="uk-margin-small-right uk-width-expand uk-text-truncate">{{periodFilter.selectedFromAndToValues}}</span>
|
||||
<button [class.uk-disabled]="loading" (click)="clearPeriodFilter()" class="uk-close uk-icon"
|
||||
|
@ -18,7 +18,7 @@
|
|||
<ng-container *ngFor="let value of filter.values; let i = index;">
|
||||
<ng-container *ngIf="value.selected">
|
||||
<li>
|
||||
<span class="uk-label uk-label-primary uk-flex uk-flex-middle">
|
||||
<span class="uk-label uk-label-small uk-label-primary uk-flex uk-flex-middle">
|
||||
<span class="uk-margin-small-right uk-width-expand uk-text-truncate">{{value.name}}</span>
|
||||
<button [class.uk-disabled]="loading" (click)="clearFilterValue(filter, value)"
|
||||
class="uk-close uk-icon" [disabled]="loading">
|
||||
|
@ -104,12 +104,11 @@
|
|||
<div class="uk-card uk-card-default uk-padding-small number-card uk-position-relative"
|
||||
[class.semiFiltered]="indicator.indicatorPaths[0].filtersApplied < countSelectedFilters()">
|
||||
<div *ngIf="!indicator.overlay">
|
||||
<div
|
||||
class="uk-text-small uk-text-truncate uk-margin-xsmall-bottom uk-margin-right">{{indicator.name}}</div>
|
||||
<div class="uk-text-small uk-text-truncate uk-margin-xsmall-bottom uk-margin-right">{{indicator.name}}</div>
|
||||
<div class="number uk-text-small uk-text-bold">
|
||||
<span *ngIf="numberResults.get(i + '-' + j)"
|
||||
[innerHTML]="(indicator.indicatorPaths[0].format == 'NUMBER'?(numberResults.get(i + '-' + j) | numberRound: 2:1:stakeholder.locale):(numberResults.get(i + '-' + j) | numberPercentage: stakeholder.locale))"></span>
|
||||
<span *ngIf="!numberResults.get(i + '-' + j)">--</span>
|
||||
<span *ngIf="numberResults.get(i + '-' + j + '-' + 0)"
|
||||
[innerHTML]="(indicator.indicatorPaths[0].format == 'NUMBER'?(numberResults.get(i + '-' + j + '-' + 0) | numberRound: 2:1:stakeholder.locale):(numberResults.get(i + '-' + j + '-' + 0) | numberPercentage: stakeholder.locale))"></span>
|
||||
<span *ngIf="!numberResults.get(i + '-' + j + '-' + 0)">--</span>
|
||||
</div>
|
||||
<div *ngIf="indicator.description || indicator.additionalDescription"
|
||||
class="uk-position-top-right uk-text-center uk-margin-small-top uk-margin-small-right uk-visible@m">
|
||||
|
@ -158,9 +157,9 @@
|
|||
<div
|
||||
class="uk-text-xsmall uk-text-truncate uk-margin-xsmall-bottom uk-margin-right">{{indicator.name}}</div>
|
||||
<div class="number uk-text-small uk-text-bold">
|
||||
<span *ngIf="numberResults.get(i + '-' + j)"
|
||||
[innerHTML]="(indicator.indicatorPaths[0].format == 'NUMBER'?(numberResults.get(i + '-' + j) | numberRound: 2:1:stakeholder.locale):(numberResults.get(i + '-' + j) | numberPercentage: stakeholder.locale))"></span>
|
||||
<span *ngIf="!numberResults.get(i + '-' + j)">--</span>
|
||||
<span *ngIf="numberResults.get(i + '-' + j + '-' + 0)"
|
||||
[innerHTML]="(indicator.indicatorPaths[0].format == 'NUMBER'?(numberResults.get(i + '-' + j + '-' + 0) | numberRound: 2:1:stakeholder.locale):(numberResults.get(i + '-' + j + '-' + 0) | numberPercentage: stakeholder.locale))"></span>
|
||||
<span *ngIf="!numberResults.get(i + '-' + j + '-' + 0)">--</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
@ -178,39 +177,35 @@
|
|||
<h5 *ngIf="chart.title && !isMobile" class="uk-width-1-1 uk-margin-bottom">{{chart.title}}</h5>
|
||||
<h6 *ngIf="chart.title && isMobile" class="uk-width-1-1">{{chart.title}}</h6>
|
||||
<ng-template ngFor [ngForOf]="chart.indicators" let-indicator let-j="index">
|
||||
<div *ngIf="hasPermission(indicator.visibility) && chartsActiveType.get(i + '-' + j)"
|
||||
<div *ngIf="hasPermission(indicator.visibility)"
|
||||
[ngClass]="getChartClassBySize(indicator.width)">
|
||||
<div class="uk-card uk-card-default uk-position-relative"
|
||||
[class.semiFiltered]="chartsActiveType.get(i + '-' + j).filtersApplied < countSelectedFilters()">
|
||||
<div class="uk-card-body uk-text-center uk-margin-small-bottom">
|
||||
[class.semiFiltered]="getActiveIndicatorPath(indicator).filtersApplied < countSelectedFilters()">
|
||||
<div class="uk-card-body uk-margin-small-bottom">
|
||||
<h6 class="uk-margin-bottom chartTitle uk-flex uk-flex-bottom">
|
||||
{{indicator.name + " "}}
|
||||
</h6>
|
||||
<div *ngIf="indicator.indicatorPaths.length > 1" class="uk-button-group">
|
||||
<button *ngFor="let indicatorPath of indicator.indicatorPaths;"
|
||||
class="uk-button"
|
||||
(click)="setActiveChart(i, j, indicatorPath.type)"
|
||||
[class.uk-button-secondary]="chartsActiveType.get(i + '-' + j).url === indicatorPath.url">
|
||||
{{indicatorPath.type}}
|
||||
</button>
|
||||
</div>
|
||||
<!--<div *ngIf="properties.environment === 'development'">
|
||||
Filtered: {{chartsActiveType.get(i + '-' + j).filtersApplied}} out of
|
||||
{{countSelectedFilters()}}</div>-->
|
||||
<iframe [class.uk-blend-multiply]="!isFullscreen"
|
||||
*ngIf=" !properties.disableFrameLoad && chartsActiveType.get(i + '-' + j).source !== 'image'"
|
||||
[src]="chartsActiveType.get(i + '-' + j).safeResourceUrl"
|
||||
*ngIf=" !properties.disableFrameLoad && getActiveIndicatorPath(indicator).source !== 'image'"
|
||||
[src]="getActiveIndicatorPath(indicator).safeResourceUrl"
|
||||
class="uk-width-1-1" allowfullscreen="true" mozallowfullscreen="true"
|
||||
[ngClass]="'uk-height-' + (indicator.height?indicator.height.toLowerCase():'medium')"></iframe>
|
||||
<div *ngIf="properties.disableFrameLoad && chartsActiveType.get(i + '-' + j).source !== 'image'">
|
||||
<div *ngIf="properties.disableFrameLoad && getActiveIndicatorPath(indicator).source !== 'image'">
|
||||
<img class="uk-width-1-1 uk-blend-multiply"
|
||||
[ngClass]="'uk-height-' + (indicator.height?indicator.height.toLowerCase():'medium')"
|
||||
src="assets/chart-placeholder.png">
|
||||
</div>
|
||||
<img *ngIf="chartsActiveType.get(i + '-' + j).source === 'image'"
|
||||
[src]="chartsActiveType.get(i + '-' + j).safeResourceUrl"
|
||||
<img *ngIf="getActiveIndicatorPath(indicator).source === 'image'"
|
||||
[src]="getActiveIndicatorPath(indicator).safeResourceUrl"
|
||||
class="uk-width-1-1 uk-blend-multiply"
|
||||
[ngClass]="'uk-height-' + (indicator.height?indicator.height.toLowerCase():'medium')">
|
||||
<slider-tabs *ngIf="indicator.indicatorPaths.length > 1" [type]="'dynamic'" [flexPosition]="'right'" (activeEmitter)="indicator.activePath = $event"
|
||||
tabsClass="uk-subnav uk-subnav-pill uk-subnav-small" containerClass="uk-margin-top uk-margin-bottom" [border]="false">
|
||||
<slider-tab *ngFor="let indicatorPath of indicator.indicatorPaths; let i=index"
|
||||
[tabTitle]="indicatorPath.parameters.tab ? indicatorPath.parameters.tab : indicatorPath.parameters.title"
|
||||
[tabId]="i" [active]="(!indicator.activePath && i == 0) || indicator.activePath == i">
|
||||
</slider-tab>
|
||||
</slider-tabs>
|
||||
</div>
|
||||
<div class="uk-position-bottom-left uk-margin-left uk-margin-small-bottom uk-visible@m">
|
||||
<a *ngIf="indicator.description || indicator.additionalDescription"
|
||||
|
|
|
@ -64,9 +64,9 @@ export class MonitorComponent extends MonitorIndicatorStakeholderBaseComponent i
|
|||
if (subscription) {
|
||||
subscription.unsubscribe();
|
||||
}
|
||||
if (!this.stakeholder || this.stakeholder.alias !== params['stakeholder']) {
|
||||
if (!this.stakeholder || (params['child'] && this.stakeholder.alias !== params['child']) ||
|
||||
(!params['child'] && this.stakeholder.alias !== params['stakeholder'])) {
|
||||
this.numberResults = new Map<string, number>();
|
||||
this.chartsActiveType = new Map<string, IndicatorPath>();
|
||||
subscription = this.stakeholderService.getStakeholderAsObservable().subscribe(stakeholder => {
|
||||
if (stakeholder) {
|
||||
this.stakeholder = stakeholder;
|
||||
|
@ -102,8 +102,8 @@ export class MonitorComponent extends MonitorIndicatorStakeholderBaseComponent i
|
|||
}
|
||||
this.subscriptions.push(this._route.queryParams.subscribe(queryParams => {
|
||||
this.handleQueryParams(queryParams, params);
|
||||
this.title = "Monitor Dashboard | " + this.stakeholder.name;
|
||||
this.description = "Monitor Dashboard | " + this.stakeholder.name;
|
||||
this.title = this.stakeholder.parent ? "Monitor Dashboard | " + this.stakeholder.parent.name + " | " + this.stakeholder.name : "Monitor Dashboard | " + this.stakeholder.name;
|
||||
this.description = this.stakeholder.parent ? "Monitor Dashboard | " + this.stakeholder.parent.name + " | " + this.stakeholder.name : "Monitor Dashboard | " + this.stakeholder.name;
|
||||
this.setMetadata();
|
||||
if (this.hasPermission((this.view && this.isManager(this.stakeholder))?this.view:this.stakeholder.visibility)) {
|
||||
this.setView(params);
|
||||
|
|
|
@ -0,0 +1,88 @@
|
|||
import {Routes} from "@angular/router";
|
||||
import {MonitorComponent} from "./monitor.component";
|
||||
import {PreviousRouteRecorder} from "../openaireLibrary/utils/piwik/previousRouteRecorder.guard";
|
||||
import {OpenaireErrorPageComponent} from "../error/errorPage.component";
|
||||
|
||||
export class Monitor {
|
||||
routes: Routes;
|
||||
|
||||
constructor(param: ':stakeholder' | ':child') {
|
||||
this.routes = [
|
||||
{
|
||||
path: param,
|
||||
component: MonitorComponent,
|
||||
canDeactivate: [PreviousRouteRecorder],
|
||||
data: {
|
||||
activeMenuItem: "dashboard"
|
||||
}
|
||||
},
|
||||
{
|
||||
path: param + '/indicators',
|
||||
loadChildren: () => import('../openaireLibrary/monitor/indicators/indicators.module').then(m => m.IndicatorsModule),
|
||||
canDeactivate: [PreviousRouteRecorder],
|
||||
data: {
|
||||
hasSidebar: false
|
||||
}
|
||||
},
|
||||
{
|
||||
path: param + '/develop',
|
||||
loadChildren: () => import('../develop/develop.module').then(m => m.DevelopModule),
|
||||
canDeactivate: [PreviousRouteRecorder],
|
||||
data: {
|
||||
hasSidebar: false
|
||||
}
|
||||
},
|
||||
{
|
||||
path: param + '/methodology',
|
||||
loadChildren: () => import('../openaireLibrary/monitor/methodology/methodology.module').then(m => m.MethodologyModule),
|
||||
canDeactivate: [PreviousRouteRecorder],
|
||||
data: {
|
||||
hasSidebar: false
|
||||
}
|
||||
},
|
||||
{
|
||||
path: param + '/search',
|
||||
loadChildren: () => import('../search/search.module').then(m => m.SearchModule),
|
||||
canDeactivate: [PreviousRouteRecorder],
|
||||
data: {
|
||||
hasSidebar: false,
|
||||
activeMenuItem: param === ':stakeholder'?"search":'dashboard'
|
||||
}
|
||||
},
|
||||
{
|
||||
path: param + '/error',
|
||||
component: OpenaireErrorPageComponent,
|
||||
data: {hasSidebar: false}
|
||||
},
|
||||
{
|
||||
path: param + '/user-info',
|
||||
loadChildren: () => import('../login/libUser.module').then(m => m.LibUserModule),
|
||||
data: {hasSidebar: false}
|
||||
},
|
||||
{
|
||||
path: param + '/:topic',
|
||||
component: MonitorComponent,
|
||||
canDeactivate: [PreviousRouteRecorder],
|
||||
data: {
|
||||
activeMenuItem: "dashboard"
|
||||
}
|
||||
},
|
||||
{
|
||||
path: param + '/:topic/:category',
|
||||
component: MonitorComponent,
|
||||
canDeactivate: [PreviousRouteRecorder],
|
||||
data: {
|
||||
activeMenuItem: "dashboard"
|
||||
}
|
||||
},
|
||||
{
|
||||
path: param + '/:topic/:category/:subCategory',
|
||||
component: MonitorComponent,
|
||||
canDeactivate: [PreviousRouteRecorder],
|
||||
data: {
|
||||
activeMenuItem: "dashboard"
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
|
@ -1 +1 @@
|
|||
Subproject commit b34f42326ca8069b6ade0e1934c7e7cd021112cb
|
||||
Subproject commit b8fb19d7575f754fca83bd5076a6f6b62366da07
|
|
@ -30,7 +30,7 @@ interface Links {
|
|||
|
||||
export class LinksResolver {
|
||||
|
||||
private static default: Links = {
|
||||
public static default: Links = {
|
||||
searchLinkToResult: properties.searchLinkToResult,
|
||||
searchLinkToPublication: properties.searchLinkToPublication,
|
||||
searchLinkToProject: properties.searchLinkToProject,
|
||||
|
|
|
@ -52,7 +52,6 @@ export class MonitorSearchProjectsComponent {
|
|||
this.navigateToError();
|
||||
}
|
||||
this.initialized = true;
|
||||
|
||||
}
|
||||
}));
|
||||
}
|
||||
|
|
|
@ -52,6 +52,12 @@ export class MonitorSearchResearchResultsComponent {
|
|||
} else if (stakeholder.type === "ri") {
|
||||
let value = stakeholder.index_id+"||"+stakeholder.index_name;
|
||||
this.customFilter = new SearchCustomFilter("Community", "community", value, stakeholder.name);
|
||||
} else if (stakeholder.type === 'publisher') {
|
||||
let value = stakeholder.index_name;
|
||||
this.customFilter = new SearchCustomFilter("Publisher", "resultpublisher", value, stakeholder.name);
|
||||
} else if (stakeholder.type === "journal") {
|
||||
let value = stakeholder.index_id;
|
||||
this.customFilter = new SearchCustomFilter("Journal", "resulthostingdatasourceid", value, stakeholder.index_name);
|
||||
}
|
||||
this.initialized = true;
|
||||
}
|
||||
|
|
|
@ -8,6 +8,7 @@
|
|||
<ul class="uk-tab uk-margin-remove-bottom uk-margin-medium-top">
|
||||
<li [class.uk-active]="tab === 'manager'"><a routerLink="../manager">Managers</a></li>
|
||||
<li [class.uk-active]="tab === 'member'"><a routerLink="../member">Members</a></li>
|
||||
<li ><a routerLink="../links">Links</a></li>
|
||||
</ul>
|
||||
</role-users>
|
||||
|
||||
|
|
|
@ -1 +1 @@
|
|||
Subproject commit 8d2f8348d8a601fad14844d920791fe7370bd4a2
|
||||
Subproject commit c5ba8700be5b8fcf98522fe167246281545d7985
|
|
@ -59,6 +59,23 @@
|
|||
@dashboard-primary-background: @monitor-color;
|
||||
@dashboard-menu-section-sublist-border: fade(@monitor-color, 30%);
|
||||
|
||||
/* Banner */
|
||||
@banner-background: url('banner.jpg') no-repeat center center / cover;
|
||||
@banner-tab-item-color: @default-color;
|
||||
@banner-tab-item-hover-color: @banner-tab-item-color;
|
||||
@banner-tab-item-active-color: @global-inverse-color;
|
||||
@banner-tab-item-hover-decoration: underline;
|
||||
@banner-tab-item-active-indicator: @monitor-dashboard-background;
|
||||
@banner-tab-button-background: @monitor-color;
|
||||
|
||||
/* Breadcrumbs inside banner */
|
||||
.uk-banner .uk-breadcrumb span {
|
||||
text-decoration: none;
|
||||
background-color: @monitor-color;
|
||||
padding: 5px;
|
||||
border-radius: @global-border-radius;
|
||||
}
|
||||
|
||||
& #filters_icon .start {
|
||||
stop-color: @monitor-light-color;
|
||||
}
|
||||
|
|
|
@ -1 +1 @@
|
|||
Subproject commit 954a1fe8af0653740882c7db4b9bf92b8f9000f4
|
||||
Subproject commit c7848e0107c9505116f0951b2669429629b82735
|
|
@ -12,7 +12,9 @@ let props: EnvProperties = {
|
|||
adminToolsCommunity: "monitor",
|
||||
useHelpTexts:true,
|
||||
baseLink: "/dashboard",
|
||||
domain: "https://beta.monitor.openaire.eu"
|
||||
domain: "https://beta.monitor.openaire.eu",
|
||||
myClaimsLink: "../../users/links"
|
||||
|
||||
};
|
||||
|
||||
export let properties: EnvProperties = {
|
||||
|
|
|
@ -12,7 +12,9 @@ let props: EnvProperties = {
|
|||
adminToolsCommunity: "monitor",
|
||||
useHelpTexts: true,
|
||||
baseLink: "/dashboard",
|
||||
domain: "https://monitor.openaire.eu"
|
||||
domain: "https://monitor.openaire.eu",
|
||||
myClaimsLink: "../../users/links"
|
||||
|
||||
};
|
||||
|
||||
export let properties: EnvProperties = {
|
||||
|
|
|
@ -14,12 +14,13 @@ let props: EnvProperties = {
|
|||
monitorStatsFrameUrl:"https://stats.madgik.di.uoa.gr/stats-api/",
|
||||
useOldStatisticsSchema: false,
|
||||
disableFrameLoad: true,
|
||||
adminToolsAPIURL: "http://duffy.di.uoa.gr:19380/uoa-monitor-service/",
|
||||
notificationsAPIURL: "http://duffy.di.uoa.gr:19380/uoa-monitor-service/notification/",
|
||||
adminToolsAPIURL: "http://mpagasas.di.uoa.gr:19380/uoa-monitor-service/",
|
||||
notificationsAPIURL: "http://mpagasas.di.uoa.gr:19380/uoa-monitor-service/notification/",
|
||||
adminToolsCommunity: "monitor",
|
||||
useHelpTexts: true,
|
||||
baseLink: "/",
|
||||
domain: "http://mpagasas.di.uoa.gr:4600"
|
||||
domain: "http://mpagasas.di.uoa.gr:4600",
|
||||
myClaimsLink: "../../users/links"
|
||||
};
|
||||
|
||||
export let properties: EnvProperties = {
|
||||
|
|
|
@ -7,5 +7,6 @@
|
|||
@import "~src/assets/common-assets/less/dashboard";
|
||||
@import "~src/assets/common-assets/less/indicators";
|
||||
@import "~src/assets/common-assets/less/ckeditor";
|
||||
@import "~src/assets/common-assets/less/linking";
|
||||
@import "~src/assets/monitor-dashboard-custom";
|
||||
@import "assets/print.css";
|
||||
|
|
Loading…
Reference in New Issue