From f9839b14ed6a6eade4f33075425771192e1ecf24 Mon Sep 17 00:00:00 2001 From: Thomas Georgios Giannos Date: Thu, 4 Apr 2024 13:52:13 +0300 Subject: [PATCH] Added new maintenance tasks in the UI. Old indexes management component merged with the new one viewed on /maintenance-tasks --- dmp-frontend/src/app/app-routing.module.ts | 14 +- .../maintenance/maintenance.service.ts | 14 ++ .../index-managment.component.html | 15 -- .../index-managment.component.scss | 7 - .../index-managment.component.ts | 87 ------------ .../index-managment/index-managment.module.ts | 20 --- .../index-managment.routing.ts | 15 -- .../maintenance-tasks.component.html | 43 +++++- .../maintenance-tasks.component.ts | 129 ++++++++++++++++++ .../src/app/ui/sidebar/sidebar.component.ts | 2 +- dmp-frontend/src/assets/i18n/en.json | 26 +++- 11 files changed, 211 insertions(+), 161 deletions(-) delete mode 100644 dmp-frontend/src/app/ui/admin/index-managment/index-managment.component.html delete mode 100644 dmp-frontend/src/app/ui/admin/index-managment/index-managment.component.scss delete mode 100644 dmp-frontend/src/app/ui/admin/index-managment/index-managment.component.ts delete mode 100644 dmp-frontend/src/app/ui/admin/index-managment/index-managment.module.ts delete mode 100644 dmp-frontend/src/app/ui/admin/index-managment/index-managment.routing.ts diff --git a/dmp-frontend/src/app/app-routing.module.ts b/dmp-frontend/src/app/app-routing.module.ts index 63463d9bd..c2503f871 100644 --- a/dmp-frontend/src/app/app-routing.module.ts +++ b/dmp-frontend/src/app/app-routing.module.ts @@ -329,17 +329,6 @@ const appRoutes: Routes = [ }) }, }, - { - path: 'index-managment', - loadChildren: () => import('./ui/admin/index-managment/index-managment.module').then(m => m.IndexManagmentModule), - data: { - authContext: { - permissions: [AppPermission.ViewMaintenancePage] - }, - breadcrumb: true, - title: 'GENERAL.TITLES.INDEX-MANAGMENT' - }, - }, { path: 'maintenance-tasks', loadChildren: () => import('./ui/admin/maintenance-tasks/maintenance-tasks.module').then(m => m.MaintenanceTasksModule), @@ -347,7 +336,8 @@ const appRoutes: Routes = [ authContext: { permissions: [AppPermission.ViewMaintenancePage] }, - breadcrumb: true + breadcrumb: true, + title: 'GENERAL.TITLES.MAINTENANCE-TASKS' }, }, { diff --git a/dmp-frontend/src/app/core/services/maintenance/maintenance.service.ts b/dmp-frontend/src/app/core/services/maintenance/maintenance.service.ts index ce966e3d3..6956048f7 100644 --- a/dmp-frontend/src/app/core/services/maintenance/maintenance.service.ts +++ b/dmp-frontend/src/app/core/services/maintenance/maintenance.service.ts @@ -28,4 +28,18 @@ export class MaintenanceService extends BaseService { .delete(url).pipe( catchError((error: any) => throwError(error))); } + + sendUserTouchEvents(): Observable { + const url = `${this.apiBase}/events/users/touch`; + return this.http + .delete(url).pipe( + catchError((error: any) => throwError(error))); + } + + sendTenantTouchEvents(): Observable { + const url = `${this.apiBase}/events/users/touch`; + return this.http + .delete(url).pipe( + catchError((error: any) => throwError(error))); + } } diff --git a/dmp-frontend/src/app/ui/admin/index-managment/index-managment.component.html b/dmp-frontend/src/app/ui/admin/index-managment/index-managment.component.html deleted file mode 100644 index 828bf809b..000000000 --- a/dmp-frontend/src/app/ui/admin/index-managment/index-managment.component.html +++ /dev/null @@ -1,15 +0,0 @@ -
-
-
-
- -
-
Warning: Danger zone. It might delete Dataset tags if not careful
- - -
-
-
-
-
- diff --git a/dmp-frontend/src/app/ui/admin/index-managment/index-managment.component.scss b/dmp-frontend/src/app/ui/admin/index-managment/index-managment.component.scss deleted file mode 100644 index 700a1f153..000000000 --- a/dmp-frontend/src/app/ui/admin/index-managment/index-managment.component.scss +++ /dev/null @@ -1,7 +0,0 @@ -.root { - // padding-bottom: 2em; - - .button { - margin: 5px; - } -} diff --git a/dmp-frontend/src/app/ui/admin/index-managment/index-managment.component.ts b/dmp-frontend/src/app/ui/admin/index-managment/index-managment.component.ts deleted file mode 100644 index 5f9077200..000000000 --- a/dmp-frontend/src/app/ui/admin/index-managment/index-managment.component.ts +++ /dev/null @@ -1,87 +0,0 @@ -import { Component, OnInit } from '@angular/core'; -import { BaseComponent } from '@common/base/base.component'; -import { takeUntil } from 'rxjs/operators'; -import { UiNotificationService, SnackBarNotificationLevel } from '@app/core/services/notification/ui-notification-service'; -import { TranslateService } from '@ngx-translate/core'; -import { Router } from '@angular/router'; -import { MaintenanceService } from '@app/core/services/maintenance/maintenance.service'; - -@Component({ - selector: 'app-index-managment', - templateUrl: './index-managment.component.html', - styleUrls: ['./index-managment.component.scss'] -}) -export class IndexManagmentComponent extends BaseComponent implements OnInit { - - constructor( - private uiNotificationService: UiNotificationService, - private translate: TranslateService, - private router: Router, - private maintenanceService: MaintenanceService - ) - { - super(); - } - - ngOnInit() { - } - - generateIndex(ev: Event) { - (ev.target as HTMLButtonElement).disabled = true; - // this.datasetService.generateIndex().pipe(takeUntil(this._destroyed)).subscribe( - // response => { - // (ev.target as HTMLButtonElement).disabled = false; - // this.onCallbackSuccess(); - // }, - // error => { - // (ev.target as HTMLButtonElement).disabled = false; - // this.onCallbackError(error); - // } - // ); - this.maintenanceService.generateElasticIndex().pipe(takeUntil(this._destroyed)).subscribe( - response => { - (ev.target as HTMLButtonElement).disabled = false; - this.onCallbackSuccess(); - }, - error => { - (ev.target as HTMLButtonElement).disabled = false; - this.onCallbackError(error); - } - ); - } - - clearIndex(ev: Event) { - (ev.target as HTMLButtonElement).disabled = true; - // this.datasetService.clearIndex().pipe(takeUntil(this._destroyed)).subscribe( - // response => { - // (ev.target as HTMLButtonElement).disabled = false; - // this.onCallbackSuccess(); - // }, - // error => { - // (ev.target as HTMLButtonElement).disabled = false; - // this.onCallbackError(error); - // } - // ); - this.maintenanceService.clearElasticIndex().pipe(takeUntil(this._destroyed)).subscribe( - response => { - (ev.target as HTMLButtonElement).disabled = false; - this.onCallbackSuccess(); - }, - error => { - (ev.target as HTMLButtonElement).disabled = false; - this.onCallbackError(error); - } - ); -} - - onCallbackSuccess(): void { - this.uiNotificationService.snackBarNotification( this.translate.instant('GENERAL.SNACK-BAR.SUCCESSFUL-UPDATE'), SnackBarNotificationLevel.Success); - this.router.navigate(['/reload']).then(() => this.router.navigate(['/index-managment'])); -} - -onCallbackError(error: any) { - this.uiNotificationService.snackBarNotification( error, SnackBarNotificationLevel.Error); - //this.validateAllFormFields(this.formGroup); -} - -} diff --git a/dmp-frontend/src/app/ui/admin/index-managment/index-managment.module.ts b/dmp-frontend/src/app/ui/admin/index-managment/index-managment.module.ts deleted file mode 100644 index 048d5e10f..000000000 --- a/dmp-frontend/src/app/ui/admin/index-managment/index-managment.module.ts +++ /dev/null @@ -1,20 +0,0 @@ -import { NgModule } from '@angular/core'; -import { CommonModule } from '@angular/common'; - -import { IndexManagmentRoutingModule } from './index-managment.routing'; -import { IndexManagmentComponent } from './index-managment.component'; -import { CommonUiModule } from '@common/ui/common-ui.module'; -import { CommonFormsModule } from '@common/forms/common-forms.module'; -import { ConfirmationDialogModule } from '@common/modules/confirmation-dialog/confirmation-dialog.module'; - - -@NgModule({ - declarations: [IndexManagmentComponent], - imports: [ - CommonUiModule, - CommonFormsModule, - ConfirmationDialogModule, - IndexManagmentRoutingModule - ] -}) -export class IndexManagmentModule { } diff --git a/dmp-frontend/src/app/ui/admin/index-managment/index-managment.routing.ts b/dmp-frontend/src/app/ui/admin/index-managment/index-managment.routing.ts deleted file mode 100644 index 928c348b5..000000000 --- a/dmp-frontend/src/app/ui/admin/index-managment/index-managment.routing.ts +++ /dev/null @@ -1,15 +0,0 @@ -import { NgModule } from '@angular/core'; -import { Routes, RouterModule } from '@angular/router'; -import { IndexManagmentComponent } from './index-managment.component'; -import { AdminAuthGuard } from '@app/core/admin-auth-guard.service'; - - -const routes: Routes = [ - { path: '', component: IndexManagmentComponent, canActivate: [AdminAuthGuard] }, -]; - -@NgModule({ - imports: [RouterModule.forChild(routes)], - exports: [RouterModule] -}) -export class IndexManagmentRoutingModule { } diff --git a/dmp-frontend/src/app/ui/admin/maintenance-tasks/maintenance-tasks.component.html b/dmp-frontend/src/app/ui/admin/maintenance-tasks/maintenance-tasks.component.html index 804806fdc..5b23629c8 100644 --- a/dmp-frontend/src/app/ui/admin/maintenance-tasks/maintenance-tasks.component.html +++ b/dmp-frontend/src/app/ui/admin/maintenance-tasks/maintenance-tasks.component.html @@ -1,10 +1,47 @@ - + - + + + --> +
+
+
+
+ + + + + {{language.instant('MAINTENANCE-TASKS.SECTIONS.INDEXES.TITLE')}} + + + {{language.instant('MAINTENANCE-TASKS.SECTIONS.INDEXES.DESCRIPTION')}} + + +
+ + +
+
+ + + + {{language.instant('MAINTENANCE-TASKS.SECTIONS.EVENTS.TITLE')}} + + + {{language.instant('MAINTENANCE-TASKS.SECTIONS.EVENTS.DESCRIPTION')}} + + +
+ + +
+
+
+
+
diff --git a/dmp-frontend/src/app/ui/admin/maintenance-tasks/maintenance-tasks.component.ts b/dmp-frontend/src/app/ui/admin/maintenance-tasks/maintenance-tasks.component.ts index 65b3ca8b0..17f201d53 100644 --- a/dmp-frontend/src/app/ui/admin/maintenance-tasks/maintenance-tasks.component.ts +++ b/dmp-frontend/src/app/ui/admin/maintenance-tasks/maintenance-tasks.component.ts @@ -1,9 +1,12 @@ import { Component, OnInit } from '@angular/core'; +import { MatDialog } from '@angular/material/dialog'; import { Router } from '@angular/router'; import { MaintenanceService } from '@app/core/services/maintenance/maintenance.service'; import { SnackBarNotificationLevel, UiNotificationService } from '@app/core/services/notification/ui-notification-service'; import { BaseComponent } from '@common/base/base.component'; +import { ConfirmationDialogComponent } from '@common/modules/confirmation-dialog/confirmation-dialog.component'; import { TranslateService } from '@ngx-translate/core'; +import { takeUntil } from 'rxjs/operators'; @Component({ selector: 'app-maintenance-tasks', @@ -13,6 +16,8 @@ import { TranslateService } from '@ngx-translate/core'; export class MaintenanceTasksComponent extends BaseComponent implements OnInit { constructor( + protected dialog: MatDialog, + protected language: TranslateService, private maintenanceService: MaintenanceService, private uiNotificationService: UiNotificationService, private translate: TranslateService, @@ -53,6 +58,130 @@ export class MaintenanceTasksComponent extends BaseComponent implements OnInit { // ); // } + generateIndex(ev: Event) { + this.dialog.open(ConfirmationDialogComponent, { + data: { + message: this.language.instant('MAINTENANCE-TASKS.CONFIRMATION.MESSAGE'), + confirmButton: this.language.instant('GENERAL.CONFIRMATION-DIALOG.ACTIONS.CONFIRM'), + cancelButton: this.language.instant('GENERAL.CONFIRMATION-DIALOG.ACTIONS.CANCEL') + }, + maxWidth: '30em' + }) + .afterClosed() + .subscribe(confirm => { + if (confirm) { + this.doGenerateIndex(ev); + } + }); + } + + private doGenerateIndex(ev: Event) { + (ev.target as HTMLButtonElement).disabled = true; + this.maintenanceService.generateElasticIndex().pipe(takeUntil(this._destroyed)).subscribe( + _ => { + (ev.target as HTMLButtonElement).disabled = false; + this.onCallbackSuccess(); + }, + error => { + (ev.target as HTMLButtonElement).disabled = false; + this.onCallbackError(error); + } + ); + } + + clearIndex(ev: Event) { + this.dialog.open(ConfirmationDialogComponent, { + data: { + message: this.language.instant('MAINTENANCE-TASKS.CONFIRMATION.MESSAGE'), + confirmButton: this.language.instant('GENERAL.CONFIRMATION-DIALOG.ACTIONS.CONFIRM'), + cancelButton: this.language.instant('GENERAL.CONFIRMATION-DIALOG.ACTIONS.CANCEL') + }, + maxWidth: '30em' + }) + .afterClosed() + .subscribe(confirm => { + if (confirm) { + this.doClearIndex(ev); + } + }); + } + + private doClearIndex(ev: Event) { + (ev.target as HTMLButtonElement).disabled = true; + this.maintenanceService.clearElasticIndex().pipe(takeUntil(this._destroyed)).subscribe( + _ => { + (ev.target as HTMLButtonElement).disabled = false; + this.onCallbackSuccess(); + }, + error => { + (ev.target as HTMLButtonElement).disabled = false; + this.onCallbackError(error); + } + ); + } + + sendUserTouchEvents(ev: Event) { + this.dialog.open(ConfirmationDialogComponent, { + data: { + message: this.language.instant('MAINTENANCE-TASKS.CONFIRMATION.MESSAGE'), + confirmButton: this.language.instant('GENERAL.CONFIRMATION-DIALOG.ACTIONS.CONFIRM'), + cancelButton: this.language.instant('GENERAL.CONFIRMATION-DIALOG.ACTIONS.CANCEL') + }, + maxWidth: '30em' + }) + .afterClosed() + .subscribe(confirm => { + if (confirm) { + this.doSendUserTouchEvents(ev); + } + }); + } + + private doSendUserTouchEvents(ev: Event) { + (ev.target as HTMLButtonElement).disabled = true; + this.maintenanceService.sendUserTouchEvents().pipe(takeUntil(this._destroyed)).subscribe( + _ => { + (ev.target as HTMLButtonElement).disabled = false; + this.onCallbackSuccess(); + }, + error => { + (ev.target as HTMLButtonElement).disabled = false; + this.onCallbackError(error); + } + ); + } + + sendTenantTouchEvents(ev: Event) { + this.dialog.open(ConfirmationDialogComponent, { + data: { + message: this.language.instant('MAINTENANCE-TASKS.CONFIRMATION.MESSAGE'), + confirmButton: this.language.instant('GENERAL.CONFIRMATION-DIALOG.ACTIONS.CONFIRM'), + cancelButton: this.language.instant('GENERAL.CONFIRMATION-DIALOG.ACTIONS.CANCEL') + }, + maxWidth: '30em' + }) + .afterClosed() + .subscribe(confirm => { + if (confirm) { + this.doSendTenantTouchEvents(ev); + } + }); + } + + private doSendTenantTouchEvents(ev: Event) { + (ev.target as HTMLButtonElement).disabled = true; + this.maintenanceService.sendTenantTouchEvents().pipe(takeUntil(this._destroyed)).subscribe( + _ => { + (ev.target as HTMLButtonElement).disabled = false; + this.onCallbackSuccess(); + }, + error => { + (ev.target as HTMLButtonElement).disabled = false; + this.onCallbackError(error); + } + ); + } + onCallbackSuccess(): void { this.uiNotificationService.snackBarNotification(this.translate.instant('GENERAL.SNACK-BAR.SUCCESSFUL-UPDATE'), SnackBarNotificationLevel.Success); this.router.navigate(['/reload']).then(() => this.router.navigate(['/maintenance-tasks'])); diff --git a/dmp-frontend/src/app/ui/sidebar/sidebar.component.ts b/dmp-frontend/src/app/ui/sidebar/sidebar.component.ts index 7658dccf8..c1a78cc6b 100644 --- a/dmp-frontend/src/app/ui/sidebar/sidebar.component.ts +++ b/dmp-frontend/src/app/ui/sidebar/sidebar.component.ts @@ -119,7 +119,7 @@ export class SidebarComponent implements OnInit { if (this.authentication.hasPermission(AppPermission.ViewSupportiveMaterialPage)) this.adminItems.routes.push({ path: '/supportive-material', title: 'SIDE-BAR.SUPPORTIVE-MATERIAL', icon: 'help_center' }); if (this.authentication.hasPermission(AppPermission.ViewNotificationTemplatePage)) this.adminItems.routes.push({ path: '/notification-templates', title: 'SIDE-BAR.NOTIFICATION-TEMPLATES', icon: 'grid_guides' }); if (this.authentication.hasPermission(AppPermission.ViewNotificationPage)) this.adminItems.routes.push({ path: '/notifications', title: 'SIDE-BAR.NOTIFICATIONS', icon: 'notifications' }); - if (this.authentication.hasPermission(AppPermission.ViewMaintenancePage)) this.adminItems.routes.push({ path: '/index-managment', title: 'SIDE-BAR.MAINTENANCE', icon: 'build' }); + if (this.authentication.hasPermission(AppPermission.ViewMaintenancePage)) this.adminItems.routes.push({ path: '/maintenance-tasks', title: 'SIDE-BAR.MAINTENANCE', icon: 'build' }); this.groupMenuItems.push(this.adminItems); this.infoItems = { diff --git a/dmp-frontend/src/assets/i18n/en.json b/dmp-frontend/src/assets/i18n/en.json index d99d18a79..a9aed788c 100644 --- a/dmp-frontend/src/assets/i18n/en.json +++ b/dmp-frontend/src/assets/i18n/en.json @@ -90,7 +90,8 @@ "USERS": "Users", "PROFILE": "My Profile", "LOGIN": "Login", - "DATASET-OVERVIEW": "Description Overview" + "DATASET-OVERVIEW": "Description Overview", + "MAINTENANCE-TASKS": "Maintenance" }, "FILE-TRANSFORMER": { "PDF": "PDF", @@ -271,6 +272,29 @@ "PRIVATE": "Hidden" } }, + "MAINTENANCE-TASKS": { + "SECTIONS": { + "INDEXES": { + "TITLE": "Manage indexes", + "DESCRIPTION": "From here you can manage the Elastic indexes", + "ACTIONS": { + "GENERATE-INDEX": "Generate Index", + "CLEAR-INDEX": "Clear Index" + } + }, + "EVENTS": { + "TITLE": "Manage events", + "DESCRIPTION": "From here you can manage the Message Queue events", + "ACTIONS": { + "SEND-USER-TOUCH": "Send user touch events", + "SEND-TENANT-TOUCH": "Send tenant touch events" + } + } + }, + "CONFIRMATION": { + "MESSAGE": "Are you sure you want to perform this action?" + } + }, "DESCRIPTION-TEMPLATE-EDITOR": { "TITLE": { "NEW": "New API Client",