From 4d8195fa825f71763d8ae6ed862615b2300d4c68 Mon Sep 17 00:00:00 2001 From: Ehsan Rezaei Date: Fri, 30 Sep 2022 19:19:51 +0200 Subject: [PATCH] AAE-2824: Managed to trigger executeOutcome when clicking on custom outcome buttons (#7873) --- .../src/lib/form/components/form-base.component.ts | 1 - .../lib/form/components/form-cloud.component.spec.ts | 2 +- .../components/task-form-cloud.component.html | 3 ++- .../components/task-form-cloud.component.spec.ts | 10 +++++++++- .../components/task-form-cloud.component.ts | 12 +++++++++++- .../src/lib/form/form.component.spec.ts | 2 +- 6 files changed, 24 insertions(+), 6 deletions(-) diff --git a/lib/core/src/lib/form/components/form-base.component.ts b/lib/core/src/lib/form/components/form-base.component.ts index 8bdfa9450a..66b9c3ef76 100644 --- a/lib/core/src/lib/form/components/form-base.component.ts +++ b/lib/core/src/lib/form/components/form-base.component.ts @@ -191,7 +191,6 @@ export abstract class FormBaseComponent { } else { // Note: Activiti is using NAME field rather than ID for outcomes if (outcome.name) { - this.onTaskSaved(this.form); this.completeTaskForm(outcome.name); return true; } diff --git a/lib/process-services-cloud/src/lib/form/components/form-cloud.component.spec.ts b/lib/process-services-cloud/src/lib/form/components/form-cloud.component.spec.ts index 3b83a096a9..8e6438288b 100644 --- a/lib/process-services-cloud/src/lib/form/components/form-cloud.component.spec.ts +++ b/lib/process-services-cloud/src/lib/form/components/form-cloud.component.spec.ts @@ -480,7 +480,7 @@ describe('FormCloudComponent', () => { const result = formComponent.onOutcomeClicked(outcome); expect(result).toBeTruthy(); - expect(saved).toBeTruthy(); + expect(saved).toBeFalse(); expect(formComponent.completeTaskForm).toHaveBeenCalledWith(outcomeName); }); 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 d49efd2cb5..88dcc54263 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 @@ -14,7 +14,8 @@ (formCompleted)="onFormCompleted($event)" (formError)="onError($event)" (error)="onError($event)" - (formContentClicked)="onFormContentClicked($event)"> + (formContentClicked)="onFormContentClicked($event)" + (executeOutcome)="onFormExecuteOutcome($event)"> 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 bbdcec8fc3..0b7443a2c9 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 @@ -19,7 +19,7 @@ import { DebugElement, SimpleChange } from '@angular/core'; import { By } from '@angular/platform-browser'; import { of } from 'rxjs'; import { ComponentFixture, TestBed } from '@angular/core/testing'; -import { setupTestBed } from '@alfresco/adf-core'; +import { FormModel, FormOutcomeEvent, FormOutcomeModel, setupTestBed } from '@alfresco/adf-core'; import { ProcessServiceCloudTestingModule } from '../../../testing/process-service-cloud.testing.module'; import { TaskFormCloudComponent } from './task-form-cloud.component'; import { @@ -400,6 +400,14 @@ describe('TaskFormCloudComponent', () => { expect(loadingTemplate).toBeNull(); }); + + it('should emit an executeOutcome event when form outcome executed', () => { + const executeOutcomeSpy: jasmine.Spy = spyOn(component.executeOutcome, 'emit'); + + component.onFormExecuteOutcome(new FormOutcomeEvent(new FormOutcomeModel(new FormModel()))); + + expect(executeOutcomeSpy).toHaveBeenCalled(); + }); }); it('should display task name as title on no form template if showTitle is true', () => { 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 7827e9d86a..e5b1f0ce74 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 @@ -21,7 +21,7 @@ import { } from '@angular/core'; import { TaskDetailsCloudModel } from '../../start-task/models/task-details-cloud.model'; import { TaskCloudService } from '../../services/task-cloud.service'; -import { FormRenderingService, FormModel, ContentLinkModel } from '@alfresco/adf-core'; +import { FormRenderingService, FormModel, ContentLinkModel, FormOutcomeEvent } from '@alfresco/adf-core'; import { AttachFileCloudWidgetComponent } from '../../../form/components/widgets/attach-file/attach-file-cloud-widget.component'; import { DropdownCloudWidgetComponent } from '../../../form/components/widgets/dropdown/dropdown-cloud.widget'; import { DateCloudWidgetComponent } from '../../../form/components/widgets/date/date-cloud.widget'; @@ -98,6 +98,12 @@ export class TaskFormCloudComponent implements OnInit, OnChanges { @Output() formContentClicked: EventEmitter = new EventEmitter(); + /** Emitted when any outcome is executed. Default behaviour can be prevented + * via `event.preventDefault()`. + */ + @Output() + executeOutcome = new EventEmitter(); + taskDetails: TaskDetailsCloudModel; candidateUsers: string[] = []; @@ -219,4 +225,8 @@ export class TaskFormCloudComponent implements OnInit, OnChanges { onFormContentClicked(content: ContentLinkModel) { this.formContentClicked.emit(content); } + + onFormExecuteOutcome(outcome: FormOutcomeEvent) { + this.executeOutcome.emit(outcome); + } } diff --git a/lib/process-services/src/lib/form/form.component.spec.ts b/lib/process-services/src/lib/form/form.component.spec.ts index 55b0241f4c..82de8badc1 100644 --- a/lib/process-services/src/lib/form/form.component.spec.ts +++ b/lib/process-services/src/lib/form/form.component.spec.ts @@ -378,7 +378,7 @@ describe('FormComponent', () => { const result = formComponent.onOutcomeClicked(outcome); expect(result).toBeTruthy(); - expect(saved).toBeTruthy(); + expect(saved).toBeFalse(); expect(formComponent.completeTaskForm).toHaveBeenCalledWith(outcomeName); });