diff --git a/demo-shell-ng2/app/components/activiti/activiti-demo.component.ts b/demo-shell-ng2/app/components/activiti/activiti-demo.component.ts index 66b05625f9..bbf1446184 100644 --- a/demo-shell-ng2/app/components/activiti/activiti-demo.component.ts +++ b/demo-shell-ng2/app/components/activiti/activiti-demo.component.ts @@ -82,7 +82,7 @@ export class ActivitiDemoComponent implements AfterViewChecked { onTaskFilterClick(event: any) { this.taskFilter = event; - this.activititasklist.load(this.taskFilter); + this.activititasklist.load(this.taskFilter.filter); } onProcessFilterClick(event: any) { diff --git a/ng2-components/ng2-activiti-tasklist/README.md b/ng2-components/ng2-activiti-tasklist/README.md index e6a5be262c..87995cf4ea 100644 --- a/ng2-components/ng2-activiti-tasklist/README.md +++ b/ng2-components/ng2-activiti-tasklist/README.md @@ -50,7 +50,7 @@ Also make sure you include these dependencies in your `index.html` file: ## Basic usage example Activiti Task List The component shows the list of all the tasks filter by the -FilterModel passed in input. +FilterParamModel passed in input. ```html ``` @@ -62,25 +62,19 @@ clicked
#### Options -**taskFilter**: { FilterModel } required) FilterModel object that +**taskFilter**: { FilterParamModel } required) FilterParamModel object that is passed to the task list API to filter the task list. Example: ```json { - "id": 4, - "name": "Involved Tasks", - "recent": false, - "icon": "glyphicon-align-left", - "filter": { - "appDefinitionId": "1", - "processDefinitionId": "1533", - "sort": "created-desc", - "name": "", - "state": "open", - "assignment": "involved", - "page": "0", - "size": "25" - } + "appDefinitionId": "1", + "processDefinitionId": "1533", + "sort": "created-desc", + "text": "", + "state": "open", + "assignment": "involved", + "page": "0", + "size": "25" } ``` **schemaColumn**: { any[] } optional) JSON object that represent diff --git a/ng2-components/ng2-activiti-tasklist/src/components/activiti-tasklist.component.spec.ts b/ng2-components/ng2-activiti-tasklist/src/components/activiti-tasklist.component.spec.ts index b8374faf83..184e25d791 100644 --- a/ng2-components/ng2-activiti-tasklist/src/components/activiti-tasklist.component.spec.ts +++ b/ng2-components/ng2-activiti-tasklist/src/components/activiti-tasklist.component.spec.ts @@ -34,7 +34,7 @@ describe('ActivitiTaskList', () => { let taskList: ActivitiTaskList; let fakeGlobalTask = { - size: 1, total: 12, start: 0, + size: 2, total: 2, start: 0, data: [ { id: 14, name: 'fake-long-name-fake-long-name-fake-long-name-fak50-long-name', description: null, category: null, @@ -51,10 +51,19 @@ describe('ActivitiTaskList', () => { ] }; + let fakeGlobalTotalTasks = { + size: 2, total: 2, start: 0, + data: [] + }; + let fakeGlobalTaskPromise = new Promise(function (resolve, reject) { resolve(fakeGlobalTask); }); + let fakeGlobalTotalTasksPromise = new Promise(function (resolve, reject) { + resolve(fakeGlobalTotalTasks); + }); + let fakeErrorTaskList = { error: 'wrong request' }; @@ -91,6 +100,7 @@ describe('ActivitiTaskList', () => { }); it('should return the filtered task list when the taskFilter is passed', (done) => { + spyOn(taskList.activiti, 'getTotalTasks').and.returnValue(Observable.fromPromise(fakeGlobalTotalTasksPromise)); spyOn(taskList.activiti, 'getTasks').and.returnValue(Observable.fromPromise(fakeGlobalTaskPromise)); taskList.taskFilter = new FilterModel('name', false, 'icon', '', 'open', 'fake-assignee'); @@ -108,7 +118,7 @@ describe('ActivitiTaskList', () => { }); it('should throw an exception when the response is wrong', (done) => { - spyOn(taskList.activiti, 'getTasks').and.returnValue(Observable.fromPromise(fakeErrorTaskPromise)); + spyOn(taskList.activiti, 'getTotalTasks').and.returnValue(Observable.fromPromise(fakeErrorTaskPromise)); taskList.taskFilter = new FilterModel('name', false, 'icon', '', 'open', 'fake-assignee'); taskList.onError.subscribe( (err) => { diff --git a/ng2-components/ng2-activiti-tasklist/src/components/activiti-tasklist.component.ts b/ng2-components/ng2-activiti-tasklist/src/components/activiti-tasklist.component.ts index 848c215aa3..cee3700c62 100644 --- a/ng2-components/ng2-activiti-tasklist/src/components/activiti-tasklist.component.ts +++ b/ng2-components/ng2-activiti-tasklist/src/components/activiti-tasklist.component.ts @@ -19,7 +19,7 @@ import { Component, Input, Output, EventEmitter, OnInit } from '@angular/core'; import { AlfrescoTranslationService, AlfrescoAuthenticationService, AlfrescoPipeTranslate } from 'ng2-alfresco-core'; import { ALFRESCO_DATATABLE_DIRECTIVES, ObjectDataTableAdapter, DataTableAdapter, DataRowEvent } from 'ng2-alfresco-datatable'; import { ActivitiTaskListService } from './../services/activiti-tasklist.service'; -import { FilterModel } from '../models/filter.model'; +import { FilterModel, FilterParamsModel } from '../models/filter.model'; declare let componentHandler: any; declare let __moduleName: string; @@ -84,15 +84,22 @@ export class ActivitiTaskList implements OnInit { ); if (this.taskFilter) { - this.load(this.taskFilter); + this.load(this.taskFilter.filter); } } - public load(filter: FilterModel) { - this.activiti.getTasks(filter).subscribe( + public load(filterParam: FilterParamsModel) { + this.activiti.getTotalTasks(filterParam).subscribe( (res) => { - this.renderTasks(res.data); - this.onSuccess.emit(res); + filterParam.size = res.total; + this.activiti.getTasks(filterParam).subscribe( + (response) => { + this.renderTasks(response.data); + this.onSuccess.emit(response); + }, (error) => { + console.error(error); + this.onError.emit(error); + }); }, (err) => { console.error(err); this.onError.emit(err); diff --git a/ng2-components/ng2-activiti-tasklist/src/models/filter.model.ts b/ng2-components/ng2-activiti-tasklist/src/models/filter.model.ts index 22acd2523b..846559408e 100644 --- a/ng2-components/ng2-activiti-tasklist/src/models/filter.model.ts +++ b/ng2-components/ng2-activiti-tasklist/src/models/filter.model.ts @@ -33,7 +33,7 @@ export class FilterModel { this.name = name; this.recent = recent; this.icon = icon; - this.filter = new FilterParamsModel(query, state, assignment, appDefinitionId); + this.filter = new FilterParamsModel(assignment, state, query, appDefinitionId); } } @@ -45,15 +45,25 @@ export class FilterModel { * @returns {FilterModel} . */ export class FilterParamsModel { - name: string; - state: string; - assignment: string; appDefinitionId: string; + processInstanceId: string; + processDefinitionId: string; + text: string; + assignment: string; + state: string; + sort: string; + page: number = 0; + size: number = 25; - constructor(query: string, state: string, assignment: string, appDefinitionId?: string) { - this.name = query; - this.state = state; - this.assignment = assignment; + constructor(assignment: string, state: string, text: string, appDefinitionId?: string, processInstanceId?: string, + processDefinitionId?: string, page?: number, size?: number) { this.appDefinitionId = appDefinitionId; + this.processInstanceId = processInstanceId; + this.processDefinitionId = processDefinitionId; + this.text = text; + this.assignment = assignment; + this.state = state; + this.page = page; + this.size = size; } } diff --git a/ng2-components/ng2-activiti-tasklist/src/services/activiti-tasklist.service.spec.ts b/ng2-components/ng2-activiti-tasklist/src/services/activiti-tasklist.service.spec.ts index 8684988f3a..d0368efa84 100644 --- a/ng2-components/ng2-activiti-tasklist/src/services/activiti-tasklist.service.spec.ts +++ b/ng2-components/ng2-activiti-tasklist/src/services/activiti-tasklist.service.spec.ts @@ -42,8 +42,7 @@ describe('ActivitiTaskListService', () => { }; let fakeFilter = { - page: 2, filterId: 2, appDefinitionId: null, - filter: {sort: 'created-desc', name: '', state: 'open', assignment: 'fake-assignee'} + sort: 'created-desc', text: '', state: 'open', assignment: 'fake-assignee' }; let fakeUser = {id: 1, email: 'fake-email@dom.com', firstName: 'firstName', lastName: 'lastName'}; @@ -130,7 +129,7 @@ describe('ActivitiTaskListService', () => { it('should return the task list filtered', (done) => { service.getTasks(fakeFilter).subscribe( - res => { + res => { expect(res).toBeDefined(); expect(res.size).toEqual(1); expect(res.total).toEqual(1); @@ -302,4 +301,22 @@ describe('ActivitiTaskListService', () => { }); }); + it('should return the total number of tasks', (done) => { + service.getTotalTasks(fakeFilter).subscribe( + res => { + expect(res).toBeDefined(); + expect(res.size).toEqual(1); + expect(res.total).toEqual(1); + done(); + } + ); + + jasmine.Ajax.requests.mostRecent().respondWith({ + 'status': 200, + contentType: 'application/json', + responseText: JSON.stringify(fakeTaskList) + }); + }); + }); + diff --git a/ng2-components/ng2-activiti-tasklist/src/services/activiti-tasklist.service.ts b/ng2-components/ng2-activiti-tasklist/src/services/activiti-tasklist.service.ts index 5b9fb5afb0..94625760fb 100644 --- a/ng2-components/ng2-activiti-tasklist/src/services/activiti-tasklist.service.ts +++ b/ng2-components/ng2-activiti-tasklist/src/services/activiti-tasklist.service.ts @@ -59,11 +59,11 @@ export class ActivitiTaskListService { /** * Retrive all the tasks filtered by filterModel - * @param filter - FilterModel + * @param filter - FilterParamsModel * @returns {any} */ - getTasks(filter: FilterModel): Observable { - return Observable.fromPromise(this.callApiTasksFiltered(filter.filter)) + getTasks(filter: FilterParamsModel): Observable { + return Observable.fromPromise(this.callApiTasksFiltered(filter)) .map((res: any) => { return res; }).catch(this.handleError); @@ -156,6 +156,20 @@ export class ActivitiTaskListService { .map(res => res); } + + /** + * Return the total number of the tasks by filter + * @param filter - FilterParamsModel + * @returns {any} + */ + public getTotalTasks(filter: FilterParamsModel): Observable { + filter.size = 0; + return Observable.fromPromise(this.callApiTasksFiltered(filter)) + .map((res: any) => { + return res; + }).catch(this.handleError); + } + private callApiTasksFiltered(filter: FilterParamsModel) { return this.authService.getAlfrescoApi().activiti.taskApi.listTasks(filter); }