Files
edx-platform/lms/static/js/discovery/collection.js
Eric Fischer 5bc6b31e29 eslint --fix
2017-12-08 14:38:41 -05:00

104 lines
3.3 KiB
JavaScript

(function(define) {
define([
'backbone',
'js/discovery/models/course_card'
], function(Backbone, CourseCard) {
'use strict';
return Backbone.Collection.extend({
model: CourseCard,
pageSize: 20,
totalCount: 0,
latestModelsCount: 0,
searchTerm: '',
selectedFacets: {},
facets: {},
page: 0,
url: '/search/course_discovery/',
fetchXhr: null,
performSearch: function(searchTerm, facets) {
this.fetchXhr && this.fetchXhr.abort();
this.searchTerm = searchTerm || '';
this.selectedFacets = facets || {};
var data = this.preparePostData(0);
this.resetState();
this.fetchXhr = this.fetch({
data: data,
type: 'POST',
success: function(self, xhr) {
self.trigger('search');
},
error: function(self, xhr) {
self.trigger('error');
}
});
},
loadNextPage: function() {
this.fetchXhr && this.fetchXhr.abort();
var data = this.preparePostData(this.page + 1);
this.fetchXhr = this.fetch({
data: data,
type: 'POST',
success: function(self, xhr) {
self.page += 1;
self.trigger('next');
},
error: function(self, xhr) {
self.trigger('error');
},
add: true,
reset: false,
remove: false
});
},
preparePostData: function(pageNumber) {
var data = {
search_string: this.searchTerm,
page_size: this.pageSize,
page_index: pageNumber
};
if (this.selectedFacets.length > 0) {
this.selectedFacets.each(function(facet) {
data[facet.get('type')] = facet.get('query');
});
}
return data;
},
parse: function(response) {
var results = response.results || [];
this.latestModelsCount = results.length;
this.totalCount = response.total;
if (typeof response.facets !== 'undefined') {
this.facets = response.facets;
} else {
this.facets = [];
}
return _.map(results, function(result) {
return result.data;
});
},
resetState: function() {
this.reset();
this.page = 0;
this.totalCount = 0;
this.latestModelsCount = 0;
},
hasNextPage: function() {
return this.totalCount - ((this.page + 1) * this.pageSize) > 0;
},
latestModels: function() {
return this.last(this.latestModelsCount);
}
});
});
}(define || RequireJS.define));