@terabits/grapi
Version:
Grapi Schema Generator For GraphQL Server
69 lines (68 loc) • 2.84 kB
JavaScript
;
exports.__esModule = true;
exports.paginate = void 0;
var lodash_1 = require("../lodash");
var lodash_2 = require("../lodash");
var paginate = function (rows, pagination) {
if ((0, lodash_2.isEmpty)(pagination) || (0, lodash_2.isEmpty)(rows)) {
return {
data: rows,
total: rows.length,
hasNextPage: false,
hasPreviousPage: false
};
}
var transforms = [];
if (pagination.perPage && pagination.page) {
var skip = pagination.perPage * (pagination.page - 1);
var limit = pagination.perPage;
if (!(0, lodash_2.isUndefined)(skip) && skip > 0) {
transforms.push((0, lodash_1.slice)(skip));
}
if (!(0, lodash_2.isUndefined)(limit)) {
transforms.push((0, lodash_1.take)(limit));
}
var totalPages = Math.ceil(rows.length / pagination.perPage);
return {
data: (0, lodash_1.flow)(transforms)(rows),
total: rows.length,
hasNextPage: totalPages > pagination.page,
hasPreviousPage: pagination.page > 1
};
}
var last = pagination.last, first = pagination.first, before = pagination.before, after = pagination.after;
if (!(0, lodash_2.isUndefined)(before)) {
transforms.push((0, lodash_1.takeWhile)(function (row) { return row.id !== before; }));
}
if (!(0, lodash_2.isUndefined)(after)) {
transforms.push((0, lodash_1.takeRightWhile)(function (row) { return row.id !== after; }));
}
transforms.push(function (rows) {
if (first && last) {
if (first > rows.length) {
var diff = first - rows.length;
return diff < last ? (0, lodash_1.takeRight)(last - diff, rows) : [];
}
else {
return (0, lodash_1.takeRight)(last, (0, lodash_1.take)(first, rows));
}
}
if (first)
return (0, lodash_1.take)(first, rows);
if (last)
return (0, lodash_1.takeRight)(last, rows);
return rows;
});
var data = (0, lodash_1.flow)(transforms)(rows);
var firstRowId = (0, lodash_2.get)((0, lodash_2.first)(rows), 'id');
var firstFilteredDataId = (0, lodash_2.get)((0, lodash_2.first)(data), 'id');
var lastRowId = (0, lodash_2.get)((0, lodash_2.last)(rows), 'id');
var lastFilteredDataId = (0, lodash_2.get)((0, lodash_2.last)(data), 'id');
return {
data: data,
total: rows.length,
hasNextPage: (!(0, lodash_2.isNil)(lastRowId) && !(0, lodash_2.isNil)(lastFilteredDataId) && lastRowId !== lastFilteredDataId),
hasPreviousPage: (!(0, lodash_2.isNil)(firstRowId) && !(0, lodash_2.isNil)(firstFilteredDataId) && firstRowId !== firstFilteredDataId)
};
};
exports.paginate = paginate;