UNPKG

@grapi/server

Version:

Grapi Schema Generator For GraphQL Server

69 lines (68 loc) 2.8 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.paginate = void 0; const lodash_1 = require("../lodash"); const lodash_2 = require("../lodash"); const paginate = (rows, pagination) => { if ((0, lodash_2.isEmpty)(pagination) || (0, lodash_2.isEmpty)(rows)) { return { data: rows, total: rows.length, hasNextPage: false, hasPreviousPage: false, }; } const transforms = []; if (pagination.perPage && pagination.page) { const skip = pagination.perPage * (pagination.page - 1); const 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)); } const 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, }; } const { last, first, before, after } = pagination; if (!(0, lodash_2.isUndefined)(before)) { transforms.push((0, lodash_1.takeWhile)(row => row.id !== before)); } if (!(0, lodash_2.isUndefined)(after)) { transforms.push((0, lodash_1.takeRightWhile)(row => row.id !== after)); } transforms.push(function (rows) { if (first && last) { if (first > rows.length) { const 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; }); const data = (0, lodash_1.flow)(transforms)(rows); const firstRowId = (0, lodash_2.get)((0, lodash_2.first)(rows), 'id'); const firstFilteredDataId = (0, lodash_2.get)((0, lodash_2.first)(data), 'id'); const lastRowId = (0, lodash_2.get)((0, lodash_2.last)(rows), 'id'); const lastFilteredDataId = (0, lodash_2.get)((0, lodash_2.last)(data), 'id'); return { 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;