Merge pull request #690 from Sonarr/backgrid-pageable-reset
Alter backbone.pageable to stay on same page during fetchpull/2/head
commit
fcfbfae4c1
@ -0,0 +1,45 @@
|
||||
var _ = require('underscore');
|
||||
|
||||
module.exports = function() {
|
||||
var originalMakeCollectionEventHandler = this.prototype._makeCollectionEventHandler;
|
||||
|
||||
this.prototype._makeCollectionEventHandler = function (pageCollection, fullCollection) {
|
||||
var self = this;
|
||||
this.pageCollection = pageCollection;
|
||||
this.fullCollection = fullCollection;
|
||||
var eventHandler = originalMakeCollectionEventHandler.apply(this, arguments);
|
||||
|
||||
return _.wrap(eventHandler, _.bind(self._resetEventHandler, self));
|
||||
};
|
||||
|
||||
this.prototype._resetEventHandler = function (originalEventHandler, event, model, collection, options) {
|
||||
if (event === 'reset') {
|
||||
var currentPage = this.state.currentPage;
|
||||
var pageSize = this.state.pageSize;
|
||||
|
||||
originalEventHandler.apply(this, [].slice.call(arguments, 1));
|
||||
|
||||
var totalPages = Math.ceil(this.state.totalRecords / pageSize);
|
||||
var newPage = Math.min(currentPage, totalPages);
|
||||
|
||||
if (newPage !== this.state.currentPage) {
|
||||
this.state.currentPage = newPage;
|
||||
|
||||
// If backbone pageable fixes their reset bug
|
||||
// (they reset the page number, but not the range),
|
||||
// we'll want to do this for all resets where the page number changed
|
||||
if (currentPage !== newPage) {
|
||||
var pageStart = (newPage - 1) * pageSize;
|
||||
var pageEnd = pageStart + pageSize;
|
||||
|
||||
this.pageCollection.reset(this.fullCollection.models.slice(pageStart, pageEnd),
|
||||
_.extend({}, options, { parse : false }));
|
||||
}
|
||||
}
|
||||
} else {
|
||||
originalEventHandler.call(this, [].slice.call(arguments, 1));
|
||||
}
|
||||
};
|
||||
|
||||
return this;
|
||||
};
|
Loading…
Reference in new issue