diff --git a/ng2-components/ng2-alfresco-documentlist/karma.conf.js b/ng2-components/ng2-alfresco-documentlist/karma.conf.js index 2edcd2e495..5bdd3f81bc 100644 --- a/ng2-components/ng2-alfresco-documentlist/karma.conf.js +++ b/ng2-components/ng2-alfresco-documentlist/karma.conf.js @@ -72,7 +72,7 @@ module.exports = function (config) { ], // Coverage reporter generates the coverage - reporters: ['mocha', 'coverage', 'coveralls', 'kjhtml'], + reporters: ['mocha', 'coverage', 'kjhtml'], // Source files that you wanna generate coverage for. // Do not include tests or libraries (these files will be instrumented by Istanbul) 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 42f9073d9f..3dd2c1a4fb 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 @@ -400,6 +400,34 @@ describe('ShareDataTableAdapter', () => { expect(( rows[0]).node).toBe(file2); expect(( rows[1]).node).toBe(file1); }); + + it('should preserve sorting on navigation', () => { + let file1 = new FileNode('file1'); + let file2 = new FileNode('file2'); + let file3 = new FileNode('file3'); + let file4 = new FileNode('file4'); + + let col = { key: 'name' }; + let adapter = new ShareDataTableAdapter(documentListService, null, [col]); + adapter.setSorting(new DataSorting('name', 'asc')); + + let page1 = new PageNode([file2, file1]); + let page2 = new PageNode([file4, file3]); + + documentListService.getFolderResult = page1; + adapter.loadPath('/page1'); + + let sorted = adapter.getRows(); + expect(( sorted[0]).node).toBe(file1); + expect(( sorted[1]).node).toBe(file2); + + documentListService.getFolderResult = page2; + adapter.loadPath('/page2'); + + sorted = adapter.getRows(); + expect(( sorted[0]).node).toBe(file3); + expect(( sorted[1]).node).toBe(file4); + }); }); 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 a3146ff66a..7df12aca26 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 @@ -181,32 +181,7 @@ export class ShareDataTableAdapter implements DataTableAdapter, PaginationProvid setSorting(sorting: DataSorting): void { this.sorting = sorting; - - if (sorting && sorting.key && this.rows && this.rows.length > 0) { - this.rows.sort((a: ShareDataRow, b: ShareDataRow) => { - if (a.node.entry.isFolder !== b.node.entry.isFolder) { - return a.node.entry.isFolder ? -1 : 1; - } - - let left = a.getValue(sorting.key); - if (left) { - left = (left instanceof Date) ? left.valueOf().toString() : left.toString(); - } else { - left = ''; - } - - let right = b.getValue(sorting.key); - if (right) { - right = (right instanceof Date) ? right.valueOf().toString() : right.toString(); - } else { - right = ''; - } - - return sorting.direction === 'asc' - ? left.localeCompare(right) - : right.localeCompare(left); - }); - } + this.sortRows(this.rows, this.sorting); } sort(key?: string, direction?: string): void { @@ -243,6 +218,34 @@ export class ShareDataTableAdapter implements DataTableAdapter, PaginationProvid this.imageResolver = resolver; } + private sortRows(rows: DataRow[], sorting: DataSorting) { + if (sorting && sorting.key && rows && rows.length > 0) { + rows.sort((a: ShareDataRow, b: ShareDataRow) => { + if (a.node.entry.isFolder !== b.node.entry.isFolder) { + return a.node.entry.isFolder ? -1 : 1; + } + + let left = a.getValue(sorting.key); + if (left) { + left = (left instanceof Date) ? left.valueOf().toString() : left.toString(); + } else { + left = ''; + } + + let right = b.getValue(sorting.key); + if (right) { + right = (right instanceof Date) ? right.valueOf().toString() : right.toString(); + } else { + right = ''; + } + + return sorting.direction === 'asc' + ? left.localeCompare(right) + : right.localeCompare(left); + }); + } + } + private loadPage(page: NodePaging) { this.page = page; this.resetPagination(); @@ -260,11 +263,16 @@ export class ShareDataTableAdapter implements DataTableAdapter, PaginationProvid // Sort by first sortable or just first column if (this.columns && this.columns.length > 0) { - let sortable = this.columns.filter(c => c.sortable); - if (sortable.length > 0) { - this.sort(sortable[0].key, 'asc'); + let sorting = this.getSorting(); + if (sorting) { + this.sortRows(rows, sorting); } else { - this.sort(this.columns[0].key, 'asc'); + let sortable = this.columns.filter(c => c.sortable); + if (sortable.length > 0) { + this.sort(sortable[0].key, 'asc'); + } else { + this.sort(this.columns[0].key, 'asc'); + } } } }