Files
edx-platform/lms/static/js/discovery/collection.js
Syed Ali Abbas Zaidi 8480dbc228 chore: apply amnesty on existing not fixable issues (#32215)
* fix: eslint operator-linebreak issue

* fix: eslint quotes issue

* fix: react jsx indent and props issues

* fix: eslint trailing spaces issues

* fix: eslint line around directives issue

* fix: eslint semi rule

* fix: eslint newline per chain rule

* fix: eslint space infix ops rule

* fix: eslint space-in-parens issue

* fix: eslint space before function paren issue

* fix: eslint space before blocks issue

* fix: eslint arrow body style issue

* fix: eslint dot-location issue

* fix: eslint quotes issue

* fix: eslint quote props issue

* fix: eslint operator assignment issue

* fix: eslint new line after import issue

* fix: indent issues

* fix: operator assignment issue

* fix: all autofixable eslint issues

* fix: all react related fixable issues

* fix: autofixable eslint issues

* chore: remove all template literals

* fix: remaining autofixable issues

* chore: apply amnesty on all existing issues

* fix: failing xss-lint issues

* refactor: apply amnesty on remaining issues

* refactor: apply amnesty on new issues

* fix: remove file level suppressions

* refactor: apply amnesty on new issues
2023-08-07 19:13:19 +05:00

106 lines
3.5 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) {
// eslint-disable-next-line no-unused-expressions
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() {
// eslint-disable-next-line no-unused-expressions
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.aggs !== 'undefined') {
this.facets = response.aggs;
} 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));