From 1b3f33b52f5e3d71a756dba5482a6eacfda47772 Mon Sep 17 00:00:00 2001 From: Dan Emos Date: Thu, 12 Oct 2017 16:27:26 -0500 Subject: [PATCH] Now csv-header attribute, like ng-csv, can be an value, expression, or promise. --- README.md | 2 +- src/ng-csv/services/csv-service.js | 28 +++++++++++++++++++++------- 2 files changed, 22 insertions(+), 8 deletions(-) diff --git a/README.md b/README.md index 2354ae2..18a77ba 100644 --- a/README.md +++ b/README.md @@ -47,7 +47,7 @@ ngCsv attributes ---------------- * ng-csv: The data array - Could be an expression, a value or a promise. * filename: The filename that will be stored on the user's computer -* csv-header: If provided, would use this attribute to create a header row +* csv-header: If provided, would use this attribute to create a header row. Could be an expression, a value or a promise. ```html diff --git a/src/ng-csv/services/csv-service.js b/src/ng-csv/services/csv-service.js index 3adade6..527c3da 100644 --- a/src/ng-csv/services/csv-service.js +++ b/src/ng-csv/services/csv-service.js @@ -72,14 +72,28 @@ angular.module('ngCsv.services'). var csv = ""; var csvContent = ""; - var dataPromise = $q.when(data).then(function (responseData) { + var csvResolvables = [data]; + if (angular.isDefined(options.header) && options.header) { + csvResolvables.push(options.header); + } + + var dataPromise = $q.all(csvResolvables).then(function (responseDataAll) { //responseData = angular.copy(responseData);//moved to row creation // Check if there's a provided header array - if (angular.isDefined(options.header) && options.header) { + if (angular.isDefined(responseDataAll[1]) && responseDataAll[1]) { var encodingArray, headerString; + var headerData = []; + + if (angular.isArray(responseDataAll[1])) { + headerData = responseDataAll[1]; + } + else if (angular.isFunction(responseDataAll[1])) { + headerData = responseDataAll[1](); + } + encodingArray = []; - angular.forEach(options.header, function (title, key) { + angular.forEach(headerData, function (title, key) { this.push(that.stringifyField(title, options)); }, encodingArray); @@ -89,11 +103,11 @@ angular.module('ngCsv.services'). var arrData = []; - if (angular.isArray(responseData)) { - arrData = responseData; + if (angular.isArray(responseDataAll[0])) { + arrData = responseDataAll[0]; } - else if (angular.isFunction(responseData)) { - arrData = responseData(); + else if (angular.isFunction(responseDataAll[0])) { + arrData = responseDataAll[0](); } // Check if using keys as labels