From 84813194374fb874cd492daee9edf7ffa79e1556 Mon Sep 17 00:00:00 2001 From: Matthew Leach Date: Mon, 6 Jul 2015 16:42:24 +0100 Subject: [PATCH 1/2] Add a getData funciton in the template context. --- lib/reactive_table.js | 80 ++++++++++++++++++++++++------------------- 1 file changed, 45 insertions(+), 35 deletions(-) diff --git a/lib/reactive_table.js b/lib/reactive_table.js index 0ccb3dd..831ff11 100644 --- a/lib/reactive_table.js +++ b/lib/reactive_table.js @@ -245,6 +245,50 @@ 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); + + } + } + } + var filters = this.data.filters || this.data.settings.filters || []; if (_.isEmpty(filters)) { context.showFilter = getDefaultTrueSetting('showFilter', this.data); @@ -431,41 +475,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 () { From ff2ee365a633990bf0a8169f7b6c5c6cbaa6390e Mon Sep 17 00:00:00 2001 From: Matthew Leach Date: Mon, 6 Jul 2015 18:23:22 +0100 Subject: [PATCH 2/2] Add a getDataCSV function. --- lib/reactive_table.js | 26 ++++++++++++++++++++++++++ 1 file changed, 26 insertions(+) diff --git a/lib/reactive_table.js b/lib/reactive_table.js index 831ff11..2fea3e9 100644 --- a/lib/reactive_table.js +++ b/lib/reactive_table.js @@ -289,6 +289,32 @@ var setup = function () { } } + 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);