From edcbc5b380de5abb403d2053ee1271f5846c8ea0 Mon Sep 17 00:00:00 2001 From: Benura Abeywardena <43112139+BLasan@users.noreply.github.com> Date: Wed, 13 May 2020 08:51:29 +0530 Subject: [PATCH] feat: add edit scheduler job component (#678) Fixes: #677 --- .../edit-scheduler-job.component.html | 44 ++++++++++++ .../edit-scheduler-job.component.scss | 3 + .../edit-scheduler-job.component.spec.ts | 25 +++++++ .../edit-scheduler-job.component.ts | 68 +++++++++++++++++++ .../manage-scheduler-job.resolver.ts | 31 +++++++++ src/app/system/system-routing.module.ts | 26 +++++-- src/app/system/system.module.ts | 4 +- src/app/system/system.service.ts | 15 +++- 8 files changed, 207 insertions(+), 9 deletions(-) create mode 100644 src/app/system/manage-scheduler-jobs/edit-scheduler-job/edit-scheduler-job.component.html create mode 100644 src/app/system/manage-scheduler-jobs/edit-scheduler-job/edit-scheduler-job.component.scss create mode 100644 src/app/system/manage-scheduler-jobs/edit-scheduler-job/edit-scheduler-job.component.spec.ts create mode 100644 src/app/system/manage-scheduler-jobs/edit-scheduler-job/edit-scheduler-job.component.ts create mode 100644 src/app/system/manage-scheduler-jobs/manage-scheduler-job.resolver.ts diff --git a/src/app/system/manage-scheduler-jobs/edit-scheduler-job/edit-scheduler-job.component.html b/src/app/system/manage-scheduler-jobs/edit-scheduler-job/edit-scheduler-job.component.html new file mode 100644 index 000000000..9113c6646 --- /dev/null +++ b/src/app/system/manage-scheduler-jobs/edit-scheduler-job/edit-scheduler-job.component.html @@ -0,0 +1,44 @@ +
+ + + +
+ + + +
+ + + Job Name + + + Job Name is required + + + + + Cron Expression + + + Cron Expression is required + + + + + Is job active? + + +
+ + + + + + +
+ +
+ +
+ +
diff --git a/src/app/system/manage-scheduler-jobs/edit-scheduler-job/edit-scheduler-job.component.scss b/src/app/system/manage-scheduler-jobs/edit-scheduler-job/edit-scheduler-job.component.scss new file mode 100644 index 000000000..d774f68da --- /dev/null +++ b/src/app/system/manage-scheduler-jobs/edit-scheduler-job/edit-scheduler-job.component.scss @@ -0,0 +1,3 @@ +.container { + max-width: 37rem; +} diff --git a/src/app/system/manage-scheduler-jobs/edit-scheduler-job/edit-scheduler-job.component.spec.ts b/src/app/system/manage-scheduler-jobs/edit-scheduler-job/edit-scheduler-job.component.spec.ts new file mode 100644 index 000000000..c3cec580b --- /dev/null +++ b/src/app/system/manage-scheduler-jobs/edit-scheduler-job/edit-scheduler-job.component.spec.ts @@ -0,0 +1,25 @@ +import { async, ComponentFixture, TestBed } from '@angular/core/testing'; + +import { EditSchedulerJobComponent } from './edit-scheduler-job.component'; + +describe('EditSchedulerJobComponent', () => { + let component: EditSchedulerJobComponent; + let fixture: ComponentFixture; + + beforeEach(async(() => { + TestBed.configureTestingModule({ + declarations: [ EditSchedulerJobComponent ] + }) + .compileComponents(); + })); + + beforeEach(() => { + fixture = TestBed.createComponent(EditSchedulerJobComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/src/app/system/manage-scheduler-jobs/edit-scheduler-job/edit-scheduler-job.component.ts b/src/app/system/manage-scheduler-jobs/edit-scheduler-job/edit-scheduler-job.component.ts new file mode 100644 index 000000000..33201a2d9 --- /dev/null +++ b/src/app/system/manage-scheduler-jobs/edit-scheduler-job/edit-scheduler-job.component.ts @@ -0,0 +1,68 @@ +/** Angular Imports */ +import { Component, OnInit } from '@angular/core'; +import { ActivatedRoute, Router } from '@angular/router'; +import { FormBuilder, Validators } from '@angular/forms'; + +/** Custom Services */ +import { SystemService } from 'app/system/system.service'; + +/** + * Edit scheduler job component. + */ +@Component({ + selector: 'mifosx-edit-scheduler-job', + templateUrl: './edit-scheduler-job.component.html', + styleUrls: ['./edit-scheduler-job.component.scss'] +}) +export class EditSchedulerJobComponent implements OnInit { + + /** Job Data. */ + jobData: any; + /** Job Form. */ + jobForm: any; + + /** + * Retrieves the selected job data from `resolve`. + * @param {FormBuilder} formBuilder Form Builder. + * @param {SystemService} systemService System Service. + * @param {Router} router Router for navigation. + * @param {ActivatedRoute} route Activated Route. + */ + constructor(private route: ActivatedRoute, + private systemService: SystemService, + private router: Router, + private formBuilder: FormBuilder ) { + this.route.data.subscribe((data: { jobSelected: any }) => { + this.jobData = data.jobSelected; + }); + } + + /** + * Creates and sets job form. + */ + ngOnInit() { + this.createJobForm(); + } + + /** + * Creates and sets job form. + */ + createJobForm() { + this.jobForm = this.formBuilder.group({ + 'displayName': [this.jobData.displayName, Validators.required], + 'cronExpression': [this.jobData.cronExpression, Validators.required], + 'active': [this.jobData.active] + }); + } + + /** + * Submits the edit job form. + */ + submit() { + this.systemService.updateScheduler(this.jobData.jobId, this.jobForm.value) + .subscribe(() => { + this.router.navigate(['../'], { relativeTo: this.route }); + }); + } + +} diff --git a/src/app/system/manage-scheduler-jobs/manage-scheduler-job.resolver.ts b/src/app/system/manage-scheduler-jobs/manage-scheduler-job.resolver.ts new file mode 100644 index 000000000..2a20fa335 --- /dev/null +++ b/src/app/system/manage-scheduler-jobs/manage-scheduler-job.resolver.ts @@ -0,0 +1,31 @@ +/** Angular Imports */ +import { Injectable } from '@angular/core'; +import { Resolve, ActivatedRouteSnapshot } from '@angular/router'; + +/** rxjs Imports */ +import { Observable} from 'rxjs'; + +/** Custom Services */ +import { SystemService } from '../system.service'; + +/** + * Edit Scheduler Job data resolver. + */ +@Injectable() +export class ManageSchedulerJobResolver implements Resolve { + + /** + * @param {SystemService} systemService System service. + */ + constructor(private systemService: SystemService) {} + + /** + * Returns the edit scheduler jobs data. + * @returns {Observable} + */ + resolve(route: ActivatedRouteSnapshot): Observable { + const jobId = route.paramMap.get('id'); + return this.systemService.getSelectedJob(jobId); + } + +} diff --git a/src/app/system/system-routing.module.ts b/src/app/system/system-routing.module.ts index 41c68aaf2..fe62902a8 100644 --- a/src/app/system/system-routing.module.ts +++ b/src/app/system/system-routing.module.ts @@ -73,6 +73,8 @@ import { ReportResolver } from './manage-reports/report.resolver'; import { ReportTemplateResolver } from './manage-reports/report-template.resolver'; import { ViewSchedulerJobComponent } from './manage-scheduler-jobs/view-scheduler-job/view-scheduler-job.component'; import { ViewSchedulerJobResolver } from './manage-scheduler-jobs/view-scheduler-job/view-scheduler-job.resolver'; +import { EditSchedulerJobComponent } from './manage-scheduler-jobs/edit-scheduler-job/edit-scheduler-job.component'; +import { ManageSchedulerJobResolver } from './manage-scheduler-jobs/manage-scheduler-job.resolver'; const routes: Routes = [ Route.withShell([ @@ -345,10 +347,23 @@ const routes: Routes = [ { path: ':id', data: { title: extract('View Scheduler Job'), routeParamBreadcrumb: 'id' }, - component: ViewSchedulerJobComponent, - resolve: { - selectedJob: ViewSchedulerJobResolver - } + children: [ + { + path: '', + component: ViewSchedulerJobComponent, + resolve: { + selectedJob: ViewSchedulerJobResolver + } + }, + { + path: 'edit', + component: EditSchedulerJobComponent, + data: { title: extract('Edit Scheduler Job'), routeParamBreadcrumb: false, breadcrumb: 'Edit' }, + resolve: { + jobSelected: ManageSchedulerJobResolver + } + } + ] } ], }, @@ -514,7 +529,8 @@ const routes: Routes = [ ReportTemplateResolver, AuditTrailSearchTemplateResolver, AuditTrailResolver, - ViewSchedulerJobResolver + ViewSchedulerJobResolver, + ManageSchedulerJobResolver ] }) export class SystemRoutingModule { } diff --git a/src/app/system/system.module.ts b/src/app/system/system.module.ts index e89da3dbb..b48d6b798 100644 --- a/src/app/system/system.module.ts +++ b/src/app/system/system.module.ts @@ -50,6 +50,7 @@ import { ColumnDialogComponent } from './manage-data-tables/column-dialog/column import { ReportParameterDialogComponent } from './manage-reports/report-parameter-dialog/report-parameter-dialog.component'; import { AddEventDialogComponent } from './manage-hooks/add-event-dialog/add-event-dialog.component'; import { ViewSchedulerJobComponent } from './manage-scheduler-jobs/view-scheduler-job/view-scheduler-job.component'; +import { EditSchedulerJobComponent } from './manage-scheduler-jobs/edit-scheduler-job/edit-scheduler-job.component'; @NgModule({ imports: [ @@ -98,7 +99,8 @@ import { ViewSchedulerJobComponent } from './manage-scheduler-jobs/view-schedule ColumnDialogComponent, AuditTrailsComponent, ViewAuditComponent, - ViewSchedulerJobComponent + ViewSchedulerJobComponent, + EditSchedulerJobComponent ], entryComponents: [ ReportParameterDialogComponent, diff --git a/src/app/system/system.service.ts b/src/app/system/system.service.ts index 57b84fd8c..4e7fa3b82 100644 --- a/src/app/system/system.service.ts +++ b/src/app/system/system.service.ts @@ -177,11 +177,20 @@ export class SystemService { } /** - * @param jobId Selected Job Id + * @param jobId Job Id to be edited + * @returns {Observable} Fetches Scheduler Job. + */ + getSelectedJob(jobId: string): Observable { + return this.http.get(`/jobs/${jobId}`); + } + + /** + * @param {string} jobId Job ID of Job to be updated. + * @param {any} Job Job to be updated. * @returns {Observable} */ - getSelectedJob(jobId: string) { - return this.http.get(`/jobs/${jobId}`); + updateScheduler(jobId: string, job: any): Observable { + return this.http.put(`/jobs/${jobId}`, job); } /**