diff --git a/docs/process-services-cloud/services/process-header-cloud.service.md b/docs/process-services-cloud/services/process-cloud.service.md similarity index 58% rename from docs/process-services-cloud/services/process-header-cloud.service.md rename to docs/process-services-cloud/services/process-cloud.service.md index bdabe7fdeb..5a6a3addab 100644 --- a/docs/process-services-cloud/services/process-header-cloud.service.md +++ b/docs/process-services-cloud/services/process-cloud.service.md @@ -1,13 +1,13 @@ --- -Title: Process Header Cloud Service +Title: Process Cloud Service Added: v3.0.0 Status: Experimental Last reviewed: 2019-03-15 --- -# [Process Header Cloud Service](../../../lib/process-services-cloud/src/lib/process/process-header/services/process-header-cloud.service.ts "Defined in process-header-cloud.service.ts") +# [Process Cloud Service](../../../lib/process-services-cloud/src/lib/process/services/process-cloud.service.ts "Defined in process-cloud.service.ts") -Manages cloud process instances. +Manages cloud process instances. ## Class members @@ -15,8 +15,8 @@ Manages cloud process instances. - **getBasePath**(appName: `string`): `string`
- - _appName:_ `string` - - - **Returns** `string` - + - _appName:_ `string` - + - **Returns** `string` - - **getProcessInstanceById**(appName: `string`, processInstanceId: `string`): [`Observable`](http://reactivex.io/documentation/observable.html)`<`[`ProcessInstanceCloud`](../../../lib/process-services-cloud/src/lib/process/start-process/models/process-instance-cloud.model.ts)`>`
Gets details of a process instance. @@ -24,6 +24,12 @@ Manages cloud process instances. - _processInstanceId:_ `string` - ID of the process instance whose details you want - **Returns** [`Observable`](http://reactivex.io/documentation/observable.html)`<`[`ProcessInstanceCloud`](../../../lib/process-services-cloud/src/lib/process/start-process/models/process-instance-cloud.model.ts)`>` - Process instance details +- **cancelProcess**(appName: `string`, processInstanceId: `string`): [`Observable`](http://reactivex.io/documentation/observable.html)`<`[`ProcessInstanceCloud`](../../../lib/process-services-cloud/src/lib/process/start-process/models/process-instance-cloud.model.ts)`>`
+ Cancels a process instance. + - _appName:_ `string` - Name of the app + - _processInstanceId:_ `string` - ID of the process instance whose details you want + - **Returns** [`Observable`](http://reactivex.io/documentation/observable.html)`<`[`ProcessInstanceCloud`](../../../lib/process-services-cloud/src/lib/process/start-process/models/process-instance-cloud.model.ts)`>` - Process instance details + ## Details The methods work in much the same way as the equivalent methods in the diff --git a/lib/process-services-cloud/src/lib/process/directives/delete-process.directive.spec.ts b/lib/process-services-cloud/src/lib/process/directives/delete-process.directive.spec.ts index ddedde7400..38a0bc88fe 100644 --- a/lib/process-services-cloud/src/lib/process/directives/delete-process.directive.spec.ts +++ b/lib/process-services-cloud/src/lib/process/directives/delete-process.directive.spec.ts @@ -61,10 +61,10 @@ describe('DeleteProcessDirective', () => { }); it('should call delete process service when click', () => { - spyOn(processCloudService, 'deleteProcess').and.returnValue(of({})); + spyOn(processCloudService, 'cancelProcess').and.returnValue(of({})); const button = fixture.nativeElement.querySelector('button'); button.click(); - expect(processCloudService.deleteProcess).toHaveBeenCalled(); + expect(processCloudService.cancelProcess).toHaveBeenCalled(); }); }); diff --git a/lib/process-services-cloud/src/lib/process/directives/delete-process.directive.ts b/lib/process-services-cloud/src/lib/process/directives/delete-process.directive.ts index b11641a0e7..4f86108124 100644 --- a/lib/process-services-cloud/src/lib/process/directives/delete-process.directive.ts +++ b/lib/process-services-cloud/src/lib/process/directives/delete-process.directive.ts @@ -19,6 +19,7 @@ import { IdentityUserService } from '@alfresco/adf-core'; import { ProcessCloudService } from '../services/process-cloud.service'; @Directive({ + // tslint:disable-next-line: directive-selector selector: '[adf-cloud-delete-process]' }) export class DeleteProcessDirective implements OnInit { @@ -93,7 +94,7 @@ export class DeleteProcessDirective implements OnInit { private async deleteProcess() { const currentUser: string = this.identityUserService.getCurrentUserInfo().username; if (currentUser === this.processInitiator) { - await this.processCloudService.deleteProcess(this.appName, this.processId) + await this.processCloudService.cancelProcess(this.appName, this.processId) .subscribe((response) => { this.success.emit(response); }, ((error) => { diff --git a/lib/process-services-cloud/src/lib/process/process-header/components/process-header-cloud.component.spec.ts b/lib/process-services-cloud/src/lib/process/process-header/components/process-header-cloud.component.spec.ts index 2af612f8c9..c507aa9e96 100644 --- a/lib/process-services-cloud/src/lib/process/process-header/components/process-header-cloud.component.spec.ts +++ b/lib/process-services-cloud/src/lib/process/process-header/components/process-header-cloud.component.spec.ts @@ -22,7 +22,7 @@ import { of } from 'rxjs'; import { ProcessServiceCloudTestingModule } from '../../../testing/process-service-cloud.testing.module'; import { ProcessHeaderCloudComponent } from './process-header-cloud.component'; import { ProcessHeaderCloudModule } from '../process-header-cloud.module'; -import { ProcessHeaderCloudService } from '../services/process-header-cloud.service'; +import { ProcessCloudService } from '../../services/process-cloud.service'; const processInstanceDetailsCloudMock = { appName: 'app-form-mau', @@ -39,7 +39,7 @@ const processInstanceDetailsCloudMock = { describe('ProcessHeaderCloudComponent', () => { let component: ProcessHeaderCloudComponent; let fixture: ComponentFixture; - let service: ProcessHeaderCloudService; + let service: ProcessCloudService; let appConfigService: AppConfigService; setupTestBed({ @@ -52,7 +52,7 @@ describe('ProcessHeaderCloudComponent', () => { beforeEach(() => { fixture = TestBed.createComponent(ProcessHeaderCloudComponent); component = fixture.componentInstance; - service = TestBed.get(ProcessHeaderCloudService); + service = TestBed.get(ProcessCloudService); appConfigService = TestBed.get(AppConfigService); spyOn(service, 'getProcessInstanceById').and.returnValue(of(processInstanceDetailsCloudMock)); component.appName = 'myApp'; diff --git a/lib/process-services-cloud/src/lib/process/process-header/components/process-header-cloud.component.ts b/lib/process-services-cloud/src/lib/process/process-header/components/process-header-cloud.component.ts index 5cd21102a0..10f62daa42 100644 --- a/lib/process-services-cloud/src/lib/process/process-header/components/process-header-cloud.component.ts +++ b/lib/process-services-cloud/src/lib/process/process-header/components/process-header-cloud.component.ts @@ -15,10 +15,12 @@ * limitations under the License. */ -import { Component, Input, OnChanges } from '@angular/core'; +import { Component, Input, OnChanges, OnInit } from '@angular/core'; import { CardViewItem, CardViewTextItemModel, TranslationService, AppConfigService, CardViewDateItemModel, CardViewBaseItemModel } from '@alfresco/adf-core'; import { ProcessInstanceCloud } from '../../start-process/models/process-instance-cloud.model'; -import { ProcessHeaderCloudService } from '../services/process-header-cloud.service'; +import { ProcessCloudService } from '../../services/process-cloud.service'; +import { takeUntil } from 'rxjs/operators'; +import { Subject } from 'rxjs'; @Component({ selector: 'adf-cloud-process-header', @@ -26,7 +28,7 @@ import { ProcessHeaderCloudService } from '../services/process-header-cloud.serv styleUrls: ['./process-header-cloud.component.scss'] }) -export class ProcessHeaderCloudComponent implements OnChanges { +export class ProcessHeaderCloudComponent implements OnChanges, OnInit { /** (Required) The name of the application. */ @Input() @@ -41,14 +43,25 @@ export class ProcessHeaderCloudComponent implements OnChanges { dateFormat: string; dateLocale: string; + private onDestroy$ = new Subject(); + constructor( - private processHeaderCloudService: ProcessHeaderCloudService, + private processCloudService: ProcessCloudService, private translationService: TranslationService, private appConfig: AppConfigService) { this.dateFormat = this.appConfig.get('dateValues.defaultDateFormat'); this.dateLocale = this.appConfig.get('dateValues.defaultDateLocale'); } + ngOnInit() { + this.processCloudService.dataChangesDetected + .pipe(takeUntil(this.onDestroy$)) + .subscribe((processDetails: ProcessInstanceCloud) => { + this.processInstanceDetails = processDetails; + this.refreshData(); + }); + } + ngOnChanges() { if ((this.appName || this.appName === '') && this.processInstanceId) { this.loadProcessInstanceDetails(this.appName, this.processInstanceId); @@ -56,7 +69,7 @@ export class ProcessHeaderCloudComponent implements OnChanges { } private loadProcessInstanceDetails(appName: string, processInstanceId: string) { - this.processHeaderCloudService.getProcessInstanceById(appName, processInstanceId).subscribe( + this.processCloudService.getProcessInstanceById(appName, processInstanceId).subscribe( (processInstanceDetails) => { this.processInstanceDetails = processInstanceDetails; this.refreshData(); @@ -138,4 +151,9 @@ export class ProcessHeaderCloudComponent implements OnChanges { return filteredProperties ? filteredProperties.indexOf(cardItem.key) >= 0 : true; } + ngOnDestroy() { + this.onDestroy$.next(true); + this.onDestroy$.complete(); + } + } diff --git a/lib/process-services-cloud/src/lib/process/process-header/process-header-cloud.module.ts b/lib/process-services-cloud/src/lib/process/process-header/process-header-cloud.module.ts index 6517768503..8b7f165d4a 100644 --- a/lib/process-services-cloud/src/lib/process/process-header/process-header-cloud.module.ts +++ b/lib/process-services-cloud/src/lib/process/process-header/process-header-cloud.module.ts @@ -19,7 +19,6 @@ import { NgModule } from '@angular/core'; import { CommonModule } from '@angular/common'; import { MaterialModule } from '../../material.module'; import { DataTableModule, TemplateModule, CoreModule } from '@alfresco/adf-core'; -import { ProcessHeaderCloudService } from '../process-header/services/process-header-cloud.service'; import { ProcessHeaderCloudComponent } from './components/process-header-cloud.component'; @NgModule({ @@ -32,7 +31,6 @@ import { ProcessHeaderCloudComponent } from './components/process-header-cloud.c ], declarations: [ProcessHeaderCloudComponent], - exports: [ProcessHeaderCloudComponent], - providers: [ProcessHeaderCloudService] + exports: [ProcessHeaderCloudComponent] }) export class ProcessHeaderCloudModule { } diff --git a/lib/process-services-cloud/src/lib/process/process-header/public-api.ts b/lib/process-services-cloud/src/lib/process/process-header/public-api.ts index 7f952041a5..7648a1e6c8 100644 --- a/lib/process-services-cloud/src/lib/process/process-header/public-api.ts +++ b/lib/process-services-cloud/src/lib/process/process-header/public-api.ts @@ -17,4 +17,3 @@ export * from './process-header-cloud.module'; export * from './components/process-header-cloud.component'; -export * from './services/process-header-cloud.service'; diff --git a/lib/process-services-cloud/src/lib/process/process-header/services/process-header-cloud.service.ts b/lib/process-services-cloud/src/lib/process/process-header/services/process-header-cloud.service.ts deleted file mode 100644 index 2af94ec53e..0000000000 --- a/lib/process-services-cloud/src/lib/process/process-header/services/process-header-cloud.service.ts +++ /dev/null @@ -1,57 +0,0 @@ -/*! - * @license - * Copyright 2019 Alfresco Software, Ltd. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -import { AlfrescoApiService, LogService, AppConfigService } from '@alfresco/adf-core'; -import { Injectable } from '@angular/core'; -import { Observable, throwError } from 'rxjs'; -import { map } from 'rxjs/operators'; -import { ProcessInstanceCloud } from '../../start-process/models/process-instance-cloud.model'; -import { BaseCloudService } from '../../../services/base-cloud.service'; - -@Injectable({ - providedIn: 'root' -}) -export class ProcessHeaderCloudService extends BaseCloudService { - - constructor(apiService: AlfrescoApiService, - appConfigService: AppConfigService, - private logService: LogService) { - super(apiService); - this.contextRoot = appConfigService.get('bpmHost', ''); - } - - /** - * Gets details of a process instance. - * @param appName Name of the app - * @param processInstanceId ID of the process instance whose details you want - * @returns Process instance details - */ - getProcessInstanceById(appName: string, processInstanceId: string): Observable { - if ((appName || appName === '') && processInstanceId) { - const url = `${this.getBasePath(appName)}/query/v1/process-instances/${processInstanceId}`; - - return this.get(url).pipe( - map((res: any) => { - return new ProcessInstanceCloud(res.entry); - }) - ); - } else { - this.logService.error('AppName and ProcessInstanceId are mandatory for querying a task'); - return throwError('AppName/ProcessInstanceId not configured'); - } - } -} diff --git a/lib/process-services-cloud/src/lib/process/services/process-cloud.service.ts b/lib/process-services-cloud/src/lib/process/services/process-cloud.service.ts index 2ffc3d3fc5..2495abbc9f 100644 --- a/lib/process-services-cloud/src/lib/process/services/process-cloud.service.ts +++ b/lib/process-services-cloud/src/lib/process/services/process-cloud.service.ts @@ -17,7 +17,9 @@ import { AlfrescoApiService, LogService, AppConfigService } from '@alfresco/adf-core'; import { Injectable } from '@angular/core'; -import { throwError } from 'rxjs'; +import { Observable, Subject, throwError } from 'rxjs'; +import { map } from 'rxjs/operators'; +import { ProcessInstanceCloud } from '../start-process/models/process-instance-cloud.model'; import { BaseCloudService } from '../../services/base-cloud.service'; @Injectable({ @@ -25,6 +27,8 @@ import { BaseCloudService } from '../../services/base-cloud.service'; }) export class ProcessCloudService extends BaseCloudService { + dataChangesDetected = new Subject(); + constructor(apiService: AlfrescoApiService, appConfigService: AppConfigService, private logService: LogService) { @@ -33,15 +37,42 @@ export class ProcessCloudService extends BaseCloudService { } /** - * Deletes a process. + * Gets details of a process instance. * @param appName Name of the app - * @param processId Id of the process to delete + * @param processInstanceId ID of the process instance whose details you want + * @returns Process instance details + */ + getProcessInstanceById(appName: string, processInstanceId: string): Observable { + if (appName && processInstanceId) { + const url = `${this.getBasePath(appName)}/query/v1/process-instances/${processInstanceId}`; + + return this.get(url).pipe( + map((res: any) => { + this.dataChangesDetected.next(res.entry); + return new ProcessInstanceCloud(res.entry); + }) + ); + } else { + this.logService.error('AppName and ProcessInstanceId are mandatory for querying a process'); + return throwError('AppName/ProcessInstanceId not configured'); + } + } + + /** + * Cancels a process. + * @param appName Name of the app + * @param processInstanceId Id of the process to cancel * @returns Operation Information */ - deleteProcess(appName: string, processId: string) { - if (appName && processId) { - const queryUrl = `${this.getBasePath(appName)}/rb/v1/process-instances/${processId}`; - return this.delete(queryUrl); + cancelProcess(appName: string, processInstanceId: string): Observable { + if (appName && processInstanceId) { + const queryUrl = `${this.getBasePath(appName)}/rb/v1/process-instances/${processInstanceId}`; + return this.delete(queryUrl).pipe( + map((res: any) => { + this.dataChangesDetected.next(res.entry); + return new ProcessInstanceCloud(res.entry); + }) + ); } else { this.logService.error('App name and Process id are mandatory for deleting a process'); return throwError('App name and process id not configured');