71 lines
2.2 KiB
JavaScript
71 lines
2.2 KiB
JavaScript
;(function (define) {
|
|
|
|
define(['backbone', 'course_discovery_meanings'], function(Backbone, meanings) {
|
|
'use strict';
|
|
|
|
return function (Collection, Form, ResultListView, FilterBarView, FacetsBarView, searchQuery) {
|
|
//facet types configuration - set default display names
|
|
var facetsTypes = meanings;
|
|
|
|
var collection = new Collection([]);
|
|
var results = new ResultListView({ collection: collection });
|
|
var dispatcher = _.clone(Backbone.Events);
|
|
var form = new Form();
|
|
var filters = new FilterBarView();
|
|
var facetsBarView = new FacetsBarView(facetsTypes);
|
|
|
|
dispatcher.listenTo(form, 'search', function (query) {
|
|
form.showLoadingIndicator();
|
|
filters.changeQueryFilter(query);
|
|
});
|
|
|
|
dispatcher.listenTo(filters, 'search', function (searchTerm, facets) {
|
|
collection.performSearch(searchTerm, facets);
|
|
form.showLoadingIndicator();
|
|
});
|
|
|
|
dispatcher.listenTo(filters, 'clear', function () {
|
|
form.clearSearch();
|
|
collection.performSearch();
|
|
filters.hideClearAllButton();
|
|
});
|
|
|
|
dispatcher.listenTo(results, 'next', function () {
|
|
collection.loadNextPage();
|
|
form.showLoadingIndicator();
|
|
});
|
|
|
|
dispatcher.listenTo(collection, 'search', function () {
|
|
if (collection.length > 0) {
|
|
results.render();
|
|
}
|
|
else {
|
|
form.showNotFoundMessage(collection.searchTerm);
|
|
}
|
|
facetsBarView.renderFacets(collection.facets);
|
|
form.hideLoadingIndicator();
|
|
});
|
|
|
|
dispatcher.listenTo(collection, 'next', function () {
|
|
results.renderNext();
|
|
form.hideLoadingIndicator();
|
|
});
|
|
|
|
dispatcher.listenTo(collection, 'error', function () {
|
|
form.showErrorMessage();
|
|
form.hideLoadingIndicator();
|
|
});
|
|
|
|
dispatcher.listenTo(facetsBarView, 'addFilter', function (data) {
|
|
filters.addFilter(data);
|
|
});
|
|
|
|
// kick off search on page refresh
|
|
form.doSearch(searchQuery);
|
|
|
|
};
|
|
|
|
});
|
|
|
|
})(define || RequireJS.define);
|