Readd Top Operations (#3628)

* workin on top operations

* added top operations, changed default sorter to handle number string better
This commit is contained in:
Anthony Dresser
2019-01-09 13:52:38 -08:00
committed by GitHub
parent 7ba4f42494
commit 589b913960
5 changed files with 174 additions and 3 deletions

View File

@@ -8,6 +8,7 @@ import { Observer } from 'rxjs/Observer';
import { Event, Emitter } from 'vs/base/common/event';
import { TPromise } from 'vs/base/common/winjs.base';
import * as types from 'vs/base/common/types';
import { compare as stringCompare } from 'vs/base/common/strings';
import { IDisposableDataProvider } from 'sql/base/browser/ui/table/interfaces';
@@ -19,7 +20,23 @@ export interface IFindPosition {
function defaultSort<T>(args: Slick.OnSortEventArgs<T>, data: Array<T>): Array<T> {
let field = args.sortCol.field;
let sign = args.sortAsc ? 1 : -1;
return data.sort((a, b) => (a[field] === b[field] ? 0 : (a[field] > b[field] ? 1 : -1)) * sign);
let comparer: (a, b) => number;
if (types.isString(data[0][field])) {
if (Number(data[0][field]) !== NaN) {
comparer = (a: number, b: number) => {
let anum = Number(a[field]);
let bnum = Number(b[field]);
return anum === bnum ? 0 : anum > bnum ? 1 : -1;
};
} else {
comparer = stringCompare;
}
} else {
comparer = (a: number, b: number) => {
return a[field] === b[field] ? 0 : (a[field] > b[field] ? 1 : -1);
};
}
return data.sort((a, b) => comparer(a, b) * sign);
}
export class TableDataView<T extends Slick.SlickData> implements IDisposableDataProvider<T> {