From eaa58a7caf11fe89a9459f2f479ae760dbc37a9c Mon Sep 17 00:00:00 2001 From: Jose Alberto Hernandez Date: Wed, 26 Oct 2022 21:32:08 -0500 Subject: [PATCH] External events management view --- .../manage-external-events.component.html | 46 +++++++++++ .../manage-external-events.component.scss | 5 ++ .../manage-external-events.component.spec.ts | 25 ++++++ .../manage-external-events.component.ts | 78 +++++++++++++++++++ .../manage-external-events.resolver.spec.ts | 16 ++++ .../manage-external-events.resolver.ts | 27 +++++++ src/app/system/system-routing.module.ts | 16 +++- src/app/system/system.component.html | 8 ++ src/app/system/system.module.ts | 4 +- src/app/system/system.service.ts | 13 ++++ 10 files changed, 236 insertions(+), 2 deletions(-) create mode 100644 src/app/system/manage-external-events/manage-external-events.component.html create mode 100644 src/app/system/manage-external-events/manage-external-events.component.scss create mode 100644 src/app/system/manage-external-events/manage-external-events.component.spec.ts create mode 100644 src/app/system/manage-external-events/manage-external-events.component.ts create mode 100644 src/app/system/manage-external-events/manage-external-events.resolver.spec.ts create mode 100644 src/app/system/manage-external-events/manage-external-events.resolver.ts diff --git a/src/app/system/manage-external-events/manage-external-events.component.html b/src/app/system/manage-external-events/manage-external-events.component.html new file mode 100644 index 000000000..b0646c7fc --- /dev/null +++ b/src/app/system/manage-external-events/manage-external-events.component.html @@ -0,0 +1,46 @@ +
+ +
+ + Filter + + + +
+ +
+
+ +
+ + + + + + + + + + + + + + + +
Event Type {{ event.type }} Status + +
+ Enabled + Disabled +
+
+
+ + + +
+ +
diff --git a/src/app/system/manage-external-events/manage-external-events.component.scss b/src/app/system/manage-external-events/manage-external-events.component.scss new file mode 100644 index 000000000..2c57da3ec --- /dev/null +++ b/src/app/system/manage-external-events/manage-external-events.component.scss @@ -0,0 +1,5 @@ +.container { + .action-button { + margin-left: auto; + } +} diff --git a/src/app/system/manage-external-events/manage-external-events.component.spec.ts b/src/app/system/manage-external-events/manage-external-events.component.spec.ts new file mode 100644 index 000000000..1d0be4cf5 --- /dev/null +++ b/src/app/system/manage-external-events/manage-external-events.component.spec.ts @@ -0,0 +1,25 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing'; + +import { ManageExternalEventsComponent } from './manage-external-events.component'; + +describe('ManageExternalEventsComponent', () => { + let component: ManageExternalEventsComponent; + let fixture: ComponentFixture; + + beforeEach(async () => { + await TestBed.configureTestingModule({ + declarations: [ ManageExternalEventsComponent ] + }) + .compileComponents(); + }); + + beforeEach(() => { + fixture = TestBed.createComponent(ManageExternalEventsComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/src/app/system/manage-external-events/manage-external-events.component.ts b/src/app/system/manage-external-events/manage-external-events.component.ts new file mode 100644 index 000000000..afc8bdd43 --- /dev/null +++ b/src/app/system/manage-external-events/manage-external-events.component.ts @@ -0,0 +1,78 @@ +import { Component, OnInit, ViewChild } from '@angular/core'; +import { MatPaginator } from '@angular/material/paginator'; +import { MatSort } from '@angular/material/sort'; +import { MatTableDataSource } from '@angular/material/table'; +import { ActivatedRoute } from '@angular/router'; +import { SystemService } from '../system.service'; + +@Component({ + selector: 'mifosx-manage-external-events', + templateUrl: './manage-external-events.component.html', + styleUrls: ['./manage-external-events.component.scss'] +}) +export class ManageExternalEventsComponent implements OnInit { + + /** Events Data. */ + eventsData: any; + externalEventConfigurations: any = {}; + + existAnyUpdate = false; + + /** Columns to be displayed in events table. */ + displayedColumns: string[] = ['eventType', 'status']; + /** Data source for reports table. */ + dataSource: MatTableDataSource; + + /** Paginator for reports table. */ + @ViewChild(MatPaginator, { static: true }) paginator: MatPaginator; + /** Sorter for reports table. */ + @ViewChild(MatSort, { static: true }) sort: MatSort; + + constructor(private route: ActivatedRoute, + private systemService: SystemService) { + this.route.data.subscribe((data: { events: any }) => { + this.eventsData = data.events.externalEventConfiguration; + }); + } + + ngOnInit() { + this.setEventDatasource(); + } + + /** + * Initializes the data source, paginator and sorter for events table. + */ + setEventDatasource() { + this.dataSource = new MatTableDataSource(this.eventsData); + this.dataSource.paginator = this.paginator; + this.dataSource.sort = this.sort; + } + + /** + * Enables/Disables respective event + */ + toggleStatus(event: any) { + this.externalEventConfigurations[event.type] = !event.enabled; + this.existAnyUpdate = true; + } + + /** + * Filter using the event type value + */ + applyFilter(filterValue: string) { + this.dataSource.filter = filterValue.trim().toLowerCase(); + } + + /** + * send the changes to the backend + */ + applyChanges() { + const payload = { + externalEventConfigurations: this.externalEventConfigurations + }; + + this.systemService.putExternalEventConfiguration(payload).subscribe(() => { + this.existAnyUpdate = false; + }); + } +} diff --git a/src/app/system/manage-external-events/manage-external-events.resolver.spec.ts b/src/app/system/manage-external-events/manage-external-events.resolver.spec.ts new file mode 100644 index 000000000..0fef18fef --- /dev/null +++ b/src/app/system/manage-external-events/manage-external-events.resolver.spec.ts @@ -0,0 +1,16 @@ +import { TestBed } from '@angular/core/testing'; + +import { ManageExternalEventsResolver } from './manage-external-events.resolver'; + +describe('ManageExternalEventsResolver', () => { + let resolver: ManageExternalEventsResolver; + + beforeEach(() => { + TestBed.configureTestingModule({}); + resolver = TestBed.inject(ManageExternalEventsResolver); + }); + + it('should be created', () => { + expect(resolver).toBeTruthy(); + }); +}); diff --git a/src/app/system/manage-external-events/manage-external-events.resolver.ts b/src/app/system/manage-external-events/manage-external-events.resolver.ts new file mode 100644 index 000000000..89add373d --- /dev/null +++ b/src/app/system/manage-external-events/manage-external-events.resolver.ts @@ -0,0 +1,27 @@ +import { Injectable } from '@angular/core'; +import { + Router, Resolve, + RouterStateSnapshot, + ActivatedRouteSnapshot +} from '@angular/router'; +import { Observable, of } from 'rxjs'; +import { SystemService } from '../system.service'; + +@Injectable({ + providedIn: 'root' +}) +export class ManageExternalEventsResolver implements Resolve { + + /** + * @param {SystemService} systemService System service. + */ + constructor(private systemService: SystemService) {} + + /** + * Returns the Configuration data. + * @returns {Observable} + */ + resolve(route: ActivatedRouteSnapshot): Observable { + return this.systemService.getExternalEventConfiguration(); + } +} diff --git a/src/app/system/system-routing.module.ts b/src/app/system/system-routing.module.ts index 56571f8a2..1ca1197db 100644 --- a/src/app/system/system-routing.module.ts +++ b/src/app/system/system-routing.module.ts @@ -87,6 +87,8 @@ import { ConfigurationsComponent } from './configurations/configurations.compone import { GlobalConfigurationResolver } from './configurations/global-configurations-tab/global-configuration.resolver'; import { EditConfigurationComponent } from './configurations/global-configurations-tab/edit-configuration/edit-configuration.component'; import { ManageJobsComponent } from './manage-jobs/manage-jobs.component'; +import { ManageExternalEventsComponent } from './manage-external-events/manage-external-events.component'; +import { ManageExternalEventsResolver } from './manage-external-events/manage-external-events.resolver'; const routes: Routes = [ Route.withShell([ @@ -137,7 +139,19 @@ const routes: Routes = [ ] } ], - + }, + { + path: 'external-events', + data: { title: extract('Manage External Events'), breadcrumb: 'Manage External Events' }, + children: [ + { + path: '', + component: ManageExternalEventsComponent, + resolve: { + events: ManageExternalEventsResolver + } + }, + ] }, { path: 'entity-to-entity-mapping', diff --git a/src/app/system/system.component.html b/src/app/system/system.component.html index e2da772fc..c7c104cf2 100644 --- a/src/app/system/system.component.html +++ b/src/app/system/system.component.html @@ -72,6 +72,14 @@

Manage your Services

+ + + + +

Manage External Events

+

External Events configuration, to enable or disable the event publication

+
+ diff --git a/src/app/system/system.module.ts b/src/app/system/system.module.ts index a61e0de8b..43fc22d34 100644 --- a/src/app/system/system.module.ts +++ b/src/app/system/system.module.ts @@ -69,6 +69,7 @@ import { NgxGraphModule } from '@swimlane/ngx-graph'; import { BrowserAnimationsModule } from '@angular/platform-browser/animations'; import { WorkflowJobsComponent } from './manage-jobs/workflow-jobs/workflow-jobs.component'; import { DragDropModule } from '@angular/cdk/drag-drop'; +import { ManageExternalEventsComponent } from './manage-external-events/manage-external-events.component'; @NgModule({ imports: [ @@ -137,7 +138,8 @@ import { DragDropModule } from '@angular/cdk/drag-drop'; ManageJobsComponent, ManageSchedulerJobsComponent, WorkflowJobsComponent, - WorkflowDiagramComponent + WorkflowDiagramComponent, + ManageExternalEventsComponent ], }) export class SystemModule { } diff --git a/src/app/system/system.service.ts b/src/app/system/system.service.ts index cf0e5f58f..775ed0e41 100644 --- a/src/app/system/system.service.ts +++ b/src/app/system/system.service.ts @@ -670,5 +670,18 @@ export class SystemService { return this.http.put('/permissions', data, { params: httpParams }); } + /** + * @returns {Observable} + */ + getExternalEventConfiguration(): Observable { + return this.http.get('/externalevents/configuration'); + } + + /** + * @returns {Observable} + */ + putExternalEventConfiguration(payload: any): Observable { + return this.http.put('/externalevents/configuration', payload); + } }