From f27846ec5b80b2aff3ba5a2e56005a35bfef9640 Mon Sep 17 00:00:00 2001 From: Deepak Paul Date: Fri, 31 May 2019 14:37:08 +0530 Subject: [PATCH] [ADF-4544] Cloud Task From - Refresh the buttons and form after an action is complete (#4726) * [ADF-4544] Reloaded task on action * [ADF-4544] Changed routing in demo component * [ADF-4544] Added tests --- .../task-details-cloud-demo.component.html | 2 - .../task-details-cloud-demo.component.ts | 12 --- .../components/task-form-cloud.component.html | 8 +- .../task-form-cloud.component.spec.ts | 74 +++++++++++++++++++ .../components/task-form-cloud.component.ts | 11 +++ .../lib/task/task-form/task-form.module.ts | 4 +- 6 files changed, 95 insertions(+), 16 deletions(-) diff --git a/demo-shell/src/app/components/cloud/task-details-cloud-demo.component.html b/demo-shell/src/app/components/cloud/task-details-cloud-demo.component.html index ff921d6858..d1e7f8c7ec 100644 --- a/demo-shell/src/app/components/cloud/task-details-cloud-demo.component.html +++ b/demo-shell/src/app/components/cloud/task-details-cloud-demo.component.html @@ -7,9 +7,7 @@ [appName]="appName" [taskId]="taskId" (cancelClick)="goBack()" - (taskClaimed)="onClaimTask()" (taskCompleted)="onTaskCompleted()" - (taskUnclaimed)="onUnclaimTask()" (formSaved)="onFormSaved()"> diff --git a/demo-shell/src/app/components/cloud/task-details-cloud-demo.component.ts b/demo-shell/src/app/components/cloud/task-details-cloud-demo.component.ts index ec04eca612..95eefeaebe 100644 --- a/demo-shell/src/app/components/cloud/task-details-cloud-demo.component.ts +++ b/demo-shell/src/app/components/cloud/task-details-cloud-demo.component.ts @@ -50,18 +50,6 @@ export class TaskDetailsCloudDemoComponent { this.router.navigate([`/cloud/${this.appName}/`]); } - onCompletedTask() { - this.goBack(); - } - - onUnclaimTask() { - this.goBack(); - } - - onClaimTask() { - this.goBack(); - } - onTaskCompleted() { this.goBack(); } diff --git a/lib/process-services-cloud/src/lib/task/task-form/components/task-form-cloud.component.html b/lib/process-services-cloud/src/lib/task/task-form/components/task-form-cloud.component.html index 5aff40e02f..ba810d7a8f 100644 --- a/lib/process-services-cloud/src/lib/task/task-form/components/task-form-cloud.component.html +++ b/lib/process-services-cloud/src/lib/task/task-form/components/task-form-cloud.component.html @@ -1,4 +1,4 @@ -
+
+ + +
+ +
+
diff --git a/lib/process-services-cloud/src/lib/task/task-form/components/task-form-cloud.component.spec.ts b/lib/process-services-cloud/src/lib/task/task-form/components/task-form-cloud.component.spec.ts index 90ee8e16e1..1233734316 100644 --- a/lib/process-services-cloud/src/lib/task/task-form/components/task-form-cloud.component.spec.ts +++ b/lib/process-services-cloud/src/lib/task/task-form/components/task-form-cloud.component.spec.ts @@ -347,6 +347,80 @@ describe('TaskFormCloudComponent', () => { component.onError({}); }); + it('should emit taskCompleted when task is completed', () => { + + spyOn(taskCloudService, 'completeTask').and.returnValue(of({})); + const reloadSpy = spyOn(component, 'loadTask').and.callThrough(); + + component.appName = 'app1'; + component.taskId = 'task1'; + + component.loadTask(); + fixture.detectChanges(); + const completeBtn = debugElement.query(By.css('[adf-cloud-complete-task]')); + + completeBtn.nativeElement.click(); + expect(reloadSpy).toHaveBeenCalled(); + }); + + it('should emit taskClaimed when task is claimed', () => { + spyOn(taskCloudService, 'claimTask').and.returnValue(of({})); + const reloadSpy = spyOn(component, 'loadTask').and.callThrough(); + + taskDetails.status = 'CREATED'; + getTaskSpy.and.returnValue(of(new TaskDetailsCloudModel(taskDetails))); + + component.appName = 'app1'; + component.taskId = 'task1'; + + component.loadTask(); + fixture.detectChanges(); + const claimBtn = debugElement.query(By.css('[adf-cloud-claim-task]')); + + claimBtn.nativeElement.click(); + expect(reloadSpy).toHaveBeenCalled(); + }); + + it('should emit taskUnclaimed when task is unclaimed', () => { + spyOn(taskCloudService, 'unclaimTask').and.returnValue(of({})); + const reloadSpy = spyOn(component, 'loadTask').and.callThrough(); + + taskDetails.status = 'ASSIGNED'; + getTaskSpy.and.returnValue(of(new TaskDetailsCloudModel(taskDetails))); + + component.appName = 'app1'; + component.taskId = 'task1'; + + component.loadTask(); + fixture.detectChanges(); + const unclaimBtn = debugElement.query(By.css('[adf-cloud-unclaim-task]')); + + unclaimBtn.nativeElement.click(); + expect(reloadSpy).toHaveBeenCalled(); + }); + + it('should show loading template while task data is being loaded', () => { + component.loading = true; + fixture.detectChanges(); + + const loadingTemplate = debugElement.query(By.css('mat-spinner')); + + expect(loadingTemplate).toBeDefined(); + }); + + it('should not show loading template while task data is not being loaded', () => { + component.loading = false; + component.appName = 'app1'; + component.taskId = 'task1'; + + component.loadTask(); + fixture.detectChanges(); + + const loadingTemplate = debugElement.query(By.css('mat-spinner')); + + expect(loadingTemplate).toBeNull(); + }); + }); }); diff --git a/lib/process-services-cloud/src/lib/task/task-form/components/task-form-cloud.component.ts b/lib/process-services-cloud/src/lib/task/task-form/components/task-form-cloud.component.ts index fd5619cc2e..405c7f98ec 100644 --- a/lib/process-services-cloud/src/lib/task/task-form/components/task-form-cloud.component.ts +++ b/lib/process-services-cloud/src/lib/task/task-form/components/task-form-cloud.component.ts @@ -91,6 +91,8 @@ export class TaskFormCloudComponent implements OnChanges { taskDetails: TaskDetailsCloudModel; + loading: boolean = false; + constructor( private taskCloudService: TaskCloudService, private formRenderingService: FormRenderingService) { @@ -114,11 +116,17 @@ export class TaskFormCloudComponent implements OnChanges { } loadTask() { + this.loading = true; this.taskCloudService.getTaskById(this.appName, this.taskId).subscribe((details: TaskDetailsCloudModel) => { this.taskDetails = details; + this.loading = false; }); } + private reloadTask() { + this.loadTask(); + } + hasForm(): boolean { return this.taskDetails && !!this.taskDetails.formKey; } @@ -140,14 +148,17 @@ export class TaskFormCloudComponent implements OnChanges { } onCompleteTask() { + this.reloadTask(); this.taskCompleted.emit(this.taskId); } onClaimTask() { + this.reloadTask(); this.taskClaimed.emit(this.taskId); } onUnclaimTask() { + this.reloadTask(); this.taskUnclaimed.emit(this.taskId); } diff --git a/lib/process-services-cloud/src/lib/task/task-form/task-form.module.ts b/lib/process-services-cloud/src/lib/task/task-form/task-form.module.ts index 66a83227cc..b79a2ac992 100644 --- a/lib/process-services-cloud/src/lib/task/task-form/task-form.module.ts +++ b/lib/process-services-cloud/src/lib/task/task-form/task-form.module.ts @@ -23,6 +23,7 @@ import { TaskDirectiveModule } from '../directives/task-directive.module'; import { TaskFormCloudComponent } from './components/task-form-cloud.component'; import { CoreModule } from '@alfresco/adf-core'; +import { FlexLayoutModule } from '@angular/flex-layout'; @NgModule({ imports: [ @@ -30,7 +31,8 @@ import { CoreModule } from '@alfresco/adf-core'; CommonModule, MaterialModule, FormCloudModule, - TaskDirectiveModule + TaskDirectiveModule, + FlexLayoutModule ], declarations: [ TaskFormCloudComponent