@true-directive/base
Version:
The set of base classes for the TrueDirective Grid
84 lines (83 loc) • 2.92 kB
JavaScript
/**
* Copyright (c) 2018-2019 Aleksey Melnikov, True Directive Company.
* @link https://truedirective.com/
* @license MIT
*/
import { SortType } from '../classes/sort-info.class';
var SortPipe = /** @class */ (function () {
function SortPipe() {
}
SortPipe.compare = function (v1, v2, sType) {
if ((v1 === null || v1 === undefined) && (v2 === null || v2 === undefined)) {
return 0;
}
if (v1 === null || v1 === undefined) {
return sType === SortType.ASC ? -1 : 1;
}
if (v2 === null || v2 === undefined) {
return sType === SortType.ASC ? 1 : -1;
}
if (v1 === v2) {
return 0;
}
if (sType === SortType.ASC) {
return v1 > v2 ? 1 : -1;
}
return v1 < v2 ? 1 : -1;
};
SortPipe.prototype.transform = function (rows, sortings, groupedColumns) {
if (groupedColumns === void 0) { groupedColumns = []; }
if (!rows) {
return [];
}
if (sortings === null || (sortings.length === 0 && groupedColumns.length === 0)) {
return rows;
}
// Копируем массив и копию сортируем
var rr = rows.concat().sort(function (a1, a2) {
var r = 0;
var _loop_1 = function (i) {
var k = 1;
var el = groupedColumns[i];
var sortInfo = sortings.find(function (s) { return s.fieldName === el.fieldName; });
if (sortInfo && sortInfo.sortType === SortType.DESC) {
k = -1;
}
var v1 = a1[el.fieldName];
var v2 = a2[el.fieldName];
if ((v2 === null && v1 !== null) || v1 > v2) {
r = 1 * k;
return "break";
}
else {
if ((v1 === null && v2 !== null) || v1 < v2) {
r = -1 * k;
return "break";
}
}
};
for (var i = 0; i < groupedColumns.length; i++) {
var state_1 = _loop_1(i);
if (state_1 === "break")
break;
}
if (r !== 0) {
return r;
}
if (sortings.length === 0) {
return 0;
}
for (var i = 0; i < sortings.length; i++) {
var sortInfo = sortings[i];
var res = SortPipe.compare(a1[sortInfo.fieldName], a2[sortInfo.fieldName], sortInfo.sortType);
if (res !== 0) {
return res;
}
}
return 0;
});
return rr;
};
return SortPipe;
}());
export { SortPipe };