UNPKG

@vlsergey/react-bootstrap-pagetable

Version:

Complex solution to work with pageable data, including sorting, filtering, actions, changing displayed columns, etc.

52 lines (51 loc) 2.04 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); var tslib_1 = require("tslib"); var FieldModel_1 = require("../FieldModel"); function localSort(itemModel, data, sort) { if (!sort) return data; var result = tslib_1.__spreadArray([], tslib_1.__read(data)); var actualSortBy = tslib_1.__spreadArray([], tslib_1.__read(sort)); actualSortBy.reverse(); actualSortBy.forEach(function (_a) { var field = _a.field, direction = _a.direction; var fieldModel = itemModel.fields.find(function (_a) { var key = _a.key; return key === field; }); if (!fieldModel) throw Error("Missing field " + field + " model in item model"); inplaceSort(itemModel, result, fieldModel, direction); }); return result; } exports.default = localSort; function inplaceSort(itemModel, src, fieldModel, direction) { if (direction === void 0) { direction = 'ASC'; } var getter = fieldModel.getter || FieldModel_1.defaultGetter; var ascComparator = function (a, b) { var vA = getter(a, fieldModel, itemModel); var vB = getter(b, fieldModel, itemModel); if (vA === undefined && vB === undefined) return 0; if (vA === undefined && vB !== undefined) return +1; // A to the end if (vA !== undefined && vB === undefined) return -1; // B to the end if (vA === null && vB === null) return 0; if ((typeof vA === 'number' || vA === null) && (typeof vB === 'number' || vB === null)) { var nA = vA || 0; var nB = vB || 0; return nA === nB ? 0 : nA < nB ? -1 : +1; } var sA = String(vA); var sB = String(vB); return sA === sB ? 0 : sA < sB ? -1 : +1; }; var comparator = direction === 'ASC' ? ascComparator : function (a, b) { return -ascComparator(a, b); }; src.sort(comparator); }