drf-paginator
Version:
Module for consuming paginated Django REST framework endpoints.
74 lines (54 loc) • 2.31 kB
JavaScript
;
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'];