Merge pull request #672 from Alfresco/dev-mvitale-611

Activiti Task List does not show all entries
This commit is contained in:
Mario Romano 2016-09-05 14:46:42 +01:00 committed by GitHub
commit 5e14cd69d5
7 changed files with 91 additions and 39 deletions

View File

@ -82,7 +82,7 @@ export class ActivitiDemoComponent implements AfterViewChecked {
onTaskFilterClick(event: any) { onTaskFilterClick(event: any) {
this.taskFilter = event; this.taskFilter = event;
this.activititasklist.load(this.taskFilter); this.activititasklist.load(this.taskFilter.filter);
} }
onProcessFilterClick(event: any) { onProcessFilterClick(event: any) {

View File

@ -50,7 +50,7 @@ Also make sure you include these dependencies in your `index.html` file:
## Basic usage example Activiti Task List ## Basic usage example Activiti Task List
The component shows the list of all the tasks filter by the The component shows the list of all the tasks filter by the
FilterModel passed in input. FilterParamModel passed in input.
```html ```html
<activiti-tasklist [taskFilter]="taskFilterModel"></activiti-tasklist> <activiti-tasklist [taskFilter]="taskFilterModel"></activiti-tasklist>
``` ```
@ -62,25 +62,19 @@ clicked<br />
#### Options #### 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. is passed to the task list API to filter the task list.
Example: Example:
```json ```json
{ {
"id": 4, "appDefinitionId": "1",
"name": "Involved Tasks", "processDefinitionId": "1533",
"recent": false, "sort": "created-desc",
"icon": "glyphicon-align-left", "text": "",
"filter": { "state": "open",
"appDefinitionId": "1", "assignment": "involved",
"processDefinitionId": "1533", "page": "0",
"sort": "created-desc", "size": "25"
"name": "",
"state": "open",
"assignment": "involved",
"page": "0",
"size": "25"
}
} }
``` ```
**schemaColumn**: { any[] } optional) JSON object that represent **schemaColumn**: { any[] } optional) JSON object that represent

View File

@ -34,7 +34,7 @@ describe('ActivitiTaskList', () => {
let taskList: ActivitiTaskList; let taskList: ActivitiTaskList;
let fakeGlobalTask = { let fakeGlobalTask = {
size: 1, total: 12, start: 0, size: 2, total: 2, start: 0,
data: [ data: [
{ {
id: 14, name: 'fake-long-name-fake-long-name-fake-long-name-fak50-long-name', description: null, category: null, 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) { let fakeGlobalTaskPromise = new Promise(function (resolve, reject) {
resolve(fakeGlobalTask); resolve(fakeGlobalTask);
}); });
let fakeGlobalTotalTasksPromise = new Promise(function (resolve, reject) {
resolve(fakeGlobalTotalTasks);
});
let fakeErrorTaskList = { let fakeErrorTaskList = {
error: 'wrong request' error: 'wrong request'
}; };
@ -91,6 +100,7 @@ describe('ActivitiTaskList', () => {
}); });
it('should return the filtered task list when the taskFilter is passed', (done) => { 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)); spyOn(taskList.activiti, 'getTasks').and.returnValue(Observable.fromPromise(fakeGlobalTaskPromise));
taskList.taskFilter = new FilterModel('name', false, 'icon', '', 'open', 'fake-assignee'); 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) => { 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.taskFilter = new FilterModel('name', false, 'icon', '', 'open', 'fake-assignee');
taskList.onError.subscribe( (err) => { taskList.onError.subscribe( (err) => {

View File

@ -19,7 +19,7 @@ import { Component, Input, Output, EventEmitter, OnInit } from '@angular/core';
import { AlfrescoTranslationService, AlfrescoAuthenticationService, AlfrescoPipeTranslate } from 'ng2-alfresco-core'; import { AlfrescoTranslationService, AlfrescoAuthenticationService, AlfrescoPipeTranslate } from 'ng2-alfresco-core';
import { ALFRESCO_DATATABLE_DIRECTIVES, ObjectDataTableAdapter, DataTableAdapter, DataRowEvent } from 'ng2-alfresco-datatable'; import { ALFRESCO_DATATABLE_DIRECTIVES, ObjectDataTableAdapter, DataTableAdapter, DataRowEvent } from 'ng2-alfresco-datatable';
import { ActivitiTaskListService } from './../services/activiti-tasklist.service'; 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 componentHandler: any;
declare let __moduleName: string; declare let __moduleName: string;
@ -84,15 +84,22 @@ export class ActivitiTaskList implements OnInit {
); );
if (this.taskFilter) { if (this.taskFilter) {
this.load(this.taskFilter); this.load(this.taskFilter.filter);
} }
} }
public load(filter: FilterModel) { public load(filterParam: FilterParamsModel) {
this.activiti.getTasks(filter).subscribe( this.activiti.getTotalTasks(filterParam).subscribe(
(res) => { (res) => {
this.renderTasks(res.data); filterParam.size = res.total;
this.onSuccess.emit(res); this.activiti.getTasks(filterParam).subscribe(
(response) => {
this.renderTasks(response.data);
this.onSuccess.emit(response);
}, (error) => {
console.error(error);
this.onError.emit(error);
});
}, (err) => { }, (err) => {
console.error(err); console.error(err);
this.onError.emit(err); this.onError.emit(err);

View File

@ -33,7 +33,7 @@ export class FilterModel {
this.name = name; this.name = name;
this.recent = recent; this.recent = recent;
this.icon = icon; 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} . * @returns {FilterModel} .
*/ */
export class FilterParamsModel { export class FilterParamsModel {
name: string;
state: string;
assignment: string;
appDefinitionId: 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) { constructor(assignment: string, state: string, text: string, appDefinitionId?: string, processInstanceId?: string,
this.name = query; processDefinitionId?: string, page?: number, size?: number) {
this.state = state;
this.assignment = assignment;
this.appDefinitionId = appDefinitionId; this.appDefinitionId = appDefinitionId;
this.processInstanceId = processInstanceId;
this.processDefinitionId = processDefinitionId;
this.text = text;
this.assignment = assignment;
this.state = state;
this.page = page;
this.size = size;
} }
} }

View File

@ -42,8 +42,7 @@ describe('ActivitiTaskListService', () => {
}; };
let fakeFilter = { let fakeFilter = {
page: 2, filterId: 2, appDefinitionId: null, sort: 'created-desc', text: '', state: 'open', assignment: 'fake-assignee'
filter: {sort: 'created-desc', name: '', state: 'open', assignment: 'fake-assignee'}
}; };
let fakeUser = {id: 1, email: 'fake-email@dom.com', firstName: 'firstName', lastName: 'lastName'}; 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) => { it('should return the task list filtered', (done) => {
service.getTasks(fakeFilter).subscribe( service.getTasks(fakeFilter).subscribe(
res => { res => {
expect(res).toBeDefined(); expect(res).toBeDefined();
expect(res.size).toEqual(1); expect(res.size).toEqual(1);
expect(res.total).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)
});
});
}); });

View File

@ -59,11 +59,11 @@ export class ActivitiTaskListService {
/** /**
* Retrive all the tasks filtered by filterModel * Retrive all the tasks filtered by filterModel
* @param filter - FilterModel * @param filter - FilterParamsModel
* @returns {any} * @returns {any}
*/ */
getTasks(filter: FilterModel): Observable<any> { getTasks(filter: FilterParamsModel): Observable<any> {
return Observable.fromPromise(this.callApiTasksFiltered(filter.filter)) return Observable.fromPromise(this.callApiTasksFiltered(filter))
.map((res: any) => { .map((res: any) => {
return res; return res;
}).catch(this.handleError); }).catch(this.handleError);
@ -156,6 +156,20 @@ export class ActivitiTaskListService {
.map(res => res); .map(res => res);
} }
/**
* Return the total number of the tasks by filter
* @param filter - FilterParamsModel
* @returns {any}
*/
public getTotalTasks(filter: FilterParamsModel): Observable<any> {
filter.size = 0;
return Observable.fromPromise(this.callApiTasksFiltered(filter))
.map((res: any) => {
return res;
}).catch(this.handleError);
}
private callApiTasksFiltered(filter: FilterParamsModel) { private callApiTasksFiltered(filter: FilterParamsModel) {
return this.authService.getAlfrescoApi().activiti.taskApi.listTasks(filter); return this.authService.getAlfrescoApi().activiti.taskApi.listTasks(filter);
} }