Bri Prebilic Cole

GUI -- Updated TableService to use d3 table creation methods.

Change-Id: I318ee4e81624118a82c52efe380213c661b743c5
...@@ -24,8 +24,8 @@ ...@@ -24,8 +24,8 @@
24 var config = { 24 var config = {
25 colIds: ['_iconid_available', 'id', 'mfr', 'hw', 'sw', 'serial', 25 colIds: ['_iconid_available', 'id', 'mfr', 'hw', 'sw', 'serial',
26 'annotations'], 26 'annotations'],
27 - colText: ['Availability', 'URI', 'Vendor', 'Hardware Version', 'Software Version', 27 + colText: ['Availability', 'URI', 'Vendor', 'Hardware Version',
28 - 'Serial Number', 'Protocol'] 28 + 'Software Version', 'Serial Number', 'Protocol']
29 }, 29 },
30 deviceData = { 30 deviceData = {
31 "devices": [{ 31 "devices": [{
...@@ -234,7 +234,7 @@ ...@@ -234,7 +234,7 @@
234 234
235 .controller('showTableCtrl', ['$log', 'TableService', 235 .controller('showTableCtrl', ['$log', 'TableService',
236 function ($log, ts) { 236 function ($log, ts) {
237 - ts.renderAndLoadTable(d3.select('#tableDiv'), config, deviceData); 237 + ts.renderTable(d3.select('#tableDiv'), config, deviceData);
238 }]) 238 }])
239 239
240 .directive('fixedHeader', ['$log', '$timeout', function ($log, $timeout) { 240 .directive('fixedHeader', ['$log', '$timeout', function ($log, $timeout) {
......
...@@ -22,52 +22,40 @@ ...@@ -22,52 +22,40 @@
22 22
23 var $log; 23 var $log;
24 24
25 - function renderTable(div, config) { 25 + function renderTable(div, config, data) {
26 var table = div.append('table').attr('fixed-header', ''), 26 var table = div.append('table').attr('fixed-header', ''),
27 - thead, tr, numTableCols, i; 27 + colIds = config.colIds,
28 - table.append('thead'); 28 + colText = config.colText,
29 - table.append('tbody'); 29 + dataObjects = data[Object.keys(data)[0]],
30 + thead, tbody, tRows;
30 31
31 - thead = table.select('thead'); 32 + thead = table.append('thead');
32 - tr = thead.append('tr'); 33 + tbody = table.append('tbody');
33 - numTableCols = config.colIds.length;
34 34
35 - for(i = 0; i < numTableCols; i += 1) { 35 + thead.append('tr').selectAll('th')
36 - tr.append('th').html(config.colText[i]); 36 + .data(colText)
37 - } 37 + .enter()
38 - 38 + .append('th')
39 - return config.colIds; 39 + .text(function(d) { return d });
40 - }
41 40
42 - // I can delete these comments later... 41 + tRows = tbody.selectAll('tr')
43 - // loadTableData needs to know which IDs are used to create the table... 42 + .data(dataObjects)
44 - // Potentially, there will be some rows in the JSON that the server is 43 + .enter()
45 - // sending back that will be unused. We don't want to create unneeded rows. 44 + .append('tr');
46 - // For example, in device view, we aren't displaying "role" or
47 - // "available" properties, but they would be displayed if we took it
48 - // directly from the data being sent in.
49 - function loadTableData(data, div, colIds) {
50 - // let me know if you have suggestions for this function
51 45
52 - var numTableCols = colIds.length, 46 + tRows.selectAll('td')
53 - tbody, tr, i; 47 + .data(function(row) {
54 - tbody = div.select('tbody'); 48 + return colIds.map(function(headerId) {
55 - 49 + return {
56 - // get the array associated with the first object, such as "devices" 50 + column: headerId, value: row[headerId]
57 - // loop through every object in the array, and every colId in config 51 + };
58 - // put the appropriate property in the td of the table
59 - (data[Object.keys(data)[0]]).forEach(function (item) {
60 - tr = tbody.append('tr');
61 - for(i = 0; i < numTableCols; i += 1) {
62 - if(item.hasOwnProperty(colIds[i])) {
63 - tr.append('td').html(item[colIds[i]]);
64 - }
65 - }
66 }); 52 });
67 - } 53 + })
54 + .enter()
55 + .append('td')
56 + .html(function(d) { return d.value });
68 57
69 - function renderAndLoadTable(div, config, data) { 58 + return table;
70 - loadTableData(data, div, (renderTable(div, config)));
71 } 59 }
72 60
73 angular.module('onosWidget') 61 angular.module('onosWidget')
...@@ -75,9 +63,7 @@ ...@@ -75,9 +63,7 @@
75 $log = _$log_; 63 $log = _$log_;
76 64
77 return { 65 return {
78 - renderTable: renderTable, 66 + renderTable: renderTable
79 - loadTableData: loadTableData,
80 - renderAndLoadTable: renderAndLoadTable
81 }; 67 };
82 }]); 68 }]);
83 69
......
...@@ -121,19 +121,12 @@ describe('factory: fw/widget/table.js', function() { ...@@ -121,19 +121,12 @@ describe('factory: fw/widget/table.js', function() {
121 } 121 }
122 122
123 it('should create table tags', function () { 123 it('should create table tags', function () {
124 - ts.renderTable(d3Elem, config); 124 + ts.renderTable(d3Elem, config, fakeData);
125 verifyTableTags(d3Elem); 125 verifyTableTags(d3Elem);
126 }); 126 });
127 127
128 it('should load data into table', function () { 128 it('should load data into table', function () {
129 - var colIds = ts.renderTable(d3Elem, config); 129 + ts.renderTable(d3Elem, config, fakeData);
130 - ts.loadTableData(fakeData, d3Elem, colIds);
131 verifyData(d3Elem); 130 verifyData(d3Elem);
132 }); 131 });
133 -
134 - it('should render table and load data', function () {
135 - ts.renderAndLoadTable(d3Elem, config, fakeData);
136 - verifyData(d3Elem);
137 - });
138 -
139 }); 132 });
......