diff --git a/lib/reactive_table.js b/lib/reactive_table.js index 0ccb3dd..2fea3e9 100644 --- a/lib/reactive_table.js +++ b/lib/reactive_table.js @@ -245,6 +245,76 @@ var setup = function () { } context.currentPage = currentPage; + context.getData = function (allData) { + if (this.server) { + return this.publishedRows.find({ + "reactive-table-id": this.publicationId.get() + }, { + sort: { + "reactive-table-sort": 1 + } + }); + } else { + var sortByValue = _.all(getSortedFields(this.fields, this.multiColumnSort), function (field) { + return field.sortByValue || !field.fn; + }); + var filterQuery = getFilterQuery(getFilterStrings(this.filters.get()), getFilterFields(this.filters.get(), this.fields), {enableRegex: this.enableRegex}); + + var limit = this.rowsPerPage.get(); + var currentPage = this.currentPage.get(); + var skip = currentPage * limit; + + if (sortByValue) { + + var sortQuery = getSortQuery(this.fields, this.multiColumnSort); + var queryOptions = {sort: sortQuery}; + if (!allData) { + queryOptions.skip = skip; + queryOptions.limit = limit; + } + + return this.collection.find(filterQuery, queryOptions); + + } else { + + var rows = this.collection.find(filterQuery).fetch(); + sortedRows = sortWithFunctions(rows, this.fields, this.multiColumnSort); + + if (allData) + return sortedRows; + else + return sortedRows.slice(skip, skip + limit); + + } + } + } + + context.getTableDataCSV = function (tableContext, allData) { + var visibleFields = _.map( + _.filter(tableContext.visibleFields.get(), function(field) { + return field.isVisible.curValue; + }) , function (fieldId) { + return _.findWhere(tableContext.fields, {fieldId: fieldId.fieldId}); + }); + + var csv = ""; + + csv += _.map(visibleFields, function(field) { + return field.label; + }).join(",") + "\n"; + + tableContext.getData(allData).forEach(function (object) { + csv += _.map(visibleFields, function (field) { + var fn = field.fn || function (value) { return value; }; + var key = field.key || field; + var value = get(object, key); + return fn(value, object); + }).join(",") + "\n"; + }); + + return csv; + } + var filters = this.data.filters || this.data.settings.filters || []; if (_.isEmpty(filters)) { context.showFilter = getDefaultTrueSetting('showFilter', this.data); @@ -431,41 +501,7 @@ Template.reactiveTable.helpers({ }, 'sortedRows': function () { - if (this.server) { - return this.publishedRows.find({ - "reactive-table-id": this.publicationId.get() - }, { - sort: { - "reactive-table-sort": 1 - } - }); - } else { - var sortByValue = _.all(getSortedFields(this.fields, this.multiColumnSort), function (field) { - return field.sortByValue || !field.fn; - }); - var filterQuery = getFilterQuery(getFilterStrings(this.filters.get()), getFilterFields(this.filters.get(), this.fields), {enableRegex: this.enableRegex}); - - var limit = this.rowsPerPage.get(); - var currentPage = this.currentPage.get(); - var skip = currentPage * limit; - - if (sortByValue) { - - var sortQuery = getSortQuery(this.fields, this.multiColumnSort); - return this.collection.find(filterQuery, { - sort: sortQuery, - skip: skip, - limit: limit - }); - - } else { - - var rows = this.collection.find(filterQuery).fetch(); - sortedRows = sortWithFunctions(rows, this.fields, this.multiColumnSort); - return sortedRows.slice(skip, skip + limit); - - } - } + return this.getData(false); }, 'noData': function () {