diff --git a/lib/reactive_table.js b/lib/reactive_table.js index dace3a0..d1a7ed7 100644 --- a/lib/reactive_table.js +++ b/lib/reactive_table.js @@ -47,7 +47,7 @@ var parseFilterString = function (filterString) { return filters; }; -var getFilterQuery = function (filter, fields) { +var getFilterQuery = function (filter, fields, mongoFilter) { var numberRegExp = /^\d+$/; var queryList = []; if (filter) { @@ -72,6 +72,14 @@ var getFilterQuery = function (filter, fields) { } }); } + + if (mongoFilter) { + if (!_.isObject(mongoFilter)) { + console.log("reactiveTable error: Your mongoFilter setting is not an object."); + } else { + queryList.push(mongoFilter); + } + } return queryList.length ? {'$and': queryList} : {}; }; @@ -115,6 +123,7 @@ var setup = function () { context.templateData = this.data; this.data.settings = this.data.settings || {}; var collection = this.data.collection || this.data.settings.collection || this.data; + context.mongoFilter = this.data.mongoFilter || this.data.settings.mongoFilter; if (!(collection instanceof Meteor.Collection)) { if (_.isArray(collection)) { @@ -233,7 +242,7 @@ var setup = function () { var getPageCount = function () { var rowsPerPage = this.rowsPerPage.get(); - var filterQuery = getFilterQuery(this.filter.get(), this.fields); + var filterQuery = getFilterQuery(this.filter.get(), this.fields, this.mongoFilter); var count = this.collection.find(filterQuery).count(); return Math.ceil(count / rowsPerPage); }; @@ -302,7 +311,7 @@ Template.reactiveTable.helpers({ var limit = this.rowsPerPage.get(); var currentPage = this.currentPage.get(); var skip = currentPage * limit; - var filterQuery = getFilterQuery(this.filter.get(), this.fields); + var filterQuery = getFilterQuery(this.filter.get(), this.fields, this.mongoFilter); if (sortKeyField.fn && !sortKeyField.sortByValue) { var data = this.collection.find(filterQuery).fetch(); @@ -347,7 +356,7 @@ Template.reactiveTable.helpers({ 'isntLastPage' : function () { var currentPage = 1 + this.currentPage.get(); var rowsPerPage = this.rowsPerPage.get(); - var filterQuery = getFilterQuery(this.filter.get(), this.fields); + var filterQuery = getFilterQuery(this.filter.get(), this.fields, this.mongoFilter); var count = this.collection.find(filterQuery).count(); return currentPage < Math.ceil(count / rowsPerPage); },