Merge pull request #1396 from Alfresco/dev-wabson-1307

Fix sorting of processlist list items
This commit is contained in:
Mario Romano
2017-01-06 09:57:08 +00:00
committed by GitHub
3 changed files with 39 additions and 8 deletions

View File

@@ -122,6 +122,7 @@ export class ActivitiDemoComponent implements AfterViewInit {
{type: 'text', key: 'started', title: 'Started', cssClass: 'hidden', sortable: true} {type: 'text', key: 'started', title: 'Started', cssClass: 'hidden', sortable: true}
] ]
); );
this.dataProcesses.setSorting(new DataSorting('started', 'desc'));
// Uncomment this line to replace all 'text' field editors with custom component // Uncomment this line to replace all 'text' field editors with custom component
// formRenderingService.setComponentTypeResolver('text', () => CustomEditorComponent, true); // formRenderingService.setComponentTypeResolver('text', () => CustomEditorComponent, true);

View File

@@ -21,7 +21,7 @@ import { Observable } from 'rxjs/Rx';
import { ActivitiProcessInstanceListComponent } from './activiti-processlist.component'; import { ActivitiProcessInstanceListComponent } from './activiti-processlist.component';
import { AlfrescoTranslationService, CoreModule } from 'ng2-alfresco-core'; import { AlfrescoTranslationService, CoreModule } from 'ng2-alfresco-core';
import { DataTableModule, ObjectDataRow, DataRowEvent, ObjectDataTableAdapter } from 'ng2-alfresco-datatable'; import { DataTableModule, ObjectDataRow, DataRowEvent, ObjectDataTableAdapter, DataSorting } from 'ng2-alfresco-datatable';
import { TranslationMock } from './../assets/translation.service.mock'; import { TranslationMock } from './../assets/translation.service.mock';
import { ProcessInstance } from '../models/process-instance.model'; import { ProcessInstance } from '../models/process-instance.model';
@@ -275,7 +275,7 @@ describe('ActivitiProcessInstanceListComponent', () => {
}); });
it('should reload the list when the sort parameter changes', (done) => { it('should reload the list when the sort parameter changes', (done) => {
const sort = 'desc'; const sort = 'created-desc';
let change = new SimpleChange(null, sort); let change = new SimpleChange(null, sort);
component.onSuccess.subscribe((res) => { component.onSuccess.subscribe((res) => {
@@ -290,6 +290,21 @@ describe('ActivitiProcessInstanceListComponent', () => {
component.ngOnChanges({'sort': change}); component.ngOnChanges({'sort': change});
}); });
it('should sort the list when the sort parameter changes', (done) => {
const sort = 'created-asc';
let change = new SimpleChange(null, sort);
let sortSpy = spyOn(component.data, 'setSorting');
component.onSuccess.subscribe((res) => {
expect(res).toBeDefined();
expect(sortSpy).toHaveBeenCalledWith(new DataSorting('started', 'asc'));
done();
});
component.sort = sort;
component.ngOnChanges({'sort': change});
});
it('should reload the process list when the name parameter changes', (done) => { it('should reload the process list when the name parameter changes', (done) => {
const name = 'FakeTaskName'; const name = 'FakeTaskName';
let change = new SimpleChange(null, name); let change = new SimpleChange(null, name);

View File

@@ -17,8 +17,8 @@
import { Component, Input, Output, EventEmitter, OnInit, OnChanges, SimpleChanges } from '@angular/core'; import { Component, Input, Output, EventEmitter, OnInit, OnChanges, SimpleChanges } from '@angular/core';
import { AlfrescoTranslationService } from 'ng2-alfresco-core'; import { AlfrescoTranslationService } from 'ng2-alfresco-core';
import { ObjectDataTableAdapter, DataTableAdapter, DataRowEvent, ObjectDataRow } from 'ng2-alfresco-datatable'; import { ObjectDataTableAdapter, DataTableAdapter, DataRowEvent, ObjectDataRow, DataSorting } from 'ng2-alfresco-datatable';
import { TaskQueryRequestRepresentationModel } from 'ng2-activiti-tasklist'; import { ProcessFilterRequestRepresentation } from '../models/process-instance-filter.model';
import { ProcessInstance } from '../models/process-instance.model'; import { ProcessInstance } from '../models/process-instance.model';
import { ActivitiProcessService } from '../services/activiti-process.service'; import { ActivitiProcessService } from '../services/activiti-process.service';
@@ -46,7 +46,7 @@ export class ActivitiProcessInstanceListComponent implements OnInit, OnChanges {
@Input() @Input()
name: string; name: string;
requestNode: TaskQueryRequestRepresentationModel; requestNode: ProcessFilterRequestRepresentation;
@Input() @Input()
data: DataTableAdapter; data: DataTableAdapter;
@@ -130,7 +130,7 @@ export class ActivitiProcessInstanceListComponent implements OnInit, OnChanges {
); );
} }
private load(requestNode: TaskQueryRequestRepresentationModel) { private load(requestNode: ProcessFilterRequestRepresentation) {
this.processService.getProcessInstances(requestNode) this.processService.getProcessInstances(requestNode)
.subscribe( .subscribe(
(response) => { (response) => {
@@ -168,9 +168,25 @@ export class ActivitiProcessInstanceListComponent implements OnInit, OnChanges {
*/ */
private renderInstances(instances: any[]) { private renderInstances(instances: any[]) {
instances = this.optimizeNames(instances); instances = this.optimizeNames(instances);
this.setDatatableSorting();
this.data.setRows(instances); this.data.setRows(instances);
} }
/**
* Sort the datatable rows based on current value of 'sort' property
*/
private setDatatableSorting() {
if (!this.sort) {
return;
}
let sortingParams: string[] = this.sort.split('-');
if (sortingParams.length === 2) {
let sortColumn = sortingParams[0] === 'created' ? 'started' : sortingParams[0];
let sortOrder = sortingParams[1];
this.data.setSorting(new DataSorting(sortColumn, sortOrder));
}
}
/** /**
* Select the first instance of a list if present * Select the first instance of a list if present
*/ */
@@ -226,10 +242,9 @@ export class ActivitiProcessInstanceListComponent implements OnInit, OnChanges {
let requestNode = { let requestNode = {
appDefinitionId: this.appId, appDefinitionId: this.appId,
processDefinitionKey: this.processDefinitionKey, processDefinitionKey: this.processDefinitionKey,
text: this.name,
state: this.state, state: this.state,
sort: this.sort sort: this.sort
}; };
return new TaskQueryRequestRepresentationModel(requestNode); return new ProcessFilterRequestRepresentation(requestNode);
} }
} }