UNPKG

@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
"use strict"; 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;