@vlsergey/react-bootstrap-pagetable
Version:
Complex solution to work with pageable data, including sorting, filtering, actions, changing displayed columns, etc.
37 lines (36 loc) • 1.56 kB
JavaScript
import { defaultGetter } from './FieldModel';
import localSort from './sortable/localSort';
export var DEFAULT_PAGE = 0;
export var DEFAULT_SIZE = 10;
export default 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 || defaultGetter)(item, field, itemModel);
if (typeof itemValue !== 'string')
return false;
return itemValue.toLowerCase().includes(filterBy.toLowerCase());
});
});
var actualPage = page === null || page === undefined ? DEFAULT_PAGE : page;
var actualSize = size === null || size === undefined ? DEFAULT_SIZE : size;
var toSkip = actualPage * actualSize;
var sorted = localSort(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),
};
}