diff --git a/src/app/admin/admin-notify-dashboard/admin-notify-dashboard-routing.module.ts b/src/app/admin/admin-notify-dashboard/admin-notify-dashboard-routing.module.ts new file mode 100644 index 0000000000..447a1fe39a --- /dev/null +++ b/src/app/admin/admin-notify-dashboard/admin-notify-dashboard-routing.module.ts @@ -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 { + +} diff --git a/src/app/admin/admin-notify-dashboard/admin-notify-dashboard.component.html b/src/app/admin/admin-notify-dashboard/admin-notify-dashboard.component.html index 90fa077e91..4b432adb38 100644 --- a/src/app/admin/admin-notify-dashboard/admin-notify-dashboard.component.html +++ b/src/app/admin/admin-notify-dashboard/admin-notify-dashboard.component.html @@ -1 +1,28 @@ -

admin-notify-dashboard works!

+
+
+
+

{{'admin-notify-dashboard.title'| translate}}

+
+ +
+
+
+
+
diff --git a/src/app/admin/admin-notify-dashboard/admin-notify-dashboard.module.ts b/src/app/admin/admin-notify-dashboard/admin-notify-dashboard.module.ts new file mode 100644 index 0000000000..0074d13ce0 --- /dev/null +++ b/src/app/admin/admin-notify-dashboard/admin-notify-dashboard.module.ts @@ -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 { + +} diff --git a/src/app/admin/admin-notify-dashboard/admin-notify-logs/admin-notify-logs.component.html b/src/app/admin/admin-notify-dashboard/admin-notify-logs/admin-notify-logs.component.html new file mode 100644 index 0000000000..494e082ddf --- /dev/null +++ b/src/app/admin/admin-notify-dashboard/admin-notify-logs/admin-notify-logs.component.html @@ -0,0 +1 @@ +

admin-notify-logs works!

diff --git a/src/app/admin/admin-notify-dashboard/admin-notify-logs/admin-notify-logs.component.scss b/src/app/admin/admin-notify-dashboard/admin-notify-logs/admin-notify-logs.component.scss new file mode 100644 index 0000000000..e69de29bb2 diff --git a/src/app/admin/admin-notify-dashboard/admin-notify-logs/admin-notify-logs.component.spec.ts b/src/app/admin/admin-notify-dashboard/admin-notify-logs/admin-notify-logs.component.spec.ts new file mode 100644 index 0000000000..12a0feae64 --- /dev/null +++ b/src/app/admin/admin-notify-dashboard/admin-notify-logs/admin-notify-logs.component.spec.ts @@ -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; + + beforeEach(async () => { + await TestBed.configureTestingModule({ + declarations: [ AdminNotifyLogsComponent ] + }) + .compileComponents(); + + fixture = TestBed.createComponent(AdminNotifyLogsComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/src/app/admin/admin-notify-dashboard/admin-notify-logs/admin-notify-logs.component.ts b/src/app/admin/admin-notify-dashboard/admin-notify-logs/admin-notify-logs.component.ts new file mode 100644 index 0000000000..67552130a0 --- /dev/null +++ b/src/app/admin/admin-notify-dashboard/admin-notify-logs/admin-notify-logs.component.ts @@ -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 { + +} diff --git a/src/app/admin/admin-notify-dashboard/admin-notify-metrics/admin-notify-metrics.component.html b/src/app/admin/admin-notify-dashboard/admin-notify-metrics/admin-notify-metrics.component.html new file mode 100644 index 0000000000..f4e0e45279 --- /dev/null +++ b/src/app/admin/admin-notify-dashboard/admin-notify-metrics/admin-notify-metrics.component.html @@ -0,0 +1,11 @@ +
+
+
+
+ +
0
+
{{ box.title | translate }}
+
+
+
+
diff --git a/src/app/admin/admin-notify-dashboard/admin-notify-metrics/admin-notify-metrics.component.scss b/src/app/admin/admin-notify-dashboard/admin-notify-metrics/admin-notify-metrics.component.scss new file mode 100644 index 0000000000..e69de29bb2 diff --git a/src/app/admin/admin-notify-dashboard/admin-notify-metrics/admin-notify-metrics.component.spec.ts b/src/app/admin/admin-notify-dashboard/admin-notify-metrics/admin-notify-metrics.component.spec.ts new file mode 100644 index 0000000000..10e256a701 --- /dev/null +++ b/src/app/admin/admin-notify-dashboard/admin-notify-metrics/admin-notify-metrics.component.spec.ts @@ -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; + + beforeEach(async () => { + await TestBed.configureTestingModule({ + declarations: [ AdminNotifyMetricsComponent ] + }) + .compileComponents(); + + fixture = TestBed.createComponent(AdminNotifyMetricsComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/src/app/admin/admin-notify-dashboard/admin-notify-metrics/admin-notify-metrics.component.ts b/src/app/admin/admin-notify-dashboard/admin-notify-metrics/admin-notify-metrics.component.ts new file mode 100644 index 0000000000..d1d7ca4bd5 --- /dev/null +++ b/src/app/admin/admin-notify-dashboard/admin-notify-metrics/admin-notify-metrics.component.ts @@ -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; +} diff --git a/src/app/admin/admin-notify-dashboard/admin-notify-metrics/admin-notify-metrics.config.ts b/src/app/admin/admin-notify-dashboard/admin-notify-metrics/admin-notify-metrics.config.ts new file mode 100644 index 0000000000..7880e78ebf --- /dev/null +++ b/src/app/admin/admin-notify-dashboard/admin-notify-metrics/admin-notify-metrics.config.ts @@ -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 + }, + ] + } +] diff --git a/src/app/admin/admin-notify-dashboard/admin-notify-metrics/admin-notify-metrics.model.ts b/src/app/admin/admin-notify-dashboard/admin-notify-metrics/admin-notify-metrics.model.ts new file mode 100644 index 0000000000..3b47deffa1 --- /dev/null +++ b/src/app/admin/admin-notify-dashboard/admin-notify-metrics/admin-notify-metrics.model.ts @@ -0,0 +1,10 @@ +export interface AdminNotifyMetricsBox { + color: string; + title: string; + index: number +} + +export interface AdminNotifyMetricsRow { + title: string; + boxes: AdminNotifyMetricsBox[] +} diff --git a/src/app/admin/admin-routing-paths.ts b/src/app/admin/admin-routing-paths.ts index 511680bfd8..c08139bd87 100644 --- a/src/app/admin/admin-routing-paths.ts +++ b/src/app/admin/admin-routing-paths.ts @@ -4,6 +4,8 @@ import { getAdminModuleRoute } from '../app-routing-paths'; export const REGISTRIES_MODULE_PATH = 'registries'; export const NOTIFICATIONS_MODULE_PATH = 'notifications'; +export const NOTIFY_DASHBOARD_MODULE_PATH = 'notify-dashboard'; + export const LDN_PATH = 'ldn'; export function getRegistriesModuleRoute() { @@ -13,7 +15,6 @@ export function getRegistriesModuleRoute() { export function getNotificationsModuleRoute() { return new URLCombiner(getAdminModuleRoute(), NOTIFICATIONS_MODULE_PATH).toString(); } - export function getLdnServicesModuleRoute() { return new URLCombiner(getAdminModuleRoute(), LDN_PATH).toString(); } diff --git a/src/app/admin/admin-routing.module.ts b/src/app/admin/admin-routing.module.ts index ecafa0232f..e30a5b20fb 100644 --- a/src/app/admin/admin-routing.module.ts +++ b/src/app/admin/admin-routing.module.ts @@ -6,7 +6,12 @@ import { I18nBreadcrumbResolver } from '../core/breadcrumbs/i18n-breadcrumb.reso import { AdminWorkflowPageComponent } from './admin-workflow-page/admin-workflow-page.component'; import { I18nBreadcrumbsService } from '../core/breadcrumbs/i18n-breadcrumbs.service'; 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 { 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'} }, { - path: 'notify-dashboard', - resolve: { breadcrumb: I18nBreadcrumbResolver }, - component: AdminNotifyDashboardComponent, - data: {title: 'todo', breadcrumbKey: 'todo'} + path: NOTIFY_DASHBOARD_MODULE_PATH, + loadChildren: () => import('./admin-notify-dashboard/admin-notify-dashboard.module') + .then((m) => m.AdminNotifyDashboardModule), }, ]), ], diff --git a/src/app/admin/admin.module.ts b/src/app/admin/admin.module.ts index ee0d3b0d4e..d77c3213b3 100644 --- a/src/app/admin/admin.module.ts +++ b/src/app/admin/admin.module.ts @@ -12,7 +12,6 @@ import { ExpandableAdminSidebarSectionComponent } from './admin-sidebar/expandab import { BatchImportPageComponent } from './admin-import-batch-page/batch-import-page.component'; import { UiSwitchModule } from 'ngx-ui-switch'; import { UploadModule } from '../shared/upload/upload.module'; -import { AdminNotifyDashboardComponent } from './admin-notify-dashboard/admin-notify-dashboard.component'; const ENTRY_COMPONENTS = [ // put only entry components that use custom decorator @@ -36,7 +35,6 @@ const ENTRY_COMPONENTS = [ AdminCurationTasksComponent, MetadataImportPageComponent, BatchImportPageComponent, - AdminNotifyDashboardComponent ] }) export class AdminModule { diff --git a/src/app/menu.resolver.ts b/src/app/menu.resolver.ts index 671440d48d..15848963c9 100644 --- a/src/app/menu.resolver.ts +++ b/src/app/menu.resolver.ts @@ -362,19 +362,6 @@ export class MenuResolver implements Resolve { icon: 'terminal', 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', active: false, @@ -679,17 +666,40 @@ export class MenuResolver implements Resolve { icon: 'exclamation-circle', index: 12 }, + /* COAR Notify section */ { - id: 'notify_dashboard', + id: 'coar_notify', active: false, 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: { type: MenuItemType.LINK, - text: 'menu.section.notify-dashboard', + text: 'menu.section.notify_dashboard', link: '/admin/notify-dashboard' } 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, }, ]; diff --git a/src/assets/i18n/en.json5 b/src/assets/i18n/en.json5 index 8a504fac47..0acbba29c7 100644 --- a/src/assets/i18n/en.json5 +++ b/src/assets/i18n/en.json5 @@ -28,6 +28,8 @@ "admin.notifications.recitersuggestion.page.title": "Suggestions", + "admin.notify.dashboard": "Dashboard", + "error-page.description.401": "unauthorized", "error-page.description.403": "forbidden", @@ -3075,7 +3077,9 @@ "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", @@ -3439,6 +3443,14 @@ "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.no-title": "Untitled",