@vlsergey/react-bootstrap-pagetable
Version:
Complex solution to work with pageable data, including sorting, filtering, actions, changing displayed columns, etc.
42 lines (41 loc) • 1.81 kB
JavaScript
Object.defineProperty(exports, "__esModule", { value: true });
exports.DEFAULT_SIZE = exports.DEFAULT_PAGE = void 0;
var tslib_1 = require("tslib");
var FieldModel_1 = require("./FieldModel");
var localSort_1 = tslib_1.__importDefault(require("./sortable/localSort"));
exports.DEFAULT_PAGE = 0;
exports.DEFAULT_SIZE = 10;
function fetchFromArray(itemModel, src, _a) {
var page = _a.page, filter = _a.filter, size = _a.size, sort = _a.sort;
var filtered = !filter ? src : src.filter(function (item) {
return Object.keys(filter).every(function (fieldKey) {
var filterBy = filter[fieldKey];
if (typeof filterBy !== 'string')
return false;
var field = itemModel.fields.find(function (_a) {
var key = _a.key;
return key == fieldKey;
});
if (!field)
return false;
var itemValue = (field.getter || FieldModel_1.defaultGetter)(item, field, itemModel);
if (typeof itemValue !== 'string')
return false;
return itemValue.toLowerCase().includes(filterBy.toLowerCase());
});
});
var actualPage = page === null || page === undefined ? exports.DEFAULT_PAGE : page;
var actualSize = size === null || size === undefined ? exports.DEFAULT_SIZE : size;
var toSkip = actualPage * actualSize;
var sorted = localSort_1.default(itemModel, filtered, sort);
var content = sorted.slice(toSkip, toSkip + actualSize);
return {
content: content,
number: actualPage,
numberOfElements: content.length,
totalElements: src.length,
totalPages: Math.ceil(src.length / actualSize),
};
}
exports.default = fetchFromArray;
;