#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">
<div class="page-content">
<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>
<activiti-filters (filterClick)="onFilterClick($event)"></activiti-filters>
<activiti-filters (filterClick)="onFilterClick($event)" appName='Visit'></activiti-filters>
</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>
<activiti-tasklist *ngIf="isTaskListSelected()" [taskFilter]="taskFilter" [schemaColumn]="schemaColumn"
(rowClick)="onRowClick($event)" #activititasklist></activiti-tasklist>
</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>
<activiti-task-details [taskId]="currentTaskId" #activitidetails></activiti-task-details>
</div>

View File

@@ -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();
});

View File

@@ -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<FilterModel> = new EventEmitter<FilterModel>();
@Output()
onSuccess: EventEmitter<string> = new EventEmitter<string>();
onSuccess: EventEmitter<any> = new EventEmitter<any>();
@Output()
onError: EventEmitter<string> = new EventEmitter<string>();
onError: EventEmitter<any> = new EventEmitter<any>();
@Input()
appId: string;
@Input()
appName: string;
private filterObserver: Observer<FilterModel>;
filter$: Observable<FilterModel>;
@@ -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

View File

@@ -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();
});

View File

@@ -51,10 +51,10 @@ export class ActivitiTaskList implements OnInit {
rowClick: EventEmitter<string> = new EventEmitter<string>();
@Output()
onSuccess: EventEmitter<string> = new EventEmitter<string>();
onSuccess: EventEmitter<any> = new EventEmitter<any>();
@Output()
onError: EventEmitter<string> = new EventEmitter<string>();
onError: EventEmitter<any> = new EventEmitter<any>();
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);
});
}

View File

@@ -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;
}
}

View File

@@ -32,18 +32,32 @@ export class ActivitiTaskListService {
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
* @returns {Observable<any>}
*/
getTaskListFilters(): Observable<any> {
return Observable.fromPromise(this.callApiTaskFilters())
getTaskListFilters(appId?: string): Observable<any> {
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});
}
}