[ADF-1815] sort options (#2545)

This commit is contained in:
Cilibiu Bogdan
2017-10-25 17:31:42 +03:00
committed by Denys Vuika
parent e242628b65
commit 2ce0441048
2 changed files with 47 additions and 2 deletions

View File

@@ -380,6 +380,44 @@ describe('ShareDataTableAdapter', () => {
expect((<ShareDataRow> 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 = <DataColumn> {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((<ShareDataRow> rows[0]).node).toBe(file5);
expect((<ShareDataRow> rows[1]).node).toBe(file6);
expect((<ShareDataRow> rows[2]).node).toBe(file1);
expect((<ShareDataRow> rows[3]).node).toBe(file2);
expect((<ShareDataRow> rows[4]).node).toBe(file4);
expect((<ShareDataRow> rows[5]).node).toBe(file3);
adapter.sort('name', 'desc');
expect((<ShareDataRow> rows[0]).node).toBe(file3);
expect((<ShareDataRow> rows[1]).node).toBe(file4);
expect((<ShareDataRow> rows[2]).node).toBe(file2);
expect((<ShareDataRow> rows[3]).node).toBe(file1);
expect((<ShareDataRow> rows[4]).node).toBe(file6);
expect((<ShareDataRow> rows[5]).node).toBe(file5);
});
});
describe('ShareDataRow', () => {

View File

@@ -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;