From 834a61eda4744be0635986138f1ad9367c8cba67 Mon Sep 17 00:00:00 2001 From: Cilibiu Bogdan Date: Fri, 20 Oct 2017 12:17:23 +0300 Subject: [PATCH] sort by file size (#2514) --- .../src/data/share-datatable-adapter.spec.ts | 36 +++++++++++++++++++ .../src/data/share-datatable-adapter.ts | 15 +++++--- 2 files changed, 47 insertions(+), 4 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 7f6093eae4..c52b3545e4 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 @@ -343,6 +343,42 @@ describe('ShareDataTableAdapter', () => { expect(( rows[1]).node).toBe(file1); }); + it('should sort by file size', () => { + let file1 = new FileNode('file1'); + let file2 = new FileNode('file2'); + let file3 = new FileNode('file3'); + let file4 = new FileNode('file4'); + + file1.entry.content.sizeInBytes = 146; // 146 bytes + file2.entry.content.sizeInBytes = 10075; // 9.84 KB + file3.entry.content.sizeInBytes = 4224120; // 4.03 MB + file4.entry.content.sizeInBytes = 2852791665; // 2.66 GB + + let col = {key: 'content.sizeInBytes'}; + let adapter = new ShareDataTableAdapter(documentListService, [col]); + + adapter.setRows([ + new ShareDataRow(file3, documentListService, null), + new ShareDataRow(file4, documentListService, null), + new ShareDataRow(file1, documentListService, null), + new ShareDataRow(file2, documentListService, null) + ]); + + adapter.sort('content.sizeInBytes', 'asc'); + let rows = adapter.getRows(); + + expect(( rows[0]).node).toBe(file1); + expect(( rows[1]).node).toBe(file2); + expect(( rows[2]).node).toBe(file3); + expect(( rows[3]).node).toBe(file4); + + adapter.sort('content.sizeInBytes', 'desc'); + expect(( rows[0]).node).toBe(file4); + expect(( rows[1]).node).toBe(file3); + expect(( rows[2]).node).toBe(file2); + expect(( rows[3]).node).toBe(file1); + }); + }); 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 6348451ab9..b7a4f20c71 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 @@ -145,8 +145,15 @@ export class ShareDataTableAdapter implements DataTableAdapter { } setSorting(sorting: DataSorting): void { + const options: Intl.CollatorOptions = {}; + this.sorting = sorting; - this.sortRows(this.rows, this.sorting); + + if (sorting.key && sorting.key.includes('sizeInBytes')) { + options.numeric = true; + } + + this.sortRows(this.rows, this.sorting, options); } sort(key?: string, direction?: string): void { @@ -166,7 +173,7 @@ export class ShareDataTableAdapter implements DataTableAdapter { this.imageResolver = resolver; } - private sortRows(rows: DataRow[], sorting: DataSorting) { + private sortRows(rows: DataRow[], sorting: DataSorting, options?: Intl.CollatorOptions) { if (sorting && sorting.key && rows && rows.length > 0) { rows.sort((a: ShareDataRow, b: ShareDataRow) => { if (a.node.entry.isFolder !== b.node.entry.isFolder) { @@ -188,8 +195,8 @@ export class ShareDataTableAdapter implements DataTableAdapter { } return sorting.direction === 'asc' - ? left.localeCompare(right) - : right.localeCompare(left); + ? left.localeCompare(right, undefined, options) + : right.localeCompare(left, undefined, options); }); } }