UNPKG

@vlsergey/react-bootstrap-pagetable

Version:

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

49 lines (48 loc) 1.91 kB
import { __read, __spreadArray } from "tslib"; import { defaultGetter } from '../FieldModel'; export default function localSort(itemModel, data, sort) { if (!sort) return data; var result = __spreadArray([], __read(data)); var actualSortBy = __spreadArray([], __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; } function inplaceSort(itemModel, src, fieldModel, direction) { if (direction === void 0) { direction = 'ASC'; } var getter = fieldModel.getter || 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); }