@@ -58,19 +58,22 @@ angular.module('generic.table').directive('genericTable', function() {
5858 $scope . gtNoDataTxt = typeof $scope . gtNoDataTxt === 'undefined' ? 'No table data to display' :$scope . gtNoDataTxt ;
5959 $scope . gtId = typeof $scope . gtId === 'undefined' ? $scope . $id :$scope . gtId ;
6060
61- // order columns
62- $filter ( 'map' ) ( $scope . gtSettings , function ( setting ) {
63- try {
64- var field = $filter ( 'filter' ) ( $scope . gtFields , { objectKey :setting . objectKey } , true ) [ 0 ] ;
65- field . columnOrder = setting . columnOrder ;
66- if ( setting . export === false ) {
67- field . exportField = false ;
61+ // extend field definitions
62+ var extendFieldDefinitions = function ( ) {
63+ $filter ( 'map' ) ( $scope . gtSettings , function ( setting ) {
64+ try {
65+ var field = $filter ( 'filter' ) ( $scope . gtFields , { objectKey :setting . objectKey } , true ) [ 0 ] ;
66+ field . columnOrder = setting . columnOrder ; // add column order
67+ if ( setting . export === false ) {
68+ field . exportField = false ; // add export field
69+ }
70+ } catch ( error ) {
71+ console . log ( 'field definition object for property: "' + setting . objectKey + '" not found.' , error ) ;
6872 }
69- } catch ( error ) {
70- console . log ( 'field definition object for property: "' + setting . objectKey + '" not found.' , error ) ;
71- }
7273
73- } ) ;
74+ } ) ;
75+ } ;
76+ extendFieldDefinitions ( ) ;
7477
7578 var initTable = function ( initData ) {
7679 $scope . gtHasData = false ;
@@ -186,6 +189,7 @@ angular.module('generic.table').directive('genericTable', function() {
186189 $scope . $on ( 'gt-update-structure:' + $scope . gtId , function ( event , arg ) {
187190 $scope . gtFields = arg . fields ;
188191 $scope . gtSettings = arg . settings ;
192+ extendFieldDefinitions ( ) ;
189193 searchColumns = $filter ( 'map' ) ( $filter ( 'removeWith' ) ( $scope . gtFields . slice ( 0 ) , { search :false } ) , 'objectKey' ) ;
190194
191195 // if no sorting is applied or if sorting is forced...
@@ -379,19 +383,27 @@ angular.module('generic.table').directive('genericTable', function() {
379383 var row = exportData [ i ] ;
380384 for ( var key in row ) {
381385 if ( row . hasOwnProperty ( key ) ) {
382- var fieldSetting = $filter ( 'filter' ) ( $scope . gtFields , { objectKey :key } , true ) [ 0 ] ;
383- var tableSetting = $filter ( 'filter' ) ( $scope . gtSettings , { objectKey :key } , true ) [ 0 ] ;
386+ var fieldSetting = $filter ( 'filter' ) ( $scope . gtFields , { objectKey : key } , true ) [ 0 ] ;
387+ var tableSetting = $filter ( 'filter' ) ( $scope . gtSettings , { objectKey : key } , true ) [ 0 ] ;
384388
385389 var exportMethod = fieldSetting . export ;
386390
387391 // if export method is declared and is a function...
388- if ( exportMethod && angular . isFunction ( exportMethod ) ) {
392+ if ( exportMethod && angular . isFunction ( exportMethod ) ) {
389393 // ...replace export data row value with value returned by function
390394 row [ key ] = exportMethod ( row , key ) ;
391395 }
396+
397+ // if exportColumns are passed with options...
398+ if ( typeof options . exportColumns !== 'undefined' ) {
399+ // ...set value to null i.e. don't export column if it's not in the exportColumns array
400+ if ( options . exportColumns . indexOf ( tableSetting . objectKey ) === - 1 ) {
401+ row [ key ] = null ;
402+ }
403+ }
392404 // if export is set to false for field...
393- if ( typeof tableSetting . export !== 'undefined' && tableSetting . export === false ) {
394- // ...set value to null
405+ else if ( typeof tableSetting . export !== 'undefined' && tableSetting . export === false ) {
406+ // ...set value to null i.e. don't export column
395407 row [ key ] = null ;
396408 }
397409 }
@@ -401,7 +413,19 @@ angular.module('generic.table').directive('genericTable', function() {
401413 // declare export data
402414 var data = exportData ; //JSON.parse(angular.toJson(sortedData.slice(0)));
403415
404- var exportFields = $filter ( 'orderBy' ) ( $filter ( 'removeWith' ) ( $scope . gtFields , { exportField :false } ) , "columnOrder" ) ;
416+ // if exportColumns are passed with options...
417+ if ( typeof options . exportColumns !== 'undefined' ) {
418+
419+ // ...get field settings for all objectKeys in exportColumns array
420+ var exportFields = $filter ( 'map' ) ( options . exportColumns , function ( objectKey ) {
421+ return $filter ( 'filter' ) ( $scope . gtFields . slice ( 0 ) , { objectKey :objectKey } , true ) [ 0 ] ;
422+ } ) ;
423+ }
424+ // else export all columns except columns not marked for export i.e. has field setting export:false (added to gtField
425+ else {
426+ var exportFields = $filter ( 'orderBy' ) ( $filter ( 'removeWith' ) ( $scope . gtFields , { exportField :false } ) , "columnOrder" ) ;
427+ }
428+
405429 var headers = {
406430 fieldSep : typeof options . fieldSep === 'undefined' ? ";" :options . fieldSep ,
407431 header : $filter ( 'map' ) ( exportFields , "name" ) , // get headers by column order
@@ -411,6 +435,7 @@ angular.module('generic.table').directive('genericTable', function() {
411435 addByteOrderMarker :typeof options . addBom === 'undefined' ,
412436 charset :typeof options . charset === 'undefined' ? 'utf-8' :options . charset
413437 } ;
438+
414439 CSV . stringify ( data , headers ) . then ( function ( result ) {
415440
416441 var blob ;
0 commit comments