[Monitor Dashboard|Trunk]

App routing: remove admin menu when not needed
	add  '*pages*' route

App component: 
	set navbar in the middle
	add stakeholder name or title in blue bar when sidebar is closed 

Require login for admin parts
Require admin role for managing pages, entities, helptexts, etc

Monitor Component:
	change acive topic css
	



git-svn-id: https://svn.driver.research-infrastructures.eu/driver/dnet40/modules/uoa-monitor-portal/trunk/monitor_dashboard@57961 d315682c-612b-4755-9ff5-7f18f6832af3
This commit is contained in:
Argiro Kokogiannaki 2020-01-09 14:31:55 +00:00
parent 946ca64bb7
commit 004e5e9766
17 changed files with 128 additions and 74 deletions

View File

@ -10,19 +10,20 @@ const routes: Routes = [
{
path: 'reload',
loadChildren: './reload/libReload.module#LibReloadModule',
resolve: {envSpecific: EnvironmentSpecificResolver}
resolve: {envSpecific: EnvironmentSpecificResolver},
data: {hasSidebar: false, hasAdminMenu: false}
},
{
path: 'user-info',
loadChildren: './login/libUser.module#LibUserModule',
resolve: {envSpecific: EnvironmentSpecificResolver},
data: {hasAdminMenu: true}
data: {hasAdminMenu: false, hasSidebar: false}
},
{
path: 'error',
component: OpenaireErrorPageComponent,
resolve: {envSpecific: EnvironmentSpecificResolver},
data: {hasSidebar: false}
data: {hasSidebar: false, hasAdminMenu: false}
},
{
path: 'admin',
@ -102,33 +103,31 @@ const routes: Routes = [
resolve: { envSpecific: EnvironmentSpecificResolver },
data: {hasAdminMenu: true}
},
/*{
path: 'pages',
loadChildren: './openaireLibrary/dashboard/page/pages.module#PagesModule',
resolve: { envSpecific: EnvironmentSpecificResolver }
},
{
path: 'pageContents',
loadChildren: './openaireLibrary/dashboard/helpcontent/page-help-contents.module#PageHelpContentsModule',
resolve: { envSpecific: EnvironmentSpecificResolver }
loadChildren: './opages/helpcontent/page-help-contents.module#PageHelpContentsModule',
resolve: { envSpecific: EnvironmentSpecificResolver },
data: {hasAdminMenu: true}
},
{
path: 'pageContents/new',
loadChildren: './pages/helpcontent/new-page-help-content.module#NewPageHelpContentModule',
resolve: { envSpecific: EnvironmentSpecificResolver }
resolve: { envSpecific: EnvironmentSpecificResolver },
data: {hasAdminMenu: true}
},
{
path: 'pageContents/edit',
loadChildren: './pages/helpcontent/edit-page-help-content.module#EditPageHelpContentModule',
resolve: { envSpecific: EnvironmentSpecificResolver }
resolve: { envSpecific: EnvironmentSpecificResolver },
data: {hasAdminMenu: true}
},
{
path: 'htmlPageContent/edit',
loadChildren: './pages/htmlpagecontent/edit-html-page-content.module#EditHtmlPageContentModule',
resolve: { envSpecific: EnvironmentSpecificResolver }
},*/
resolve: { envSpecific: EnvironmentSpecificResolver },
data: {hasAdminMenu: true}
},
{
path: '',
loadChildren: './monitor/monitor.module#MonitorModule',
@ -139,7 +138,7 @@ const routes: Routes = [
pathMatch: 'full',
component: OpenaireErrorPageComponent,
resolve: {envSpecific: EnvironmentSpecificResolver},
data: {hasSidebar: false}
data: {hasSidebar: false, hasAdminMenu: false}
}
];

View File

@ -1,26 +1,36 @@
<!--disable_transitions -->
<div class="sidebar_main_swipe" [class.sidebar_main_active]="open && hasSidebar">
<div *ngIf="hasHeader" id="header_main" [class.header_full]="!hasSidebar">
<img class="badge small-badge right-badge"
<img *ngIf="!open || !hasSidebar" class="badge small-badge"
src="assets/theme-assets/prototype_flag.svg"
alt="BETA">
<nav class="uk-navbar uk-light">
<div class="uk-navbar-right">
<ul class="uk-navbar-nav user_actions">
<li>
<user-mini *ngIf="properties"
[user]="user" [dashboard]="true" [colors]="'light'"
[redirectUrl]="properties.afterLoginRedirectLink"
[logInUrl]=properties.loginUrl [logOutUrl]=properties.logoutUrl [cookieDomain]=properties.cookieDomain
[userMenuItems]=userMenuItems>
</user-mini>
</li>
</ul>
</div>
</nav>
<nav class="uk-navbar uk-light">
<div *ngIf="!open || !hasSidebar " class="uk-navbar-left uk-margin-small-left">
<div class="uk-light uk-margin-small-top">
<div *ngIf="stakeHolder" class="uk-text-bold uk-h4 uk-margin-remove-bottom" >{{stakeHolder.index_name}}</div>
<div class="uk-h5 uk-margin-remove">{{(stakeHolder?'Admin Dashboard':'Monitor Dashboard')}}</div>
</div>
</div>
<div class="uk-navbar-right">
<ul class="uk-navbar-nav user_actions">
<li>
<user-mini *ngIf="properties"
[user]="user" [dashboard]="true" [colors]="'light'"
[redirectUrl]="properties.afterLoginRedirectLink"
[logInUrl]=properties.loginUrl [logOutUrl]=properties.logoutUrl
[cookieDomain]=properties.cookieDomain
[userMenuItems]=userMenuItems>
</user-mini>
</li>
</ul>
</div>
</nav>
</div>
<dashboard-sidebar *ngIf="hasAdminMenu" [items]="adminMenuItems"
<dashboard-sidebar *ngIf="hasAdminMenu" [items]="adminMenuItems" headerName="Monitor Dashboard"
headerDashboard="Administration Panel"
></dashboard-sidebar>
<div *ngIf="hasSidebar" id="hide_controls">
<div id="toggle" [class.sidebar_main_open]="open" (click)="toggleOpen($event)">

View File

@ -8,6 +8,7 @@ import {StakeholderService} from "./services/stakeholder.service";
import {BehaviorSubject, Subscriber} from "rxjs";
import {LayoutService} from "./openaireLibrary/dashboard/sharedComponents/sidebar/layout.service";
import {MenuItem} from "./openaireLibrary/sharedComponents/menu";
import {Stakeholder} from "./utils/entities/stakeholder";
@Component({
@ -23,6 +24,7 @@ export class AppComponent implements OnInit, OnDestroy {
hasAdminMenu: boolean = false;
userMenuItems: MenuItem[] = [];
adminMenuItems: MenuItem[] = [];
stakeHolder:Stakeholder = null;
private subscriptions: any[] = [];
constructor(private route: ActivatedRoute,
@ -71,11 +73,13 @@ export class AppComponent implements OnInit, OnDestroy {
this.stakeholderService.getStakeholder(this.properties.monitorServiceAPIURL, params['stakeholder']).subscribe(stakeholder => {
this.stakeholderService.setStakeholder(stakeholder);
this.layoutService.setOpen(true);
this.stakeHolder = stakeholder;
});
}
} else {
this.stakeholderService.setStakeholder(null);
this.layoutService.setOpen(true);
this.stakeHolder = null;
}
}));
this.subscriptions.push(this.userManagementService.getUserInfo().subscribe(user => {
@ -110,7 +114,7 @@ export class AppComponent implements OnInit, OnDestroy {
this.userMenuItems = [];
if (Session.isPortalAdministrator(this.user)) {
this.userMenuItems.push(new MenuItem("", "Manage helptexts",
((this.properties.environment == "beta") ? "https://beta.admin.connect.openaire.eu" : "https://admin.explore.openaire.eu") + "/dashboard?communityId=openaire", "", true, [], [], {}))
"", "/helptexts", true, [], [], {communityId:'openaire'}))
}
if (this.user) {

View File

@ -1,8 +1,8 @@
import {NgModule} from '@angular/core';
import {RouterModule} from '@angular/router';
import {FreeGuard} from '../openaireLibrary/login/freeGuard.guard';
import {PreviousRouteRecorder} from '../openaireLibrary/utils/piwik/previousRouteRecorder.guard';
import {ManageStakeholdersComponent} from "./manageStakeholders.component";
import {LoginGuard} from "../openaireLibrary/login/loginGuard.guard";
@NgModule({
imports: [
@ -10,7 +10,7 @@ import {ManageStakeholdersComponent} from "./manageStakeholders.component";
{
path: '',
component: ManageStakeholdersComponent,
canActivate: [FreeGuard],
canActivate: [LoginGuard],
canDeactivate: [PreviousRouteRecorder],
data: {hasSidebar: true}
}

View File

@ -1,7 +1,6 @@
import {NgModule} from "@angular/core";
import {ManageStakeholdersComponent} from "./manageStakeholders.component";
import {ManageStakeholdersRoutingModule} from "./manageStakeholders-routing.module";
import {FreeGuard} from "../openaireLibrary/login/freeGuard.guard";
import {PreviousRouteRecorder} from "../openaireLibrary/utils/piwik/previousRouteRecorder.guard";
import {CommonModule} from "@angular/common";
import {RouterModule} from "@angular/router";
@ -9,6 +8,7 @@ import {InputModule} from "../openaireLibrary/dashboard/sharedComponents/input/i
import {LoadingModule} from "../openaireLibrary/dashboard/sharedComponents/loading/loading.module";
import {AlertModalModule} from "../openaireLibrary/utils/modal/alertModal.module";
import {ReactiveFormsModule} from "@angular/forms";
import {LoginGuard} from "../openaireLibrary/login/loginGuard.guard";
@NgModule({
declarations: [ManageStakeholdersComponent],
@ -22,7 +22,7 @@ import {ReactiveFormsModule} from "@angular/forms";
ReactiveFormsModule
],
providers: [
FreeGuard, PreviousRouteRecorder,
LoginGuard, PreviousRouteRecorder,
],
exports: [ManageStakeholdersComponent]
})

View File

@ -11,7 +11,7 @@
<a *ngIf="stakeholder"
class="uk-logo uk-navbar-item ng-star-inserted uk-link uk-margin-small-top uk-margin-medium-left"
routerlink="/"
routerlinkactive="uk-link" href="/">
routerlinkactive="uk-link">
<img *ngIf="stakeholder.logoUrl" [src]="stakeholder.logoUrl" class="uk-responsive-height">
<div *ngIf="!stakeholder.logoUrl">
{{stakeholder.index_name}}
@ -26,19 +26,9 @@
<div *ngIf="stakeholder && status === errorCodes.DONE && activeTopic" class="uk-navbar-right uk-margin-right">
<ul class="uk-navbar-nav user_actions uk-padding uk-padding-remove-vertical">
<!--li class="uk-active">
<a class="uk-margin-remove-bottom "><span>Monitor</span></a>
</li>
<li>
<a class="uk-margin-remove-bottom ">Search</a>
</li>
<li>
<a class="uk-margin-remove-bottom ">Help</a>
</li-->
<li>
<user-mini *ngIf="properties"
[user]="user" [dashboard]="true" [colors]="'dark'"
[redirectUrl]="properties.afterLoginRedirectLink"
[logInUrl]=properties.loginUrl [logOutUrl]=properties.logoutUrl
[cookieDomain]=properties.cookieDomain
[userMenuItems]=userMenuItems>
@ -51,14 +41,14 @@
</div>
<div class="sidebar_main_swipe header_full" [class.sidebar_main_active]="open">
<div id="header_main">
<nav class="uk-light">
<nav class="uk-light uk-navbar">
<div class="main_logo_top">
<div *ngIf="stakeholder && stakeholder.index_name" class=" ">
<div *ngIf="stakeholder && stakeholder.index_name" class=" uk-margin-small-top">
<div class="uk-text-bold uk-h4 uk-margin-remove-bottom">{{stakeholder.index_name}}</div>
<div class="uk-h5 uk-margin-remove">Monitor Dashboard</div>
</div>
</div>
<div *ngIf="stakeholder && status === errorCodes.DONE && activeTopic" class="">
<div *ngIf="stakeholder && status === errorCodes.DONE && activeTopic" class="uk-navbar-center">
<ul class="uk-navbar-nav">
<ng-template ngFor [ngForOf]="stakeholder.topics" let-topic let-i="index">
<li *ngIf="topic.isPublic && topic.isActive"
@ -118,7 +108,11 @@
</ng-template>
</ng-template>
</div>
<div *ngIf="(activeSubCategory && activeSubCategory.charts.length == 0) && ((activeSubCategory && activeSubCategory.description &&
<div
*ngIf="(activeSubCategory && (activeSubCategory.charts.length == 0 ||
(activeSubCategory.charts.length == 1 && activeSubCategory.charts[0].indicators.length == 0)))
&& ((activeSubCategory &&
activeSubCategory.description &&
activeSubCategory.description.length > 0) ||
(activeCategory && activeCategory.description && activeCategory.description.length > 0) ||
(activeTopic && activeTopic.description && activeTopic.description.length > 0))"
@ -172,7 +166,7 @@
</div>
</div>
</div>
<a *ngIf="stakeholder" id="style_switcher" class="" routerLinkActive="active"
<a *ngIf="stakeholder && isAdmin()" id="style_switcher" class="" routerLinkActive="active"
[routerLink]="['/admin', this.stakeholder.alias]">
<div id="style_switcher_toggle"><i class="material-icons">settings</i></div>
</a>

View File

@ -117,6 +117,8 @@ export class MonitorComponent implements OnInit, OnDestroy, IDeactivateComponent
}
if (stakeholder) {
this.stakeholder = stakeholder;
console.info(this.stakeholder);
this.seoService.createLinkForCanonicalURL(url, false);
this._meta.updateTag({content: url}, "property='og:url'");
var description = "Monitor Dashboard | " + this.stakeholder.index_name;
@ -377,4 +379,8 @@ export class MonitorComponent implements OnInit, OnDestroy, IDeactivateComponent
this.userMenuItems.push(new MenuItem("", "User information", "", "/user-info", false, [], [], {}));
}
}
isAdmin(){
return this.user && Session.isPortalAdministrator(this.user);
}
}

View File

@ -1,9 +1,9 @@
import {NgModule} from '@angular/core';
import {RouterModule} from '@angular/router';
import {FreeGuard} from '../openaireLibrary/login/freeGuard.guard';
import {PreviousRouteRecorder} from '../openaireLibrary/utils/piwik/previousRouteRecorder.guard';
import {StakeholderComponent} from "./stakeholder.component";
import {CanExitGuard} from "../openaireLibrary/utils/can-exit.guard";
import {LoginGuard} from "../openaireLibrary/login/loginGuard.guard";
@NgModule({
imports: [
@ -11,7 +11,7 @@ import {CanExitGuard} from "../openaireLibrary/utils/can-exit.guard";
{
path: '',
component: StakeholderComponent,
canActivate: [FreeGuard],
canActivate: [LoginGuard],
canDeactivate: [PreviousRouteRecorder, CanExitGuard]
}
])

View File

@ -1,5 +1,8 @@
<aside id="sidebar_main">
<div *ngIf="stakeholder" class="sidebar_main_header uk-margin-remove-bottom">
<img class="badge"
src="assets/theme-assets/prototype_flag.svg"
alt="BETA">
<div class="uk-padding-small">
<img class="uk-margin-bottom" *ngIf="stakeholder.logoUrl" [src]="stakeholder.logoUrl">
<h4 class="uk-text-bold uk-margin-remove">{{stakeholder.index_name}}</h4>

View File

@ -57,7 +57,15 @@ export class StakeholderComponent implements OnInit, OnDestroy, IDeactivateCompo
this.form = null;
this.title.setTitle(stakeholder.index_name);
}
}));
},
err => {
console.error("Error getting stakeholder: ", err);
if(err.status == 404) {
//{queryParams: {"page": this.location.path(true), "page_type": "dataprovider"}}
this.router.navigate(['/error'], );
}
}));
});
}

View File

@ -1,7 +1,5 @@
import {NgModule} from '@angular/core';
import {CommonModule} from '@angular/common';
import {FreeGuard} from '../openaireLibrary/login/freeGuard.guard';
import {PreviousRouteRecorder} from '../openaireLibrary/utils/piwik/previousRouteRecorder.guard';
import {PiwikService} from '../openaireLibrary/utils/piwik/piwik.service';
@ -12,6 +10,7 @@ import {StakeholderComponent} from "./stakeholder.component";
import {StakeholderRoutingModule} from "./stakeholder-routing.module";
import {InputModule} from "../openaireLibrary/dashboard/sharedComponents/input/input.module";
import {ClickModule} from "../openaireLibrary/utils/click/click.module";
import {LoginGuard} from "../openaireLibrary/login/loginGuard.guard";
@NgModule({
imports: [
@ -21,7 +20,7 @@ import {ClickModule} from "../openaireLibrary/utils/click/click.module";
StakeholderComponent
],
providers: [
FreeGuard, PreviousRouteRecorder,
LoginGuard, PreviousRouteRecorder,
PiwikService
],
exports: [

View File

@ -1,9 +1,9 @@
import {NgModule} from '@angular/core';
import {RouterModule} from '@angular/router';
import {FreeGuard} from '../openaireLibrary/login/freeGuard.guard';
import {PreviousRouteRecorder} from '../openaireLibrary/utils/piwik/previousRouteRecorder.guard';
import {TopicComponent} from "./topic.component";
import {CanExitGuard} from "../openaireLibrary/utils/can-exit.guard";
import {LoginGuard} from "../openaireLibrary/login/loginGuard.guard";
@NgModule({
imports: [
@ -11,7 +11,7 @@ import {CanExitGuard} from "../openaireLibrary/utils/can-exit.guard";
{
path: '',
component: TopicComponent,
canActivate: [FreeGuard],
canActivate: [LoginGuard],
canDeactivate: [PreviousRouteRecorder, CanExitGuard]
}
])

View File

@ -13,6 +13,7 @@ import {IndicatorsComponent} from "./indicators.component";
import {AlertModalModule} from "../openaireLibrary/utils/modal/alertModal.module";
import {InputModule} from "../openaireLibrary/dashboard/sharedComponents/input/input.module";
import {ClickModule} from "../openaireLibrary/utils/click/click.module";
import {LoginGuard} from "../openaireLibrary/login/loginGuard.guard";
@NgModule({
imports: [
@ -23,7 +24,7 @@ import {ClickModule} from "../openaireLibrary/utils/click/click.module";
TopicComponent, IndicatorsComponent
],
providers: [
FreeGuard, PreviousRouteRecorder,
LoginGuard, PreviousRouteRecorder,
PiwikService
],
exports: [

View File

@ -35,10 +35,10 @@ export class StakeholderUtils {
public createFunderFromDefaultProfile(funder: Stakeholder, defaultTopics: Topic[]): Stakeholder {
funder.topics = defaultTopics;
for (let topic of funder.topics) {
console.log('id:' + topic._id);
// console.log('id:' + topic._id);
topic.defaultId = topic._id;
topic._id = null;
console.log('defaultId:' + topic.defaultId);
// console.log('defaultId:' + topic.defaultId);
for (let category of topic.categories) {
category.defaultId = category._id;
category._id = null;
@ -192,7 +192,6 @@ export class IndicatorUtils {
replacedUrl = replacedUrl.split(ChartHelper.prefix + key + ChartHelper.suffix).join(replacedValue)
});
}
console.info("replacedUrl:" + replacedUrl)
if (indicatorPath.chartObject) {
if (fundingL0 && indicatorPath.filters["fundingL0"]) {
let newJsonObject = JSON.parse(replacedUrl);
@ -328,7 +327,6 @@ export class IndicatorUtils {
if (query["query"]["name"]) {
name = query["query"]["name"];
let stakeholderSN = name.split('.')[1];
console.log("Funder is:" + stakeholderSN);
query["query"]["name"] = name.split('.' + stakeholderSN + ".")[0] + "." + ChartHelper.prefix + "FSN" + ChartHelper.suffix +"." + name.split('.' + stakeholderSN + ".")[1];
indicatorPath.parameters["FSN"] = stakeholder.index_shortName.toLowerCase();
}

View File

@ -37,9 +37,9 @@
"piwikBaseUrl" :"https://analytics.openaire.eu/piwik.php?idsite=",
"piwikSiteId" : "80",
"loginUrl" :"http://rudie.di.uoa.gr:8080/dnet-openaire-users-1.0.0-SNAPSHOT/openid_connect_login",
"loginUrl" :"http://scoobydoo.di.uoa.gr:8080/dnet-openaire-users-1.0.0-SNAPSHOT/openid_connect_login",
"userInfoUrl" : "http://rudie.di.uoa.gr:8080/dnet-openaire-users-1.0.0-SNAPSHOT/api/users/getUserInfo?accessToken=",
"userInfoUrl" : "http://scoobydoo.di.uoa.gr:8080/dnet-openaire-users-1.0.0-SNAPSHOT/api/users/getUserInfo?accessToken=",
"logoutUrl" :"https://aai.openaire.eu/proxy/saml2/idp/SingleLogoutService.php?ReturnTo=",
@ -65,7 +65,7 @@
"baseLink" : "https://beta.explore.openaire.eu",
"afterLoginRedirectLink": "/myCommunities",
"afterLoginRedirectLink": "",
"searchLinkToPublication" : "/search/publication?articleId=",
"searchLinkToProject" : "/search/project?projectId=",

View File

@ -49,13 +49,44 @@
font-family: 'Open Sans';
}
.double-header .uk-navbar-nav > li.uk-active > a {
/*.double-header .uk-navbar-nav > li.uk-active > a {*/
/* font-weight: bold;*/
/*}*/
/*.double-header #header_main .uk-navbar-nav > li.uk-active a span {*/
/* -webkit-box-shadow: inset 0 -2px 0 #FFFFFF;*/
/* box-shadow: inset 0 -2px 0 #FFFFFF;*/
/*}*/
.double-header #header_main .uk-navbar-nav > li.uk-active {
position: relative;
display: inline;
transition: position 0s linear 0.2s;
}
/*.double-header #header_main .uk-navbar-nav > li a:after {*/
/* border-color: transparent ;*/
/* border-width: 0px;*/
/*}*/
.double-header #header_main .uk-navbar-nav > li.uk-active a {
font-weight: bold;
}
.double-header #header_main .uk-navbar-nav > li.uk-active a span {
-webkit-box-shadow: inset 0 -2px 0 #FFFFFF;
box-shadow: inset 0 -2px 0 #FFFFFF;
.double-header #header_main .uk-navbar-nav > li.uk-active a:before {
top: 45px;
left: 50%;
border-style: solid;
content: "";
height: 0;
width: 0;
position: absolute;
pointer-events: none;
border-color: transparent;
border-bottom-color: #ECECEC;
border-width: 15px;
margin-left: -15px;
}
.double-header #header_main .uk-navbar-nav > li a span {
padding-bottom: 4px;
text-transform: capitalize;

View File

@ -371,7 +371,7 @@ body.dashboard {
}
.badge {
height: 100px;
height: 75px;
position: absolute;
top: 0;
left: 0;
@ -387,3 +387,4 @@ body.dashboard {
right: 0;
}