diff --git a/demo-shell-ng2/app/components/activiti/activiti-demo.component.html b/demo-shell-ng2/app/components/activiti/activiti-demo.component.html index 04531d9db4..acb03710f2 100644 --- a/demo-shell-ng2/app/components/activiti/activiti-demo.component.html +++ b/demo-shell-ng2/app/components/activiti/activiti-demo.component.html @@ -11,16 +11,16 @@
-
+
Task Filters - +
-
+
Task List
-
+
Task Details
diff --git a/ng2-components/ng2-activiti-tasklist/src/components/activiti-filters.component.spec.ts b/ng2-components/ng2-activiti-tasklist/src/components/activiti-filters.component.spec.ts index 41528c026d..2987e78d8e 100644 --- a/ng2-components/ng2-activiti-tasklist/src/components/activiti-filters.component.spec.ts +++ b/ng2-components/ng2-activiti-tasklist/src/components/activiti-filters.component.spec.ts @@ -57,7 +57,6 @@ describe('ActivitiFilters', () => { filterList.onSuccess.subscribe( (res) => { expect(res).toBeDefined(); - expect(res).toEqual('Filter task list loaded'); expect(filterList.filters).toBeDefined(); expect(filterList.filters.length).toEqual(2); expect(filterList.filters[0].name).toEqual('FakeInvolvedTasks'); @@ -73,7 +72,6 @@ describe('ActivitiFilters', () => { filterList.onError.subscribe( (err) => { expect(err).toBeDefined(); - expect(err).toEqual('Error to load a task filter list'); done(); }); diff --git a/ng2-components/ng2-activiti-tasklist/src/components/activiti-filters.component.ts b/ng2-components/ng2-activiti-tasklist/src/components/activiti-filters.component.ts index 0eac6eeca8..2f91fae68b 100644 --- a/ng2-components/ng2-activiti-tasklist/src/components/activiti-filters.component.ts +++ b/ng2-components/ng2-activiti-tasklist/src/components/activiti-filters.component.ts @@ -15,7 +15,7 @@ * limitations under the License. */ -import { Component, Output, EventEmitter, OnInit } from '@angular/core'; +import { Component, Output, EventEmitter, OnInit, Input } from '@angular/core'; import { AlfrescoTranslationService, AlfrescoAuthenticationService, AlfrescoPipeTranslate } from 'ng2-alfresco-core'; import { ActivitiTaskListService } from './../services/activiti-tasklist.service'; import { FilterModel } from '../models/filter.model'; @@ -40,10 +40,16 @@ export class ActivitiFilters implements OnInit { filterClick: EventEmitter = new EventEmitter(); @Output() - onSuccess: EventEmitter = new EventEmitter(); + onSuccess: EventEmitter = new EventEmitter(); @Output() - onError: EventEmitter = new EventEmitter(); + onError: EventEmitter = new EventEmitter(); + + @Input() + appId: string; + + @Input() + appName: string; private filterObserver: Observer; filter$: Observable; @@ -80,20 +86,50 @@ export class ActivitiFilters implements OnInit { * @param tasks */ private load() { - this.activiti.getTaskListFilters().subscribe( + if (this.appName) { + this.filterByAppName(); + } else { + this.filterByAppId(); + } + } + + private filterByAppId() { + this.activiti.getTaskListFilters(this.appId).subscribe( (res: FilterModel[]) => { res.forEach((filter) => { this.filterObserver.next(filter); }); - this.onSuccess.emit('Filter task list loaded'); + this.onSuccess.emit(res); }, (err) => { console.log(err); - this.onError.emit('Error to load a task filter list'); + this.onError.emit(err); } ); } + private filterByAppName() { + this.activiti.getDeployedApplications(this.appName).subscribe( + application => { + this.activiti.getTaskListFilters(application.id).subscribe( + (res: FilterModel[]) => { + res.forEach((filter) => { + this.filterObserver.next(filter); + }); + this.onSuccess.emit(res); + }, + (err) => { + console.log(err); + this.onError.emit(err); + } + ); + }, + (err) => { + console.log(err); + this.onError.emit(err); + }); + } + /** * Pass the selected filter as next * @param filter 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 a03bfce057..e827b11951 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 @@ -96,7 +96,6 @@ describe('ActivitiTaskList', () => { taskList.onSuccess.subscribe( (res) => { expect(res).toBeDefined(); - expect(res).toEqual('Task List loaded'); expect(taskList.tasks).toBeDefined(); expect(taskList.isTaskListEmpty()).not.toBeTruthy(); expect(taskList.tasks.getRows().length).toEqual(2); @@ -114,7 +113,6 @@ describe('ActivitiTaskList', () => { taskList.onError.subscribe( (err) => { expect(err).toBeDefined(); - expect(err).toEqual('Error to load a tasks list'); done(); }); 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 228750156f..af6f5243a1 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 @@ -51,10 +51,10 @@ export class ActivitiTaskList implements OnInit { rowClick: EventEmitter = new EventEmitter(); @Output() - onSuccess: EventEmitter = new EventEmitter(); + onSuccess: EventEmitter = new EventEmitter(); @Output() - onError: EventEmitter = new EventEmitter(); + onError: EventEmitter = new EventEmitter(); data: DataTableAdapter; @@ -91,10 +91,10 @@ export class ActivitiTaskList implements OnInit { this.activiti.getTasks(filter).subscribe( (res) => { this.renderTasks(res.data); - this.onSuccess.emit('Task List loaded'); + this.onSuccess.emit(res); }, (err) => { console.error(err); - this.onError.emit('Error to load a tasks list'); + 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 c7c4053d4a..22acd2523b 100644 --- a/ng2-components/ng2-activiti-tasklist/src/models/filter.model.ts +++ b/ng2-components/ng2-activiti-tasklist/src/models/filter.model.ts @@ -29,11 +29,11 @@ export class FilterModel { icon: string; filter: FilterParamsModel; - constructor(name: string, recent: boolean, icon: string, query: string, state: string, assignment: string) { + constructor(name: string, recent: boolean, icon: string, query: string, state: string, assignment: string, appDefinitionId?: string) { this.name = name; this.recent = recent; this.icon = icon; - this.filter = new FilterParamsModel(query, state, assignment); + this.filter = new FilterParamsModel(query, state, assignment, appDefinitionId); } } @@ -48,10 +48,12 @@ export class FilterParamsModel { name: string; state: string; assignment: string; + appDefinitionId: string; - constructor(query: string, state: string, assignment: string) { + constructor(query: string, state: string, assignment: string, appDefinitionId?: string) { this.name = query; this.state = state; this.assignment = assignment; + this.appDefinitionId = appDefinitionId; } } 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 9ac14799b3..bfa7d56348 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 @@ -32,18 +32,32 @@ export class ActivitiTaskListService { constructor(private http: Http, public alfrescoSettingsService: AlfrescoSettingsService) { } + + /** + * Retrive all the Deployed app + * @returns {Observable} + */ + getDeployedApplications(name: string): Observable { + let url = this.alfrescoSettingsService.getBPMApiBaseUrl() + `/api/enterprise/runtime-app-definitions`; + return this.http + .get(url, this.getRequestOptions()) + .map((response: Response) => response.json().data.find(p => p.name === name)) + .do(data => console.log('Application: ' + JSON.stringify(data))) + .catch(this.handleError); + } + /** * Retrive all the Tasks filters * @returns {Observable} */ - getTaskListFilters(): Observable { - return Observable.fromPromise(this.callApiTaskFilters()) + getTaskListFilters(appId?: string): Observable { + return Observable.fromPromise(this.callApiTaskFilters(appId)) .map(res => res.json()) .map((response: any) => { let filters: FilterModel[] = []; response.data.forEach((filter) => { let filterModel = new FilterModel(filter.name, filter.recent, filter.icon, - filter.filter.name, filter.filter.state, filter.filter.assignment); + filter.filter.name, filter.filter.state, filter.filter.assignment, appId); filters.push(filterModel); }); return filters; @@ -160,100 +174,65 @@ export class ActivitiTaskListService { private callApiTasksFiltered(filter: FilterParamsModel) { let data = JSON.stringify(filter); let url = this.alfrescoSettingsService.getBPMApiBaseUrl() + `/api/enterprise/tasks/query`; - let headers = new Headers({ - 'Content-Type': 'application/json', - 'Cache-Control': 'no-cache' - }); - let options = new RequestOptions({headers: headers}); return this.http - .post(url, data, options).toPromise(); + .post(url, data, this.getRequestOptions()).toPromise(); } - private callApiTaskFilters() { - let url = this.alfrescoSettingsService.getBPMApiBaseUrl() + `/api/enterprise/filters/tasks`; - let headers = new Headers({ - 'Content-Type': 'application/json', - 'Cache-Control': 'no-cache' - }); - let options = new RequestOptions({headers: headers}); + private callApiTaskFilters(appId?: string) { + let url = this.alfrescoSettingsService.getBPMApiBaseUrl(); + if (appId) { + url = url + `/api/enterprise/filters/tasks?appId=${appId}`; + } else { + url = url + `/api/enterprise/filters/tasks`; + } return this.http - .get(url, options).toPromise(); + .get(url, this.getRequestOptions()).toPromise(); } private callApiTaskDetails(id: string) { let url = this.alfrescoSettingsService.getBPMApiBaseUrl() + `/api/enterprise/tasks/${id}`; - let headers = new Headers({ - 'Content-Type': 'application/json', - 'Cache-Control': 'no-cache' - }); - let options = new RequestOptions({headers: headers}); return this.http - .get(url, options).toPromise(); + .get(url, this.getRequestOptions()).toPromise(); } private callApiTaskComments(id: string) { let url = this.alfrescoSettingsService.getBPMApiBaseUrl() + `/api/enterprise/tasks/${id}/comments`; - let headers = new Headers({ - 'Content-Type': 'application/json', - 'Cache-Control': 'no-cache' - }); - let options = new RequestOptions({headers: headers}); return this.http - .get(url, options).toPromise(); + .get(url, this.getRequestOptions()).toPromise(); } private callApiAddTaskComment(id: string, message: string) { let url = this.alfrescoSettingsService.getBPMApiBaseUrl() + `/api/enterprise/tasks/${id}/comments`; - let headers = new Headers({ - 'Content-Type': 'application/json', - 'Cache-Control': 'no-cache' - }); let body = JSON.stringify({message: message}); - let options = new RequestOptions({headers: headers}); return this.http - .post(url, body, options).toPromise(); + .post(url, body, this.getRequestOptions()).toPromise(); } private callApiAddTask(task: TaskDetailsModel) { let url = this.alfrescoSettingsService.getBPMApiBaseUrl() + `/api/enterprise/tasks/${task.parentTaskId}/checklist`; - let headers = new Headers({ - 'Content-Type': 'application/json', - 'Cache-Control': 'no-cache' - }); let body = JSON.stringify(task); - let options = new RequestOptions({headers: headers}); return this.http - .post(url, body, options).toPromise(); + .post(url, body, this.getRequestOptions()).toPromise(); } private callApiTaskChecklist(id: string) { let url = this.alfrescoSettingsService.getBPMApiBaseUrl() + `/api/enterprise/tasks/${id}/checklist`; - let headers = new Headers({ - 'Content-Type': 'application/json', - 'Cache-Control': 'no-cache' - }); - let options = new RequestOptions({headers: headers}); return this.http - .get(url, options).toPromise(); + .get(url, this.getRequestOptions()).toPromise(); } private callApiCompleteTask(id: string) { let url = this.alfrescoSettingsService.getBPMApiBaseUrl() + `/api/enterprise/tasks/${id}/action/complete`; - let headers = new Headers({ - 'Content-Type': 'application/json', - 'Cache-Control': 'no-cache' - }); - let options = new RequestOptions({headers: headers}); return this.http - .put(url, options).toPromise(); + .put(url, this.getRequestOptions()).toPromise(); } @@ -267,4 +246,15 @@ export class ActivitiTaskListService { return Observable.throw(error || 'Server error'); } + private getHeaders(): Headers { + return new Headers({ + 'Accept': 'application/json', + 'Content-Type': 'application/json' + }); + } + + private getRequestOptions(): RequestOptions { + let headers = this.getHeaders(); + return new RequestOptions({headers: headers}); + } }