diff --git a/demo-shell/resources/i18n/en.json b/demo-shell/resources/i18n/en.json
index 440b0cd64e..268c079ac3 100644
--- a/demo-shell/resources/i18n/en.json
+++ b/demo-shell/resources/i18n/en.json
@@ -94,6 +94,12 @@
"TREE_VIEW": "Tree View",
"ICONS": "Icons",
"PEOPLE_GROUPS_CLOUD": "People/Group Cloud",
+ "TASK_HEADER_CLOUD": {
+ "COMPONENT_NAME": "Task Header Cloud",
+ "APP_NAME_INPUT": "App name",
+ "TASK_ID_INPUT": "Task id",
+ "FIND_TASK_BUTTON": "Find Task"
+ },
"PEOPLE_CLOUD": "People Cloud Component",
"GROUPS_CLOUD": "Groups Cloud Component",
"CONFIRM-DIALOG": "Confirmation Dialog",
diff --git a/demo-shell/src/app/app.module.ts b/demo-shell/src/app/app.module.ts
index c2a36d66e4..6e18f28faf 100644
--- a/demo-shell/src/app/app.module.ts
+++ b/demo-shell/src/app/app.module.ts
@@ -71,6 +71,7 @@ import { AppsCloudDemoComponent } from './components/cloud/apps-cloud-demo.compo
import { TasksCloudDemoComponent } from './components/cloud/tasks-cloud-demo.component';
import { ProcessesCloudDemoComponent } from './components/cloud/processes-cloud-demo.component';
import { TaskDetailsCloudDemoComponent } from './components/cloud/task-details-cloud-demo.component';
+import { TaskHeaderCloudDemoComponent } from './components/cloud/task-header-cloud-demo.component';
import { CloudViewerComponent } from './components/cloud/cloud-viewer.component';
import { ProcessDetailsCloudDemoComponent } from './components/cloud/process-details-cloud-demo.component';
import { StartTaskCloudDemoComponent } from './components/cloud/start-task-cloud-demo.component';
@@ -182,6 +183,7 @@ registerLocaleData(localeSv);
TasksCloudDemoComponent,
ProcessesCloudDemoComponent,
TaskDetailsCloudDemoComponent,
+ TaskHeaderCloudDemoComponent,
CloudViewerComponent,
ProcessDetailsCloudDemoComponent,
StartTaskCloudDemoComponent,
diff --git a/demo-shell/src/app/app.routes.ts b/demo-shell/src/app/app.routes.ts
index 16ff8dc524..412af1f645 100644
--- a/demo-shell/src/app/app.routes.ts
+++ b/demo-shell/src/app/app.routes.ts
@@ -58,6 +58,7 @@ import { TemplateDemoComponent } from './components/template-list/template-demo.
import { FormCloudDemoComponent } from './components/app-layout/cloud/form-demo/cloud-form-demo.component';
import { ConfirmDialogExampleComponent } from './components/confirm-dialog/confirm-dialog-example.component';
import { DemoErrorComponent } from './components/error/demo-error.component';
+import { TaskHeaderCloudDemoComponent } from './components/cloud/task-header-cloud-demo.component';
export const appRoutes: Routes = [
{ path: 'login', loadChildren: 'app/components/login/login.module#AppLoginModule' },
{ path: 'logout', component: LogoutComponent },
@@ -177,6 +178,10 @@ export const appRoutes: Routes = [
path: 'people-group-cloud',
component: PeopleGroupCloudDemoComponent
},
+ {
+ path: 'task-header-cloud',
+ component: TaskHeaderCloudDemoComponent
+ },
{
path: 'community',
loadChildren: 'app/components/cloud/community/community.module#AppCommunityModule'
diff --git a/demo-shell/src/app/components/app-layout/app-layout.component.ts b/demo-shell/src/app/components/app-layout/app-layout.component.ts
index 68218f2329..95b006c5b5 100644
--- a/demo-shell/src/app/components/app-layout/app-layout.component.ts
+++ b/demo-shell/src/app/components/app-layout/app-layout.component.ts
@@ -48,12 +48,15 @@ export class AppLayoutComponent implements OnInit, OnDestroy {
{ href: '/node-selector', icon: 'attachment', title: 'APP_LAYOUT.NODE-SELECTOR' },
{ href: '/sites', icon: 'format_list_bulleted', title: 'APP_LAYOUT.SITES' },
{ href: '/task-list', icon: 'assignment', title: 'APP_LAYOUT.TASK_LIST' },
- { href: '/cloud', icon: 'cloud', title: 'APP_LAYOUT.PROCESS_CLOUD', children: [
- { href: '/cloud/', icon: 'cloud', title: 'APP_LAYOUT.HOME' },
- { href: '/cloud/community', icon: 'cloud', title: 'APP_LAYOUT.COMMUNITY' },
- { href: '/form-cloud', icon: 'poll', title: 'APP_LAYOUT.FORM' },
- { href: '/cloud/people-group-cloud', icon: 'group', title: 'APP_LAYOUT.PEOPLE_GROUPS_CLOUD' }
- ]},
+ {
+ href: '/cloud', icon: 'cloud', title: 'APP_LAYOUT.PROCESS_CLOUD', children: [
+ { href: '/cloud/', icon: 'cloud', title: 'APP_LAYOUT.HOME' },
+ { href: '/cloud/community', icon: 'cloud', title: 'APP_LAYOUT.COMMUNITY' },
+ { href: '/form-cloud', icon: 'poll', title: 'APP_LAYOUT.FORM' },
+ { href: '/cloud/people-group-cloud', icon: 'group', title: 'APP_LAYOUT.PEOPLE_GROUPS_CLOUD' },
+ { href: '/cloud/task-header-cloud', icon: 'cloud', title: 'APP_LAYOUT.TASK_HEADER_CLOUD.COMPONENT_NAME' }
+ ]
+ },
{ href: '/activiti', icon: 'device_hub', title: 'APP_LAYOUT.PROCESS_SERVICES', children: [
{ href: '/activiti', icon: 'vpn_key', title: 'APP_LAYOUT.APP' },
{ href: '/process-list', icon: 'assignment', title: 'APP_LAYOUT.PROCESS_LIST' },
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 4249feb8d9..c96f182420 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
@@ -8,8 +8,6 @@
[taskId]="taskId"
(cancelClick)="goBack()"
(taskCompleted)="onTaskCompleted()"
- (taskClaimed)="onTaskClaimed()"
- (taskUnclaimed)="onTaskUnclaimed()"
(formContentClicked)="onFormContentClicked($event)"
(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 63b1d0549a..75d0dbfb86 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
@@ -60,14 +60,6 @@ export class TaskDetailsCloudDemoComponent {
this.goBack();
}
- onTaskClaimed() {
- this.taskHeader.ngOnInit();
- }
-
- onTaskUnclaimed() {
- this.taskHeader.ngOnInit();
- }
-
onFormContentClicked(resourceClicked: any) {
this.previewService.showResource(resourceClicked.nodeId);
}
diff --git a/demo-shell/src/app/components/cloud/task-header-cloud-demo.component.html b/demo-shell/src/app/components/cloud/task-header-cloud-demo.component.html
new file mode 100644
index 0000000000..a301978d77
--- /dev/null
+++ b/demo-shell/src/app/components/cloud/task-header-cloud-demo.component.html
@@ -0,0 +1,31 @@
+
{{ 'APP_LAYOUT.TASK_HEADER_CLOUD.COMPONENT_NAME' | translate }}
+
+
+ {{ 'APP_LAYOUT.TASK_HEADER_CLOUD.APP_NAME_INPUT' | translate }}
+
+
+
+
+ {{ 'APP_LAYOUT.TASK_HEADER_CLOUD.TASK_ID_INPUT' | translate }}
+
+
+
+
+
+{{errorMessage}}
+
+
diff --git a/demo-shell/src/app/components/cloud/task-header-cloud-demo.component.scss b/demo-shell/src/app/components/cloud/task-header-cloud-demo.component.scss
new file mode 100644
index 0000000000..7ecb012781
--- /dev/null
+++ b/demo-shell/src/app/components/cloud/task-header-cloud-demo.component.scss
@@ -0,0 +1,16 @@
+.app {
+
+ &-appName-input {
+ width: 500px;
+ margin-right: 50px;
+ }
+
+ &-taskId-input {
+ width: 500px;
+ }
+
+ &-find-task-button {
+ background-color: #ff9800;
+ margin-left: 30px;
+ }
+}
diff --git a/demo-shell/src/app/components/cloud/task-header-cloud-demo.component.ts b/demo-shell/src/app/components/cloud/task-header-cloud-demo.component.ts
new file mode 100644
index 0000000000..e35803e404
--- /dev/null
+++ b/demo-shell/src/app/components/cloud/task-header-cloud-demo.component.ts
@@ -0,0 +1,49 @@
+/*!
+ * @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 { Component, ViewChild } from '@angular/core';
+import { TaskHeaderCloudComponent } from '@alfresco/adf-process-services-cloud';
+import { FormControl, Validators } from '@angular/forms';
+
+@Component({
+ templateUrl: './task-header-cloud-demo.component.html',
+ styleUrls: ['./task-header-cloud-demo.component.scss']
+})
+export class TaskHeaderCloudDemoComponent {
+ @ViewChild('taskHeader')
+ taskHeader: TaskHeaderCloudComponent;
+
+ appName: string;
+ taskId: string;
+
+ errorMessage;
+
+ appNameFormControl = new FormControl('', Validators.required);
+ taskIdFormControl = new FormControl('', Validators.required);
+
+ constructor() {}
+
+ updateTaskHeader() {
+ this.errorMessage = undefined;
+ this.appName = this.appNameFormControl.value;
+ this.taskId = this.taskIdFormControl.value;
+ }
+
+ onError(error) {
+ this.errorMessage = error.message;
+ }
+}
diff --git a/docs/process-services-cloud/components/task-header-cloud.component.md b/docs/process-services-cloud/components/task-header-cloud.component.md
index 546ec53b37..398d536a19 100644
--- a/docs/process-services-cloud/components/task-header-cloud.component.md
+++ b/docs/process-services-cloud/components/task-header-cloud.component.md
@@ -35,6 +35,7 @@ Shows all the information related to a task.
| ---- | ---- | ----------- |
| claim | [`EventEmitter`](https://angular.io/api/core/EventEmitter)`` | Emitted when the task is claimed. |
| unclaim | [`EventEmitter`](https://angular.io/api/core/EventEmitter)`` | Emitted when the task is unclaimed (ie, requeued). |
+| taskError | [`EventEmitter`](https://angular.io/api/core/EventEmitter)`` | Emitted when there is an error about the requested task |
## Details
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 a47084a6ea..c5a9eddd18 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
@@ -50,7 +50,7 @@ export class ProcessHeaderCloudComponent implements OnChanges {
}
ngOnChanges() {
- if ((this.appName || this.appName === '') && this.processInstanceId) {
+ if (this.appName && this.processInstanceId) {
this.loadProcessInstanceDetails(this.appName, this.processInstanceId);
}
}
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
index 939d978173..3f6082cf3c 100644
--- 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
@@ -45,7 +45,7 @@ export class ProcessHeaderCloudService extends BaseCloudService {
* @returns Process instance details
*/
getProcessInstanceById(appName: string, processInstanceId: string): Observable {
- if ((appName || appName === '') && processInstanceId) {
+ if (appName && processInstanceId) {
const queryUrl = `${this.getBasePath(appName)}/query/v1/process-instances/${processInstanceId}`;
return from(this.alfrescoApiService.getInstance()
.oauth2Auth.callCustomApi(queryUrl, 'GET',
diff --git a/lib/process-services-cloud/src/lib/process/process-list/components/process-list-cloud.component.ts b/lib/process-services-cloud/src/lib/process/process-list/components/process-list-cloud.component.ts
index 3a6a06084d..179256ae74 100644
--- a/lib/process-services-cloud/src/lib/process/process-list/components/process-list-cloud.component.ts
+++ b/lib/process-services-cloud/src/lib/process/process-list/components/process-list-cloud.component.ts
@@ -185,7 +185,7 @@ export class ProcessListCloudComponent extends DataTableSchema implements OnChan
reload() {
this.requestNode = this.createRequestNode();
- if (this.requestNode.appName || this.requestNode.appName === '') {
+ if (this.requestNode.appName) {
this.load(this.requestNode);
} else {
this.rows = [];
diff --git a/lib/process-services-cloud/src/lib/process/process-list/services/process-list-cloud.service.ts b/lib/process-services-cloud/src/lib/process/process-list/services/process-list-cloud.service.ts
index 8532f12959..a8302740f5 100644
--- a/lib/process-services-cloud/src/lib/process/process-list/services/process-list-cloud.service.ts
+++ b/lib/process-services-cloud/src/lib/process/process-list/services/process-list-cloud.service.ts
@@ -39,7 +39,7 @@ export class ProcessListCloudService extends BaseCloudService {
* @returns Process information
*/
getProcessByRequest(requestNode: ProcessQueryCloudRequestModel): Observable {
- if (requestNode.appName || requestNode.appName === '') {
+ if (requestNode.appName) {
const queryUrl = this.buildQueryUrl(requestNode);
const queryParams = this.buildQueryParams(requestNode);
const sortingParams = this.buildSortingParam(requestNode.sorting);
diff --git a/lib/process-services-cloud/src/lib/process/start-process/services/start-process-cloud.service.ts b/lib/process-services-cloud/src/lib/process/start-process/services/start-process-cloud.service.ts
index d5368d843a..1427a0cc82 100755
--- a/lib/process-services-cloud/src/lib/process/start-process/services/start-process-cloud.service.ts
+++ b/lib/process-services-cloud/src/lib/process/start-process/services/start-process-cloud.service.ts
@@ -48,7 +48,7 @@ export class StartProcessCloudService extends BaseCloudService {
*/
getProcessDefinitions(appName: string): Observable {
- if (appName || appName === '') {
+ if (appName) {
const queryUrl = `${this.getBasePath(appName)}/rb/v1/process-definitions`;
return from(this.alfrescoApiService.getInstance()
diff --git a/lib/process-services-cloud/src/lib/services/user-preference-cloud.service.ts b/lib/process-services-cloud/src/lib/services/user-preference-cloud.service.ts
index 9eaa7502e6..5b2998124f 100644
--- a/lib/process-services-cloud/src/lib/services/user-preference-cloud.service.ts
+++ b/lib/process-services-cloud/src/lib/services/user-preference-cloud.service.ts
@@ -41,7 +41,7 @@ export class UserPreferenceCloudService extends BaseCloudService implements Pref
* @returns List of user preferences
*/
getPreferences(appName: string): Observable {
- if (appName || appName === '') {
+ if (appName) {
const uri = this.buildPreferenceServiceUri(appName);
return from(this.alfrescoApiService.getInstance()
.oauth2Auth.callCustomApi(uri, 'GET',
@@ -62,7 +62,7 @@ export class UserPreferenceCloudService extends BaseCloudService implements Pref
* @returns Observable of user preference
*/
getPreferenceByKey(appName: string, key: string): Observable {
- if (appName || appName === '') {
+ if (appName) {
const uri = this.buildPreferenceServiceUri(appName) + '/' + `${key}`;
return from(
this.alfrescoApiService.getInstance()
@@ -85,7 +85,7 @@ export class UserPreferenceCloudService extends BaseCloudService implements Pref
* @returns Observable of created user preferences
*/
createPreference(appName: string, key: string, newPreference: any): Observable {
- if (appName || appName === '') {
+ if (appName) {
const uri = this.buildPreferenceServiceUri(appName) + '/' + `${key}`;
const requestPayload = JSON.stringify(newPreference);
return from(this.alfrescoApiService.getInstance()
@@ -121,7 +121,7 @@ export class UserPreferenceCloudService extends BaseCloudService implements Pref
* @returns Observable of delete operation status
*/
deletePreference(appName: string, key: string): Observable {
- if (appName || appName === '') {
+ if (appName) {
const uri = this.buildPreferenceServiceUri(appName) + '/' + `${key}`;
return from(this.alfrescoApiService.getInstance()
.oauth2Auth.callCustomApi(uri, 'DELETE',
diff --git a/lib/process-services-cloud/src/lib/task/directives/claim-task.directive.ts b/lib/process-services-cloud/src/lib/task/directives/claim-task.directive.ts
index 62ea3fcfc2..0f80194dd4 100644
--- a/lib/process-services-cloud/src/lib/task/directives/claim-task.directive.ts
+++ b/lib/process-services-cloud/src/lib/task/directives/claim-task.directive.ts
@@ -68,7 +68,7 @@ export class ClaimTaskDirective implements OnInit {
}
isAppValid(): boolean {
- return (this.appName && this.appName.length > 0) || (this.appName === '');
+ return (this.appName && this.appName.length > 0);
}
@HostListener('click')
diff --git a/lib/process-services-cloud/src/lib/task/directives/complete-task.directive.ts b/lib/process-services-cloud/src/lib/task/directives/complete-task.directive.ts
index d4d190b6c0..378bd9d60e 100644
--- a/lib/process-services-cloud/src/lib/task/directives/complete-task.directive.ts
+++ b/lib/process-services-cloud/src/lib/task/directives/complete-task.directive.ts
@@ -65,7 +65,7 @@ export class CompleteTaskDirective implements OnInit {
}
isAppValid(): boolean {
- return (this.appName && this.appName.length > 0) || (this.appName === '');
+ return (this.appName && this.appName.length > 0);
}
@HostListener('click')
diff --git a/lib/process-services-cloud/src/lib/task/directives/unclaim-task.directive.ts b/lib/process-services-cloud/src/lib/task/directives/unclaim-task.directive.ts
index 218098a791..50a7bde7c3 100644
--- a/lib/process-services-cloud/src/lib/task/directives/unclaim-task.directive.ts
+++ b/lib/process-services-cloud/src/lib/task/directives/unclaim-task.directive.ts
@@ -66,7 +66,7 @@ export class UnClaimTaskDirective implements OnInit {
}
isAppValid(): boolean {
- return (this.appName && this.appName.length > 0) || (this.appName === '');
+ return (this.appName && this.appName.length > 0);
}
@HostListener('click')
diff --git a/lib/process-services-cloud/src/lib/task/services/task-cloud.service.ts b/lib/process-services-cloud/src/lib/task/services/task-cloud.service.ts
index da505877c3..9e8bd499bf 100644
--- a/lib/process-services-cloud/src/lib/task/services/task-cloud.service.ts
+++ b/lib/process-services-cloud/src/lib/task/services/task-cloud.service.ts
@@ -17,7 +17,7 @@
import { Injectable } from '@angular/core';
import { AlfrescoApiService, LogService, AppConfigService, IdentityUserService } from '@alfresco/adf-core';
-import { from, throwError, Observable, of } from 'rxjs';
+import { from, throwError, Observable, of, Subject } from 'rxjs';
import { catchError, map } from 'rxjs/operators';
import { TaskDetailsCloudModel, StartTaskCloudResponseModel } from '../start-task/models/task-details-cloud.model';
import { BaseCloudService } from '../../services/base-cloud.service';
@@ -32,6 +32,9 @@ export class TaskCloudService extends BaseCloudService {
accepts = ['application/json'];
returnType = Object;
+ private dataChangesDetected = new Subject();
+ dataChangesDetected$: Observable