UNPKG

drf-paginator

Version:

Module for consuming paginated Django REST framework endpoints.

74 lines (54 loc) 2.31 kB
'use strict'; Object.defineProperty(exports, "__esModule", { value: true }); var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); var _lodash = require('lodash'); var _lodash2 = _interopRequireDefault(_lodash); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } var PageMerger = function () { function PageMerger(paginator) { _classCallCheck(this, PageMerger); this._count = null; this._paginator = paginator; } _createClass(PageMerger, [{ key: 'merge', value: function merge(startPage, endPage) { var _this = this; return this._fetchRequests(startPage, endPage).then(function (res) { return _this._mergeResponses(res); }); } }, { key: '_fetchRequests', value: function _fetchRequests(startPage, endPage) { var paginator = this._paginator; var requests = []; for (var page = startPage; page <= endPage; page++) { requests.push(paginator.fetchPage(page)); } return Promise.all(requests); } }, { key: '_mergeResponses', value: function _mergeResponses(responses) { var merge = function merge(result, response) { if (result.count < response.count) { result.count = response.count; } result.results = result.results.concat(response.results); return result; }; var defaultResult = { count: null, results: [] }; return _lodash2.default.reduce(responses, merge, defaultResult); } }]); return PageMerger; }(); exports.default = PageMerger; module.exports = exports['default'];