add components, refactor sidebar section, add config

This commit is contained in:
FrancescoMolinaro
2023-12-22 10:42:38 +01:00
parent 7445591148
commit 604fb4f3d1
18 changed files with 296 additions and 27 deletions

View File

@@ -0,0 +1,37 @@
import { NgModule } from '@angular/core';
import { RouterModule } from '@angular/router';
import { I18nBreadcrumbResolver } from '../../core/breadcrumbs/i18n-breadcrumb.resolver';
import { I18nBreadcrumbsService } from '../../core/breadcrumbs/i18n-breadcrumbs.service';
import { AuthenticatedGuard } from "../../core/auth/authenticated.guard";
import { AdminNotifyDashboardComponent } from "./admin-notify-dashboard.component";
@NgModule({
imports: [
RouterModule.forChild([
{
canActivate: [ AuthenticatedGuard ],
path: '',
component: AdminNotifyDashboardComponent,
pathMatch: 'full',
resolve: {
breadcrumb: I18nBreadcrumbResolver,
},
data: {
title: 'admin.notify.dashboard.page.title',
breadcrumbKey: 'admin.notify.dashboard',
showBreadcrumbsFluid: false
}
},
])
],
providers: [
I18nBreadcrumbResolver,
I18nBreadcrumbsService,
]
})
/**
* Routing module for the Notifications section of the admin sidebar
*/
export class AdminNotifyDashboardRoutingModule {
}

View File

@@ -1 +1,28 @@
<p>admin-notify-dashboard works!</p> <div class="container">
<div class="row">
<div class="col-12">
<h2 class="border-bottom pb-2">{{'admin-notify-dashboard.title'| translate}}</h2>
<div>
<ul ngbNav #nav="ngbNav" [activeId]="'metrics'" class="nav-tabs">
<li [ngbNavItem]="'metrics'">
<a ngbNavLink>{{'admin-notify-dashboard.metrics' | translate}}</a>
<ng-template ngbNavContent>
<div id="metrics">
<ds-admin-notify-metrics></ds-admin-notify-metrics>
</div>
</ng-template>
</li>
<li [ngbNavItem]="'logs'">
<a ngbNavLink>{{'admin-notify-dashboard.logs' | translate}}</a>
<ng-template ngbNavContent>
<div id="logs">
<ds-admin-notify-logs></ds-admin-notify-logs>
</div>
</ng-template>
</li>
</ul>
<div [ngbNavOutlet]="nav" class="mt-2"></div>
</div>
</div>
</div>
</div>

View File

@@ -0,0 +1,25 @@
import { NgModule } from '@angular/core';
import { CommonModule } from '@angular/common';
import { RouterModule } from '@angular/router';
import { SharedModule } from '../../shared/shared.module';
import { AdminNotifyDashboardComponent } from "./admin-notify-dashboard.component";
import { AdminNotifyDashboardRoutingModule } from "./admin-notify-dashboard-routing.module";
import { AdminNotifyMetricsComponent } from './admin-notify-metrics/admin-notify-metrics.component';
import { AdminNotifyLogsComponent } from './admin-notify-logs/admin-notify-logs.component';
@NgModule({
imports: [
CommonModule,
SharedModule,
RouterModule,
AdminNotifyDashboardRoutingModule,
],
declarations: [
AdminNotifyDashboardComponent,
AdminNotifyMetricsComponent,
AdminNotifyLogsComponent
]
})
export class AdminNotifyDashboardModule {
}

View File

@@ -0,0 +1 @@
<p>admin-notify-logs works!</p>

View File

@@ -0,0 +1,23 @@
import { ComponentFixture, TestBed } from '@angular/core/testing';
import { AdminNotifyLogsComponent } from './admin-notify-logs.component';
describe('AdminNotifyLogsComponent', () => {
let component: AdminNotifyLogsComponent;
let fixture: ComponentFixture<AdminNotifyLogsComponent>;
beforeEach(async () => {
await TestBed.configureTestingModule({
declarations: [ AdminNotifyLogsComponent ]
})
.compileComponents();
fixture = TestBed.createComponent(AdminNotifyLogsComponent);
component = fixture.componentInstance;
fixture.detectChanges();
});
it('should create', () => {
expect(component).toBeTruthy();
});
});

View File

@@ -0,0 +1,10 @@
import { Component } from '@angular/core';
@Component({
selector: 'ds-admin-notify-logs',
templateUrl: './admin-notify-logs.component.html',
styleUrls: ['./admin-notify-logs.component.scss']
})
export class AdminNotifyLogsComponent {
}

View File

@@ -0,0 +1,11 @@
<div class="container-fluid">
<div *ngFor="let rows of boxesConfig">
<div *ngFor="let box of rows.boxes">
<div [ngStyle]="{'background-color': box.color}">
<!--Here will go the actual count coming from the REST endpoint -->
<div>0</div>
<div>{{ box.title | translate }}</div>
</div>
</div>
</div>
</div>

View File

@@ -0,0 +1,23 @@
import { ComponentFixture, TestBed } from '@angular/core/testing';
import { AdminNotifyMetricsComponent } from './admin-notify-metrics.component';
describe('AdminNotifyMetricsComponent', () => {
let component: AdminNotifyMetricsComponent;
let fixture: ComponentFixture<AdminNotifyMetricsComponent>;
beforeEach(async () => {
await TestBed.configureTestingModule({
declarations: [ AdminNotifyMetricsComponent ]
})
.compileComponents();
fixture = TestBed.createComponent(AdminNotifyMetricsComponent);
component = fixture.componentInstance;
fixture.detectChanges();
});
it('should create', () => {
expect(component).toBeTruthy();
});
});

View File

@@ -0,0 +1,13 @@
import { Component } from '@angular/core';
import { AdminNotifyMetricsRow } from "./admin-notify-metrics.model";
import { AdminNotifyMetricsRowsConfig } from "./admin-notify-metrics.config";
@Component({
selector: 'ds-admin-notify-metrics',
templateUrl: './admin-notify-metrics.component.html',
styleUrls: ['./admin-notify-metrics.component.scss']
})
export class AdminNotifyMetricsComponent {
boxesConfig: AdminNotifyMetricsRow[] = AdminNotifyMetricsRowsConfig;
}

View File

@@ -0,0 +1,64 @@
import { AdminNotifyMetricsRow } from "./admin-notify-metrics.model";
export const AdminNotifyMetricsRowsConfig: AdminNotifyMetricsRow[] = [
{
title: 'Number of received LDN',
boxes: [
{
color: 'blue',
title: 'Accepted',
index: 0
},
{
color: 'green',
title: 'Processed LDN',
index: 1
},
{
color: 'red',
title: 'Failure',
index: 2
},
{
color: 'red',
title: 'Untrusted',
index: 3
},
{
color: 'grey',
title: 'Incoming LDM messages',
index: 4
},
]
},
{
title: 'Number of generated LDN',
boxes: [
{
color: 'green',
title: 'Delivered',
index: 0
},
{
color: 'blue',
title: 'Queued',
index: 1
},
{
color: 'yellow',
title: 'Queued for retry',
index: 2
},
{
color: 'red',
title: 'Failure',
index: 3
},
{
color: 'grey',
title: 'Outgoing LDM messages',
index: 4
},
]
}
]

View File

@@ -0,0 +1,10 @@
export interface AdminNotifyMetricsBox {
color: string;
title: string;
index: number
}
export interface AdminNotifyMetricsRow {
title: string;
boxes: AdminNotifyMetricsBox[]
}

View File

@@ -4,6 +4,8 @@ import { getAdminModuleRoute } from '../app-routing-paths';
export const REGISTRIES_MODULE_PATH = 'registries'; export const REGISTRIES_MODULE_PATH = 'registries';
export const NOTIFICATIONS_MODULE_PATH = 'notifications'; export const NOTIFICATIONS_MODULE_PATH = 'notifications';
export const NOTIFY_DASHBOARD_MODULE_PATH = 'notify-dashboard';
export const LDN_PATH = 'ldn'; export const LDN_PATH = 'ldn';
export function getRegistriesModuleRoute() { export function getRegistriesModuleRoute() {
@@ -13,7 +15,6 @@ export function getRegistriesModuleRoute() {
export function getNotificationsModuleRoute() { export function getNotificationsModuleRoute() {
return new URLCombiner(getAdminModuleRoute(), NOTIFICATIONS_MODULE_PATH).toString(); return new URLCombiner(getAdminModuleRoute(), NOTIFICATIONS_MODULE_PATH).toString();
} }
export function getLdnServicesModuleRoute() { export function getLdnServicesModuleRoute() {
return new URLCombiner(getAdminModuleRoute(), LDN_PATH).toString(); return new URLCombiner(getAdminModuleRoute(), LDN_PATH).toString();
} }

View File

@@ -6,7 +6,12 @@ import { I18nBreadcrumbResolver } from '../core/breadcrumbs/i18n-breadcrumb.reso
import { AdminWorkflowPageComponent } from './admin-workflow-page/admin-workflow-page.component'; import { AdminWorkflowPageComponent } from './admin-workflow-page/admin-workflow-page.component';
import { I18nBreadcrumbsService } from '../core/breadcrumbs/i18n-breadcrumbs.service'; import { I18nBreadcrumbsService } from '../core/breadcrumbs/i18n-breadcrumbs.service';
import { AdminCurationTasksComponent } from './admin-curation-tasks/admin-curation-tasks.component'; import { AdminCurationTasksComponent } from './admin-curation-tasks/admin-curation-tasks.component';
import { LDN_PATH, REGISTRIES_MODULE_PATH, NOTIFICATIONS_MODULE_PATH } from './admin-routing-paths'; import {
LDN_PATH,
REGISTRIES_MODULE_PATH,
NOTIFICATIONS_MODULE_PATH,
NOTIFY_DASHBOARD_MODULE_PATH
} from './admin-routing-paths';
import { BatchImportPageComponent } from './admin-import-batch-page/batch-import-page.component'; import { BatchImportPageComponent } from './admin-import-batch-page/batch-import-page.component';
import { AdminNotifyDashboardComponent } from "./admin-notify-dashboard/admin-notify-dashboard.component"; import { AdminNotifyDashboardComponent } from "./admin-notify-dashboard/admin-notify-dashboard.component";
@@ -71,10 +76,9 @@ import { AdminNotifyDashboardComponent } from "./admin-notify-dashboard/admin-no
data: {title: 'admin.system-wide-alert.title', breadcrumbKey: 'admin.system-wide-alert'} data: {title: 'admin.system-wide-alert.title', breadcrumbKey: 'admin.system-wide-alert'}
}, },
{ {
path: 'notify-dashboard', path: NOTIFY_DASHBOARD_MODULE_PATH,
resolve: { breadcrumb: I18nBreadcrumbResolver }, loadChildren: () => import('./admin-notify-dashboard/admin-notify-dashboard.module')
component: AdminNotifyDashboardComponent, .then((m) => m.AdminNotifyDashboardModule),
data: {title: 'todo', breadcrumbKey: 'todo'}
}, },
]), ]),
], ],

View File

@@ -12,7 +12,6 @@ import { ExpandableAdminSidebarSectionComponent } from './admin-sidebar/expandab
import { BatchImportPageComponent } from './admin-import-batch-page/batch-import-page.component'; import { BatchImportPageComponent } from './admin-import-batch-page/batch-import-page.component';
import { UiSwitchModule } from 'ngx-ui-switch'; import { UiSwitchModule } from 'ngx-ui-switch';
import { UploadModule } from '../shared/upload/upload.module'; import { UploadModule } from '../shared/upload/upload.module';
import { AdminNotifyDashboardComponent } from './admin-notify-dashboard/admin-notify-dashboard.component';
const ENTRY_COMPONENTS = [ const ENTRY_COMPONENTS = [
// put only entry components that use custom decorator // put only entry components that use custom decorator
@@ -36,7 +35,6 @@ const ENTRY_COMPONENTS = [
AdminCurationTasksComponent, AdminCurationTasksComponent,
MetadataImportPageComponent, MetadataImportPageComponent,
BatchImportPageComponent, BatchImportPageComponent,
AdminNotifyDashboardComponent
] ]
}) })
export class AdminModule { export class AdminModule {

View File

@@ -362,19 +362,6 @@ export class MenuResolver implements Resolve<boolean> {
icon: 'terminal', icon: 'terminal',
index: 10 index: 10
}, },
/* LDN Services */
{
id: 'ldn_services',
active: false,
visible: isSiteAdmin,
model: {
type: MenuItemType.LINK,
text: 'menu.section.services',
link: '/admin/ldn/services'
} as LinkMenuItemModel,
icon: 'inbox',
index: 14
},
{ {
id: 'health', id: 'health',
active: false, active: false,
@@ -679,17 +666,40 @@ export class MenuResolver implements Resolve<boolean> {
icon: 'exclamation-circle', icon: 'exclamation-circle',
index: 12 index: 12
}, },
/* COAR Notify section */
{ {
id: 'notify_dashboard', id: 'coar_notify',
active: false, active: false,
visible: authorized, visible: authorized,
model: {
type: MenuItemType.TEXT,
text: 'menu.section.coar_notify'
} as TextMenuItemModel,
icon: 'inbox',
index: 13
},
{
id: 'notify_dashboard',
active: false,
parentID: 'coar_notify',
visible: authorized,
model: { model: {
type: MenuItemType.LINK, type: MenuItemType.LINK,
text: 'menu.section.notify-dashboard', text: 'menu.section.notify_dashboard',
link: '/admin/notify-dashboard' link: '/admin/notify-dashboard'
} as LinkMenuItemModel, } as LinkMenuItemModel,
icon: 'gauge', },
index: 13 /* LDN Services */
{
id: 'ldn_services',
active: false,
parentID: 'coar_notify',
visible: authorized,
model: {
type: MenuItemType.LINK,
text: 'menu.section.services',
link: '/admin/ldn/services'
} as LinkMenuItemModel,
}, },
]; ];

View File

@@ -28,6 +28,8 @@
"admin.notifications.recitersuggestion.page.title": "Suggestions", "admin.notifications.recitersuggestion.page.title": "Suggestions",
"admin.notify.dashboard": "Dashboard",
"error-page.description.401": "unauthorized", "error-page.description.401": "unauthorized",
"error-page.description.403": "forbidden", "error-page.description.403": "forbidden",
@@ -3075,7 +3077,9 @@
"menu.section.icon.export": "Export menu section", "menu.section.icon.export": "Export menu section",
"menu.section.notify-dashboard": "Notify Dashboard", "menu.section.notify_dashboard": "Dashboard",
"menu.section.coar_notify": "COAR Notify",
"menu.section.icon.find": "Find menu section", "menu.section.icon.find": "Find menu section",
@@ -3439,6 +3443,14 @@
"quality-assurance.event.reason": "Reason", "quality-assurance.event.reason": "Reason",
"admin-notify-dashboard.title": "Notify Dashboard",
"admin-notify-dashboard.metrics": "Notify metrics",
"admin-notify-dashboard.logs": "Notify logs",
"admin.notify.dashboard.breadcrumbs": "Dashboard",
"orgunit.listelement.badge": "Organizational Unit", "orgunit.listelement.badge": "Organizational Unit",
"orgunit.listelement.no-title": "Untitled", "orgunit.listelement.no-title": "Untitled",