diff --git a/demo-shell-ng2/app/components/activiti/activiti-demo.component.ts b/demo-shell-ng2/app/components/activiti/activiti-demo.component.ts index 98125b3730..b2fec92f42 100644 --- a/demo-shell-ng2/app/components/activiti/activiti-demo.component.ts +++ b/demo-shell-ng2/app/components/activiti/activiti-demo.component.ts @@ -122,6 +122,7 @@ export class ActivitiDemoComponent implements AfterViewInit { {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 // formRenderingService.setComponentTypeResolver('text', () => CustomEditorComponent, true); diff --git a/ng2-components/ng2-activiti-processlist/src/components/activiti-processlist.component.spec.ts b/ng2-components/ng2-activiti-processlist/src/components/activiti-processlist.component.spec.ts index 73582b1454..ca90dba508 100644 --- a/ng2-components/ng2-activiti-processlist/src/components/activiti-processlist.component.spec.ts +++ b/ng2-components/ng2-activiti-processlist/src/components/activiti-processlist.component.spec.ts @@ -21,7 +21,7 @@ import { Observable } from 'rxjs/Rx'; import { ActivitiProcessInstanceListComponent } from './activiti-processlist.component'; 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 { ProcessInstance } from '../models/process-instance.model'; @@ -275,7 +275,7 @@ describe('ActivitiProcessInstanceListComponent', () => { }); it('should reload the list when the sort parameter changes', (done) => { - const sort = 'desc'; + const sort = 'created-desc'; let change = new SimpleChange(null, sort); component.onSuccess.subscribe((res) => { @@ -290,6 +290,21 @@ describe('ActivitiProcessInstanceListComponent', () => { 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) => { const name = 'FakeTaskName'; let change = new SimpleChange(null, name); diff --git a/ng2-components/ng2-activiti-processlist/src/components/activiti-processlist.component.ts b/ng2-components/ng2-activiti-processlist/src/components/activiti-processlist.component.ts index d28f74b386..c7d83635bb 100644 --- a/ng2-components/ng2-activiti-processlist/src/components/activiti-processlist.component.ts +++ b/ng2-components/ng2-activiti-processlist/src/components/activiti-processlist.component.ts @@ -17,8 +17,8 @@ import { Component, Input, Output, EventEmitter, OnInit, OnChanges, SimpleChanges } from '@angular/core'; import { AlfrescoTranslationService } from 'ng2-alfresco-core'; -import { ObjectDataTableAdapter, DataTableAdapter, DataRowEvent, ObjectDataRow } from 'ng2-alfresco-datatable'; -import { TaskQueryRequestRepresentationModel } from 'ng2-activiti-tasklist'; +import { ObjectDataTableAdapter, DataTableAdapter, DataRowEvent, ObjectDataRow, DataSorting } from 'ng2-alfresco-datatable'; +import { ProcessFilterRequestRepresentation } from '../models/process-instance-filter.model'; import { ProcessInstance } from '../models/process-instance.model'; import { ActivitiProcessService } from '../services/activiti-process.service'; @@ -46,7 +46,7 @@ export class ActivitiProcessInstanceListComponent implements OnInit, OnChanges { @Input() name: string; - requestNode: TaskQueryRequestRepresentationModel; + requestNode: ProcessFilterRequestRepresentation; @Input() data: DataTableAdapter; @@ -130,7 +130,7 @@ export class ActivitiProcessInstanceListComponent implements OnInit, OnChanges { ); } - private load(requestNode: TaskQueryRequestRepresentationModel) { + private load(requestNode: ProcessFilterRequestRepresentation) { this.processService.getProcessInstances(requestNode) .subscribe( (response) => { @@ -168,9 +168,25 @@ export class ActivitiProcessInstanceListComponent implements OnInit, OnChanges { */ private renderInstances(instances: any[]) { instances = this.optimizeNames(instances); + this.setDatatableSorting(); 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 */ @@ -226,10 +242,9 @@ export class ActivitiProcessInstanceListComponent implements OnInit, OnChanges { let requestNode = { appDefinitionId: this.appId, processDefinitionKey: this.processDefinitionKey, - text: this.name, state: this.state, sort: this.sort }; - return new TaskQueryRequestRepresentationModel(requestNode); + return new ProcessFilterRequestRepresentation(requestNode); } }