#514 select filters by appId and AppName

This commit is contained in:
Mario Romano
2016-08-12 16:14:59 +01:00
parent 7a045e94c5
commit dc6542e57f
7 changed files with 98 additions and 74 deletions

View File

@@ -11,16 +11,16 @@
<section class="mdl-layout__tab-panel is-active" id="scroll-tab-1"> <section class="mdl-layout__tab-panel is-active" id="scroll-tab-1">
<div class="page-content"> <div class="page-content">
<div class="mdl-grid"> <div class="mdl-grid">
<div class="mdl-cell mdl-cell--2-col task-column"> <div class="mdl-cell mdl-cell--2-col task-column mdl-shadow--2dp">
<span>Task Filters</span> <span>Task Filters</span>
<activiti-filters (filterClick)="onFilterClick($event)"></activiti-filters> <activiti-filters (filterClick)="onFilterClick($event)" appName='Visit'></activiti-filters>
</div> </div>
<div class="mdl-cell mdl-cell--3-col task-column"> <div class="mdl-cell mdl-cell--3-col task-column mdl-shadow--2dp">
<span>Task List</span> <span>Task List</span>
<activiti-tasklist *ngIf="isTaskListSelected()" [taskFilter]="taskFilter" [schemaColumn]="schemaColumn" <activiti-tasklist *ngIf="isTaskListSelected()" [taskFilter]="taskFilter" [schemaColumn]="schemaColumn"
(rowClick)="onRowClick($event)" #activititasklist></activiti-tasklist> (rowClick)="onRowClick($event)" #activititasklist></activiti-tasklist>
</div> </div>
<div class="mdl-cell mdl-cell--7-col task-column"> <div class="mdl-cell mdl-cell--7-col task-column mdl-shadow--2dp">
<span>Task Details</span> <span>Task Details</span>
<activiti-task-details [taskId]="currentTaskId" #activitidetails></activiti-task-details> <activiti-task-details [taskId]="currentTaskId" #activitidetails></activiti-task-details>
</div> </div>

View File

@@ -57,7 +57,6 @@ describe('ActivitiFilters', () => {
filterList.onSuccess.subscribe( (res) => { filterList.onSuccess.subscribe( (res) => {
expect(res).toBeDefined(); expect(res).toBeDefined();
expect(res).toEqual('Filter task list loaded');
expect(filterList.filters).toBeDefined(); expect(filterList.filters).toBeDefined();
expect(filterList.filters.length).toEqual(2); expect(filterList.filters.length).toEqual(2);
expect(filterList.filters[0].name).toEqual('FakeInvolvedTasks'); expect(filterList.filters[0].name).toEqual('FakeInvolvedTasks');
@@ -73,7 +72,6 @@ describe('ActivitiFilters', () => {
filterList.onError.subscribe( (err) => { filterList.onError.subscribe( (err) => {
expect(err).toBeDefined(); expect(err).toBeDefined();
expect(err).toEqual('Error to load a task filter list');
done(); done();
}); });

View File

@@ -15,7 +15,7 @@
* limitations under the License. * 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 { AlfrescoTranslationService, AlfrescoAuthenticationService, AlfrescoPipeTranslate } from 'ng2-alfresco-core';
import { ActivitiTaskListService } from './../services/activiti-tasklist.service'; import { ActivitiTaskListService } from './../services/activiti-tasklist.service';
import { FilterModel } from '../models/filter.model'; import { FilterModel } from '../models/filter.model';
@@ -40,10 +40,16 @@ export class ActivitiFilters implements OnInit {
filterClick: EventEmitter<FilterModel> = new EventEmitter<FilterModel>(); filterClick: EventEmitter<FilterModel> = new EventEmitter<FilterModel>();
@Output() @Output()
onSuccess: EventEmitter<string> = new EventEmitter<string>(); onSuccess: EventEmitter<any> = new EventEmitter<any>();
@Output() @Output()
onError: EventEmitter<string> = new EventEmitter<string>(); onError: EventEmitter<any> = new EventEmitter<any>();
@Input()
appId: string;
@Input()
appName: string;
private filterObserver: Observer<FilterModel>; private filterObserver: Observer<FilterModel>;
filter$: Observable<FilterModel>; filter$: Observable<FilterModel>;
@@ -80,20 +86,50 @@ export class ActivitiFilters implements OnInit {
* @param tasks * @param tasks
*/ */
private load() { 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: FilterModel[]) => {
res.forEach((filter) => { res.forEach((filter) => {
this.filterObserver.next(filter); this.filterObserver.next(filter);
}); });
this.onSuccess.emit('Filter task list loaded'); this.onSuccess.emit(res);
}, },
(err) => { (err) => {
console.log(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 * Pass the selected filter as next
* @param filter * @param filter

View File

@@ -96,7 +96,6 @@ describe('ActivitiTaskList', () => {
taskList.onSuccess.subscribe( (res) => { taskList.onSuccess.subscribe( (res) => {
expect(res).toBeDefined(); expect(res).toBeDefined();
expect(res).toEqual('Task List loaded');
expect(taskList.tasks).toBeDefined(); expect(taskList.tasks).toBeDefined();
expect(taskList.isTaskListEmpty()).not.toBeTruthy(); expect(taskList.isTaskListEmpty()).not.toBeTruthy();
expect(taskList.tasks.getRows().length).toEqual(2); expect(taskList.tasks.getRows().length).toEqual(2);
@@ -114,7 +113,6 @@ describe('ActivitiTaskList', () => {
taskList.onError.subscribe( (err) => { taskList.onError.subscribe( (err) => {
expect(err).toBeDefined(); expect(err).toBeDefined();
expect(err).toEqual('Error to load a tasks list');
done(); done();
}); });

View File

@@ -51,10 +51,10 @@ export class ActivitiTaskList implements OnInit {
rowClick: EventEmitter<string> = new EventEmitter<string>(); rowClick: EventEmitter<string> = new EventEmitter<string>();
@Output() @Output()
onSuccess: EventEmitter<string> = new EventEmitter<string>(); onSuccess: EventEmitter<any> = new EventEmitter<any>();
@Output() @Output()
onError: EventEmitter<string> = new EventEmitter<string>(); onError: EventEmitter<any> = new EventEmitter<any>();
data: DataTableAdapter; data: DataTableAdapter;
@@ -91,10 +91,10 @@ export class ActivitiTaskList implements OnInit {
this.activiti.getTasks(filter).subscribe( this.activiti.getTasks(filter).subscribe(
(res) => { (res) => {
this.renderTasks(res.data); this.renderTasks(res.data);
this.onSuccess.emit('Task List loaded'); this.onSuccess.emit(res);
}, (err) => { }, (err) => {
console.error(err); console.error(err);
this.onError.emit('Error to load a tasks list'); this.onError.emit(err);
}); });
} }

View File

@@ -29,11 +29,11 @@ export class FilterModel {
icon: string; icon: string;
filter: FilterParamsModel; 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.name = name;
this.recent = recent; this.recent = recent;
this.icon = icon; 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; name: string;
state: string; state: string;
assignment: 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.name = query;
this.state = state; this.state = state;
this.assignment = assignment; this.assignment = assignment;
this.appDefinitionId = appDefinitionId;
} }
} }

View File

@@ -32,18 +32,32 @@ export class ActivitiTaskListService {
constructor(private http: Http, public alfrescoSettingsService: AlfrescoSettingsService) { constructor(private http: Http, public alfrescoSettingsService: AlfrescoSettingsService) {
} }
/**
* Retrive all the Deployed app
* @returns {Observable<any>}
*/
getDeployedApplications(name: string): Observable<any> {
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 * Retrive all the Tasks filters
* @returns {Observable<any>} * @returns {Observable<any>}
*/ */
getTaskListFilters(): Observable<any> { getTaskListFilters(appId?: string): Observable<any> {
return Observable.fromPromise(this.callApiTaskFilters()) return Observable.fromPromise(this.callApiTaskFilters(appId))
.map(res => res.json()) .map(res => res.json())
.map((response: any) => { .map((response: any) => {
let filters: FilterModel[] = []; let filters: FilterModel[] = [];
response.data.forEach((filter) => { response.data.forEach((filter) => {
let filterModel = new FilterModel(filter.name, filter.recent, filter.icon, 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); filters.push(filterModel);
}); });
return filters; return filters;
@@ -160,100 +174,65 @@ export class ActivitiTaskListService {
private callApiTasksFiltered(filter: FilterParamsModel) { private callApiTasksFiltered(filter: FilterParamsModel) {
let data = JSON.stringify(filter); let data = JSON.stringify(filter);
let url = this.alfrescoSettingsService.getBPMApiBaseUrl() + `/api/enterprise/tasks/query`; 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 return this.http
.post(url, data, options).toPromise(); .post(url, data, this.getRequestOptions()).toPromise();
} }
private callApiTaskFilters() { private callApiTaskFilters(appId?: string) {
let url = this.alfrescoSettingsService.getBPMApiBaseUrl() + `/api/enterprise/filters/tasks`; let url = this.alfrescoSettingsService.getBPMApiBaseUrl();
let headers = new Headers({ if (appId) {
'Content-Type': 'application/json', url = url + `/api/enterprise/filters/tasks?appId=${appId}`;
'Cache-Control': 'no-cache' } else {
}); url = url + `/api/enterprise/filters/tasks`;
let options = new RequestOptions({headers: headers}); }
return this.http return this.http
.get(url, options).toPromise(); .get(url, this.getRequestOptions()).toPromise();
} }
private callApiTaskDetails(id: string) { private callApiTaskDetails(id: string) {
let url = this.alfrescoSettingsService.getBPMApiBaseUrl() + `/api/enterprise/tasks/${id}`; 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 return this.http
.get(url, options).toPromise(); .get(url, this.getRequestOptions()).toPromise();
} }
private callApiTaskComments(id: string) { private callApiTaskComments(id: string) {
let url = this.alfrescoSettingsService.getBPMApiBaseUrl() + `/api/enterprise/tasks/${id}/comments`; 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 return this.http
.get(url, options).toPromise(); .get(url, this.getRequestOptions()).toPromise();
} }
private callApiAddTaskComment(id: string, message: string) { private callApiAddTaskComment(id: string, message: string) {
let url = this.alfrescoSettingsService.getBPMApiBaseUrl() + `/api/enterprise/tasks/${id}/comments`; 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 body = JSON.stringify({message: message});
let options = new RequestOptions({headers: headers});
return this.http return this.http
.post(url, body, options).toPromise(); .post(url, body, this.getRequestOptions()).toPromise();
} }
private callApiAddTask(task: TaskDetailsModel) { private callApiAddTask(task: TaskDetailsModel) {
let url = this.alfrescoSettingsService.getBPMApiBaseUrl() + `/api/enterprise/tasks/${task.parentTaskId}/checklist`; 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 body = JSON.stringify(task);
let options = new RequestOptions({headers: headers});
return this.http return this.http
.post(url, body, options).toPromise(); .post(url, body, this.getRequestOptions()).toPromise();
} }
private callApiTaskChecklist(id: string) { private callApiTaskChecklist(id: string) {
let url = this.alfrescoSettingsService.getBPMApiBaseUrl() + `/api/enterprise/tasks/${id}/checklist`; 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 return this.http
.get(url, options).toPromise(); .get(url, this.getRequestOptions()).toPromise();
} }
private callApiCompleteTask(id: string) { private callApiCompleteTask(id: string) {
let url = this.alfrescoSettingsService.getBPMApiBaseUrl() + `/api/enterprise/tasks/${id}/action/complete`; 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 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'); 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});
}
} }