mirror of
https://github.com/Alfresco/alfresco-ng2-components.git
synced 2025-05-26 17:24:56 +00:00
#429 preserve sorting on navigation and paging
This commit is contained in:
parent
ba72034b3d
commit
3cc94345d7
@ -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)
|
||||
|
@ -400,6 +400,34 @@ describe('ShareDataTableAdapter', () => {
|
||||
expect((<ShareDataRow> rows[0]).node).toBe(file2);
|
||||
expect((<ShareDataRow> 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 = <DataColumn> { 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((<ShareDataRow> sorted[0]).node).toBe(file1);
|
||||
expect((<ShareDataRow> sorted[1]).node).toBe(file2);
|
||||
|
||||
documentListService.getFolderResult = page2;
|
||||
adapter.loadPath('/page2');
|
||||
|
||||
sorted = adapter.getRows();
|
||||
expect((<ShareDataRow> sorted[0]).node).toBe(file3);
|
||||
expect((<ShareDataRow> sorted[1]).node).toBe(file4);
|
||||
});
|
||||
});
|
||||
|
||||
describe('ShareDataRow', () => {
|
||||
|
@ -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');
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user