import { Template } from 'meteor/templating'; import { Querying } from '/client/imports/ui'; import { Enums, SessionManager } from '/client/imports/modules'; import '/client/imports/views/query_templates_options/explain/explain'; import '/client/imports/views/query_templates_options/cursor_options/cursor_options'; import './find.html'; Template.find.onRendered(() => { Querying.initOptions(Enums.CURSOR_OPTIONS); $('#cmbFindCursorOptions').val('LIMIT').trigger('chosen:updated'); SessionManager.set(SessionManager.strSessionSelectedOptions, ['LIMIT']); }); Template.find.executeQuery = Querying.Collection.Find.execute.bind(Querying.Collection.Find); Template.find.renderQuery = Querying.Collection.Find.render.bind(Querying.Collection.Find);
Template.find.onCreated(function() { var instance = this; // Reflect filter selection in URI // This creates a browser history entry so it is not done on every filter // change. For example, when the search-field receives keydowns, the filter // is updated but the change is not reflected in the URI. instance.updateUrl = function() { var filterParams = instance.filter.toParams(); delete filterParams.region; // HACK region is kept in the session (for bad reasons) delete filterParams.internal; var queryString = UrlTools.paramsToQueryString(filterParams); var options = {}; if (queryString.length) { options.query = queryString; } RouterAutoscroll.cancelNext(); var router = Router.current(); Router.go(router.route.getName(), { _id: router.params._id }, options); return true; }; instance.updateCategorySearch = function(query) { instance.categorySearch.set(query); if (!query) { instance.categorySearchResults.set(Categories); return; } var lowQuery = query.toLowerCase(); var results = {}; for (var mainCategory in Categories) { if (mf('category.'+mainCategory).toLowerCase().indexOf(lowQuery) >= 0) { results[mainCategory] = []; } for (i = 0; i < Categories[mainCategory].length; i++) { var subCategory = Categories[mainCategory][i]; if (mf('category.'+subCategory).toLowerCase().indexOf(lowQuery) >= 0) { if (results[mainCategory]) results[mainCategory].push(subCategory); else results[subCategory] = []; } } } instance.categorySearchResults.set(results); }; instance.updateCategorySearchDebounced = _.debounce(instance.updateCategorySearch, 200); instance.showingFilters = new ReactiveVar(false); instance.categorySearch = new ReactiveVar(''); instance.categorySearchResults = new ReactiveVar(Categories); instance.courseLimit = new ReactiveVar(36); instance.coursesReady = new ReactiveVar(false); // Latch var filter = Courses.Filtering(); instance.filter = filter; // Read URL state instance.autorun(function() { var query = Template.currentData(); filter .clear() .read(query) .done(); }); // When there are filters set, show the filtering pane instance.autorun(function() { for (var name in filter.toParams()) { if (hiddenFilters.indexOf(name) > -1) { instance.showingFilters.set(true); } } }); // Update whenever filter changes instance.autorun(function() { var filterQuery = filter.toQuery(); instance.coursesReady.set(false); // Add one to the limit so we know there is more to show var limit = instance.courseLimit.get() + 1; instance.subscribe('Courses.findFilter', filterQuery, limit, function() { instance.coursesReady.set(true); }); }); });