Skip to content

Commit 14517d8

Browse files
committed
Merge branch 'master' into gh-pages
2 parents d6838e8 + 1bff908 commit 14517d8

File tree

9 files changed

+111
-40
lines changed

9 files changed

+111
-40
lines changed

CHANGELOG.md

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,13 @@ Release History
33

44
## [Unreleased]
55

6+
# [1.2.1] - 2016-07-14
7+
### Added
8+
- Support for passing array with object keys i.e. columns to export function
9+
10+
### Fixed
11+
- export settings and column order wasn't re-added to field definition when table structure was updated
12+
613
# [1.2.0] - 2016-07-12
714
### Added
815
- Support for table search

bower.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "generic-table",
3-
"version": "1.2.0",
3+
"version": "1.2.1",
44
"main": [
55
"dist/js/generic.table.min.js",
66
"dist/css/generic-table.min.css"

directive/generic-table/generic-table.js

Lines changed: 42 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -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;

dist/js/generic.table.js

Lines changed: 42 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -59,19 +59,22 @@ angular.module('generic.table').directive('genericTable', function() {
5959
$scope.gtNoDataTxt = typeof $scope.gtNoDataTxt === 'undefined' ? 'No table data to display':$scope.gtNoDataTxt;
6060
$scope.gtId = typeof $scope.gtId === 'undefined' ? $scope.$id:$scope.gtId;
6161

62-
// order columns
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;
67-
if(setting.export === false){
68-
field.exportField = false;
62+
// extend field definitions
63+
var extendFieldDefinitions = function() {
64+
$filter('map')($scope.gtSettings,function(setting){
65+
try{
66+
var field = $filter('filter')($scope.gtFields,{objectKey:setting.objectKey},true)[0];
67+
field.columnOrder = setting.columnOrder; // add column order
68+
if(setting.export === false) {
69+
field.exportField = false; // add export field
70+
}
71+
} catch(error) {
72+
console.log('field definition object for property: "'+ setting.objectKey +'" not found.',error);
6973
}
70-
} catch(error) {
71-
console.log('field definition object for property: "'+ setting.objectKey +'" not found.',error);
72-
}
7374

74-
});
75+
});
76+
};
77+
extendFieldDefinitions();
7578

7679
var initTable = function(initData){
7780
$scope.gtHasData = false;
@@ -187,6 +190,7 @@ angular.module('generic.table').directive('genericTable', function() {
187190
$scope.$on('gt-update-structure:'+$scope.gtId,function(event,arg){
188191
$scope.gtFields = arg.fields;
189192
$scope.gtSettings = arg.settings;
193+
extendFieldDefinitions();
190194
searchColumns = $filter('map')($filter('removeWith')($scope.gtFields.slice(0),{search:false}),'objectKey');
191195

192196
// if no sorting is applied or if sorting is forced...
@@ -380,19 +384,27 @@ angular.module('generic.table').directive('genericTable', function() {
380384
var row = exportData[i];
381385
for (var key in row) {
382386
if (row.hasOwnProperty(key)) {
383-
var fieldSetting = $filter('filter')($scope.gtFields,{objectKey:key},true)[0];
384-
var tableSetting = $filter('filter')($scope.gtSettings,{objectKey:key},true)[0];
387+
var fieldSetting = $filter('filter')($scope.gtFields, {objectKey: key}, true)[0];
388+
var tableSetting = $filter('filter')($scope.gtSettings, {objectKey: key}, true)[0];
385389

386390
var exportMethod = fieldSetting.export;
387391

388392
// if export method is declared and is a function...
389-
if(exportMethod && angular.isFunction(exportMethod)){
393+
if (exportMethod && angular.isFunction(exportMethod)) {
390394
// ...replace export data row value with value returned by function
391395
row[key] = exportMethod(row, key);
392396
}
397+
398+
// if exportColumns are passed with options...
399+
if (typeof options.exportColumns !== 'undefined') {
400+
// ...set value to null i.e. don't export column if it's not in the exportColumns array
401+
if (options.exportColumns.indexOf(tableSetting.objectKey)===-1){
402+
row[key] = null;
403+
}
404+
}
393405
// if export is set to false for field...
394-
if(typeof tableSetting.export !== 'undefined' && tableSetting.export === false) {
395-
// ...set value to null
406+
else if (typeof tableSetting.export !== 'undefined' && tableSetting.export === false) {
407+
// ...set value to null i.e. don't export column
396408
row[key] = null;
397409
}
398410
}
@@ -402,7 +414,19 @@ angular.module('generic.table').directive('genericTable', function() {
402414
// declare export data
403415
var data = exportData;//JSON.parse(angular.toJson(sortedData.slice(0)));
404416

405-
var exportFields = $filter('orderBy')($filter('removeWith')($scope.gtFields,{exportField:false}),"columnOrder");
417+
// if exportColumns are passed with options...
418+
if (typeof options.exportColumns !== 'undefined') {
419+
420+
// ...get field settings for all objectKeys in exportColumns array
421+
var exportFields = $filter('map')(options.exportColumns, function(objectKey){
422+
return $filter('filter')($scope.gtFields.slice(0), {objectKey:objectKey}, true)[0];
423+
} );
424+
}
425+
// else export all columns except columns not marked for export i.e. has field setting export:false (added to gtField
426+
else {
427+
var exportFields = $filter('orderBy')($filter('removeWith')($scope.gtFields,{exportField:false}),"columnOrder");
428+
}
429+
406430
var headers = {
407431
fieldSep: typeof options.fieldSep === 'undefined' ? ";":options.fieldSep,
408432
header: $filter('map')(exportFields,"name"), // get headers by column order
@@ -412,6 +436,7 @@ angular.module('generic.table').directive('genericTable', function() {
412436
addByteOrderMarker:typeof options.addBom === 'undefined',
413437
charset:typeof options.charset === 'undefined' ? 'utf-8':options.charset
414438
};
439+
415440
CSV.stringify(data, headers).then(function(result){
416441

417442
var blob;

0 commit comments

Comments
 (0)