diff --git a/docs/process-services-cloud/services/task-cloud.service.md b/docs/process-services-cloud/services/task-cloud.service.md
index 1f1db0a056..14bd33147f 100644
--- a/docs/process-services-cloud/services/task-cloud.service.md
+++ b/docs/process-services-cloud/services/task-cloud.service.md
@@ -79,6 +79,12 @@ Manages task cloud.
- _taskId:_ `string` - ID of the task to update
- _payload:_ `any` - Data to update the task
- **Returns** [`Observable`](http://reactivex.io/documentation/observable.html)`<`[`TaskDetailsCloudModel`](../../../lib/process-services-cloud/src/lib/task/start-task/models/task-details-cloud.model.ts)`>` - Updated task details
+- **assign**(appName: `string`, taskId: `string`, assignee: `string`): [`Observable`](http://reactivex.io/documentation/observable.html)`<`[`TaskDetailsCloudModel`](../../../lib/process-services-cloud/src/lib/task/start-task/models/task-details-cloud.model.ts)`>`
+ Changes assignee of the user task.
+ - _appName:_ `string` - Name of the app
+ - _taskId:_ `string` - ID of the task to update assignee
+ - _assignee:_ `string` - assignee to update current user task assignee
+ - **Returns** [`Observable`](http://reactivex.io/documentation/observable.html)`<`[`TaskDetailsCloudModel`](../../../lib/process-services-cloud/src/lib/task/start-task/models/task-details-cloud.model.ts)`>` - Updated task details
## Details
diff --git a/lib/process-services-cloud/src/lib/task/services/task-cloud.service.spec.ts b/lib/process-services-cloud/src/lib/task/services/task-cloud.service.spec.ts
index 5840ab4efc..34e5f53fb5 100644
--- a/lib/process-services-cloud/src/lib/task/services/task-cloud.service.spec.ts
+++ b/lib/process-services-cloud/src/lib/task/services/task-cloud.service.spec.ts
@@ -410,4 +410,40 @@ describe('Task Cloud Service', () => {
done();
});
});
+
+ it('should call assign api and return updated task details', (done) => {
+ const appName = 'task-app';
+ const taskId = '68d54a8f';
+ spyOn(alfrescoApiMock, 'getInstance').and.callFake(returnFakeTaskDetailsResults);
+ service.assign(appName, taskId, 'Phil Woods').subscribe(
+ (res) => {
+ expect(res.assignee).toBe('Phil Woods');
+ done();
+ });
+ });
+
+ it('should throw error if appName is not defined when changing task assignee', (done) => {
+ const appName = '';
+ const taskId = '68d54a8f';
+ spyOn(alfrescoApiMock, 'getInstance').and.callFake(returnFakeTaskDetailsResults);
+ service.assign(appName, taskId, 'mock-assignee').subscribe(
+ () => { },
+ (error) => {
+ expect(error).toBe('AppName/TaskId not configured');
+ done();
+ });
+ });
+
+ it('should throw error if taskId is not defined when changing task assignee', (done) => {
+ const appName = 'task-app';
+ const taskId = '';
+ spyOn(alfrescoApiMock, 'getInstance').and.callFake(returnFakeTaskDetailsResults);
+ service.assign(appName, taskId, 'mock-assignee').subscribe(
+ () => { },
+ (error) => {
+ expect(error).toBe('AppName/TaskId not configured');
+ done();
+ });
+ });
+
});
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 9507f44790..c7098ef11f 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
@@ -257,6 +257,29 @@ export class TaskCloudService extends BaseCloudService {
}
}
+ /**
+ * Updates the task assignee.
+ * @param appName Name of the app
+ * @param taskId ID of the task to update assignee
+ * @param assignee assignee to update current user task assignee
+ * @returns Updated task details with new assignee
+ */
+ assign(appName: string, taskId: string, assignee: string): Observable {
+ if (appName && taskId) {
+ const payLoad = { 'assignee': assignee, 'taskId': taskId, 'payloadType': 'AssignTaskPayload' };
+ const url = `${this.getBasePath(appName)}/rb/v1/tasks/${taskId}/assign`;
+
+ return this.post(url, payLoad).pipe(
+ map((res: any) => {
+ return res.entry;
+ })
+ );
+ } else {
+ this.logService.error('AppName and TaskId are mandatory to change/update the task assignee');
+ return throwError('AppName/TaskId not configured');
+ }
+ }
+
private isAssignedToMe(assignee: string): boolean {
const currentUser = this.identityUserService.getCurrentUserInfo().username;
return assignee === currentUser;