in src/Explorer/Tables/DataTable/TableEntityListViewModel.ts [314:374]
protected dataComparer(
item1: Entities.ITableEntity,
item2: Entities.ITableEntity,
sortOrder: any[],
oSettings: any,
): number {
var sort: any;
var itemA: any;
var itemB: any;
var length: number = $.isArray(sortOrder) ? sortOrder.length : 0; // sortOrder can be null
var rowA: Entities.ITableEntity = item1;
var rowB: Entities.ITableEntity = item2;
for (var k = 0; k < length; k++) {
sort = sortOrder[k];
var col = oSettings.aoColumns[sort.column].mData;
// If the value is null or undefined, show them at last
var isItem1NullOrUndefined = _.isNull(rowA[col]) || _.isUndefined(rowA[col]);
var isItem2NullOrUndefined = _.isNull(rowB[col]) || _.isUndefined(rowB[col]);
if (isItem1NullOrUndefined || isItem2NullOrUndefined) {
if (isItem1NullOrUndefined && isItem2NullOrUndefined) {
return 0;
}
return isItem1NullOrUndefined ? 1 : -1;
}
switch ((<any>rowA[col]).$) {
case Constants.TableType.Int32:
case Constants.TableType.Int64:
case Constants.CassandraType.Int:
case Constants.CassandraType.Bigint:
case Constants.CassandraType.Smallint:
case Constants.CassandraType.Varint:
case Constants.CassandraType.Tinyint:
itemA = parseInt(<string>(<any>rowA[col])._, 0);
itemB = parseInt(<string>(<any>rowB[col])._, 0);
break;
case Constants.TableType.Double:
case Constants.CassandraType.Double:
case Constants.CassandraType.Float:
case Constants.CassandraType.Decimal:
itemA = parseFloat(<string>(<any>rowA[col])._);
itemB = parseFloat(<string>(<any>rowB[col])._);
break;
case Constants.TableType.DateTime:
itemA = new Date(<string>(<any>rowA[col])._);
itemB = new Date(<string>(<any>rowB[col])._);
break;
default:
itemA = <string>(<any>rowA[col])._?.toLowerCase();
itemB = <string>(<any>rowB[col])._?.toLowerCase();
}
var compareResult: number = itemA < itemB ? -1 : itemA > itemB ? 1 : 0;
if (compareResult !== 0) {
return sort.dir === "asc" ? compareResult : -compareResult;
}
}
return 0;
}