From 2ce0441048b1d2ee0d3d52ba01eed997d6229ef3 Mon Sep 17 00:00:00 2001 From: Cilibiu Bogdan Date: Wed, 25 Oct 2017 17:31:42 +0300 Subject: [PATCH] [ADF-1815] sort options (#2545) --- .../src/data/share-datatable-adapter.spec.ts | 38 +++++++++++++++++++ .../src/data/share-datatable-adapter.ts | 11 +++++- 2 files changed, 47 insertions(+), 2 deletions(-) diff --git a/ng2-components/ng2-alfresco-documentlist/src/data/share-datatable-adapter.spec.ts b/ng2-components/ng2-alfresco-documentlist/src/data/share-datatable-adapter.spec.ts index 25073f6feb..cdd52e679e 100644 --- a/ng2-components/ng2-alfresco-documentlist/src/data/share-datatable-adapter.spec.ts +++ b/ng2-components/ng2-alfresco-documentlist/src/data/share-datatable-adapter.spec.ts @@ -380,6 +380,44 @@ describe('ShareDataTableAdapter', () => { expect(( rows[3]).node).toBe(file1); }); + it('should sort by name', () => { + let file1 = new FileNode('file1'); + let file2 = new FileNode('file11'); + let file3 = new FileNode('file20'); + let file4 = new FileNode('file11-1'); // auto rename + let file5 = new FileNode('a'); + let file6 = new FileNode('b'); + + let col = {key: 'name'}; + let adapter = new ShareDataTableAdapter(documentListService, [col]); + + adapter.setRows([ + new ShareDataRow(file4, documentListService, null), + new ShareDataRow(file6, documentListService, null), + new ShareDataRow(file3, documentListService, null), + new ShareDataRow(file1, documentListService, null), + new ShareDataRow(file2, documentListService, null), + new ShareDataRow(file5, documentListService, null) + ]); + + adapter.sort('name', 'asc'); + let rows = adapter.getRows(); + + expect(( rows[0]).node).toBe(file5); + expect(( rows[1]).node).toBe(file6); + expect(( rows[2]).node).toBe(file1); + expect(( rows[3]).node).toBe(file2); + expect(( rows[4]).node).toBe(file4); + expect(( rows[5]).node).toBe(file3); + + adapter.sort('name', 'desc'); + expect(( rows[0]).node).toBe(file3); + expect(( rows[1]).node).toBe(file4); + expect(( rows[2]).node).toBe(file2); + expect(( rows[3]).node).toBe(file1); + expect(( rows[4]).node).toBe(file6); + expect(( rows[5]).node).toBe(file5); + }); }); describe('ShareDataRow', () => { diff --git a/ng2-components/ng2-alfresco-documentlist/src/data/share-datatable-adapter.ts b/ng2-components/ng2-alfresco-documentlist/src/data/share-datatable-adapter.ts index 9e0c21a3e1..e7d84912d5 100644 --- a/ng2-components/ng2-alfresco-documentlist/src/data/share-datatable-adapter.ts +++ b/ng2-components/ng2-alfresco-documentlist/src/data/share-datatable-adapter.ts @@ -156,7 +156,7 @@ export class ShareDataTableAdapter implements DataTableAdapter { options.numeric = true; } - this.sortRows(this.rows, this.sorting, options); + this.sortRows(this.rows, this.sorting); } sort(key?: string, direction?: string): void { @@ -176,8 +176,15 @@ export class ShareDataTableAdapter implements DataTableAdapter { this.imageResolver = resolver; } - private sortRows(rows: DataRow[], sorting: DataSorting, options?: Intl.CollatorOptions) { + private sortRows(rows: DataRow[], sorting: DataSorting) { + const options: Intl.CollatorOptions = {}; + if (sorting && sorting.key && rows && rows.length > 0) { + + if (sorting.key.includes('sizeInBytes') || sorting.key === 'name') { + options.numeric = true; + } + rows.sort((a: ShareDataRow, b: ShareDataRow) => { if (a.node.entry.isFolder !== b.node.entry.isFolder) { return a.node.entry.isFolder ? -1 : 1;