Skip to content

Commit 1bff908

Browse files
committed
closed #9, fixed #10
1 parent 0ae7a2a commit 1bff908

File tree

6 files changed

+61
-21
lines changed

6 files changed

+61
-21
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;

package.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
"devDependencies": {
55
"bower": "1.6.2",
66
"bower-art-resolver": "^2.0.1",

partial/examples/examples.html

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ <h4>Settings</h4>
1313
enabled:true, // should column be enabled (required for filters to work)
1414
sort:'false', // should column be sortable
1515
sortOrder:0, // sort order of column, 0 will be sorted first
16-
columnOrder:0 // column order, starting from the left with zero,
16+
columnOrder:0, // column order, starting from the left with zero
1717
export:false // should column be exported to CSV (OPTIONAL)
1818
}]
1919
</code>
@@ -32,7 +32,7 @@ <h4>Field definitions</h4>
3232
value: function(row,column){ return row[column]/2;} // custom function for column value if no data exists for column in data array (OPTIONAL),
3333
click: function(){ return console.log('column clicked);} // click function for column (OPTIONAL),
3434
expand: "&lt;my-directive&gt;&lt;/my-directive&gt;" // expand (open/close) row when clicked and add this as content (could be a directive or plain html) (OPTIONAL),
35-
export: function(row,column){ return '&lt;span&gt;'+row[column]+'&lt;/span&gt;';} // custom function for export presentation (OPTIONAL),
35+
export: function(row,column){ return parseFloat(row[column]);} // custom function for export presentation (OPTIONAL),
3636
search: false // should field be searchable, true or false, true by default (OPTIONAL)
3737

3838
}]

partial/examples/examples.js

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -278,6 +278,14 @@ angular.module('generic.table').controller('DocumentationController',function($s
278278
}
279279
],
280280
data:[{
281+
"name":"fileName",
282+
"description":"file name (omit file extension)",
283+
"default":"export.csv"
284+
},{
285+
"name":"exportColumns",
286+
"description":"columns to export ex. ['objectKey1','objectKey2'] overrules field settings",
287+
"default":"exports all column except columns with field setting export:false"
288+
},{
281289
"name":"fieldSep",
282290
"description":"field separator",
283291
"default":";"

0 commit comments

Comments
 (0)