UNPKG

@terabits/grapi

Version:

Grapi Schema Generator For GraphQL Server

69 lines (68 loc) 2.84 kB
"use strict"; 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;