mirror of
https://github.com/Sonarr/Sonarr
synced 2024-12-27 18:28:19 +00:00
AsPageableMixin to make backbone.pageable to stay on same page during fetch
Closes #670
This commit is contained in:
parent
645c9c25d1
commit
3f7ae250c7
2 changed files with 48 additions and 1 deletions
|
@ -1,8 +1,10 @@
|
||||||
var _ = require('underscore');
|
var _ = require('underscore');
|
||||||
var PageableCollection = require('backbone.pageable');
|
var PageableCollection = require('backbone.pageable');
|
||||||
|
//var PageableCollection = require('../../Shared/Grid/SonarrPageableCollection');
|
||||||
var QueueModel = require('./QueueModel');
|
var QueueModel = require('./QueueModel');
|
||||||
var FormatHelpers = require('../../Shared/FormatHelpers');
|
var FormatHelpers = require('../../Shared/FormatHelpers');
|
||||||
var AsSortedCollection = require('../../Mixins/AsSortedCollection');
|
var AsSortedCollection = require('../../Mixins/AsSortedCollection');
|
||||||
|
var AsPageableCollection = require('../../Mixins/AsPageableCollection');
|
||||||
var moment = require('moment');
|
var moment = require('moment');
|
||||||
|
|
||||||
require('../../Mixins/backbone.signalr.mixin');
|
require('../../Mixins/backbone.signalr.mixin');
|
||||||
|
@ -64,9 +66,9 @@ var QueueCollection = PageableCollection.extend({
|
||||||
});
|
});
|
||||||
|
|
||||||
QueueCollection = AsSortedCollection.call(QueueCollection);
|
QueueCollection = AsSortedCollection.call(QueueCollection);
|
||||||
|
QueueCollection = AsPageableCollection.call(QueueCollection);
|
||||||
|
|
||||||
var collection = new QueueCollection().bindSignalR();
|
var collection = new QueueCollection().bindSignalR();
|
||||||
collection.fetch();
|
collection.fetch();
|
||||||
|
|
||||||
|
|
||||||
module.exports = collection;
|
module.exports = collection;
|
45
src/UI/Mixins/AsPageableCollection.js
Normal file
45
src/UI/Mixins/AsPageableCollection.js
Normal file
|
@ -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 a new issue