diff --git a/platform/features/table/res/templates/scrolling.html b/platform/features/table/res/templates/scrolling.html
deleted file mode 100644
index 88eed36af7..0000000000
--- a/platform/features/table/res/templates/scrolling.html
+++ /dev/null
@@ -1,9 +0,0 @@
-
-
-
-
\ No newline at end of file
diff --git a/platform/features/table/src/controllers/MCTTableController.js b/platform/features/table/src/controllers/MCTTableController.js
index 82b68011a7..4bce341553 100644
--- a/platform/features/table/src/controllers/MCTTableController.js
+++ b/platform/features/table/src/controllers/MCTTableController.js
@@ -73,7 +73,7 @@ define(
/*
* Listen for rows added individually (eg. for real-time tables)
*/
- $scope.$on('addRow', this.newRow.bind(this));
+ $scope.$on('add:row', this.newRow.bind(this));
}
/**
@@ -98,19 +98,13 @@ define(
* `addRow` broadcast event.
* @private
*/
- MCTTableController.prototype.newRow = function (event, row) {
+ MCTTableController.prototype.newRow = function (event, rowIndex) {
+ var row = this.$scope.rows[rowIndex];
//Add row to the filtered, sorted list of all rows
if (this.filterRows([row]).length > 0) {
this.insertSorted(this.$scope.displayRows, row);
}
- //Keep 'rows' synchronized as it provides the unsorted,
- // unfiltered model for this view
- if (!this.$scope.rows) {
- this.$scope.rows = [];
- }
- this.$scope.rows.push(row);
-
this.$timeout(this.setElementSizes.bind(this))
.then(this.scrollToBottom.bind(this));
};
@@ -354,7 +348,7 @@ define(
return rowsToSort;
}
- return rowsToSort.slice(0).sort(function(a, b) {
+ return rowsToSort.sort(function(a, b) {
//If the values to compare can be compared as
// numbers, do so. String comparison of number
// values can cause inconsistencies
@@ -447,7 +441,7 @@ define(
}
if (this.$scope.enableSort) {
- displayRows = this.sortRows(displayRows);
+ displayRows = this.sortRows(displayRows.slice(0));
}
this.$scope.displayRows = displayRows;
};
@@ -467,15 +461,15 @@ define(
return;
}
- //Apply filters and sort a copy of the the new rows
- this.filterAndSort((newRows || []).slice(0));
- //Resize columns appropriately
+ this.filterAndSort(newRows || []);
this.resize();
};
/**
* Applies user defined filters to rows. These filters are based on
- * the text entered in the search areas in each column
+ * the text entered in the search areas in each column.
+ * @param rowsToFilter {Object[]} The rows to apply filters to
+ * @returns {Object[]} A filtered copy of the supplied rows
*/
MCTTableController.prototype.filterRows = function(rowsToFilter) {
var filters = {},
diff --git a/platform/features/table/src/controllers/RTTelemetryTableController.js b/platform/features/table/src/controllers/RTTelemetryTableController.js
index b596189000..56032cb277 100644
--- a/platform/features/table/src/controllers/RTTelemetryTableController.js
+++ b/platform/features/table/src/controllers/RTTelemetryTableController.js
@@ -83,12 +83,19 @@ define(
}
function updateData(){
- var datum;
+ var datum,
+ row;
self.handle.getTelemetryObjects().forEach(function(telemetryObject){
datum = self.handle.getDatum(telemetryObject);
if (datum) {
- var rowValue = self.table.getRowValues(telemetryObject, datum);
- self.$scope.$broadcast('addRow', rowValue);
+ row = self.table.getRowValues(telemetryObject, datum);
+ self.$scope.rows = self.$scope.rows || [];
+ if (!self.$scope.rows){
+ self.$scope.rows = [row];
+ } else {
+ self.$scope.rows.push(row);
+ self.$scope.$broadcast('add:row', self.$scope.rows.length - 1);
+ }
}
});
diff --git a/platform/features/table/src/controllers/TelemetryTableController.js b/platform/features/table/src/controllers/TelemetryTableController.js
index 59dbafe2a3..86aea70488 100644
--- a/platform/features/table/src/controllers/TelemetryTableController.js
+++ b/platform/features/table/src/controllers/TelemetryTableController.js
@@ -122,37 +122,30 @@ define(
true // Lossless
);
- function getHistoricalData(){
- var rowData = [];
-
- self.handle.getTelemetryObjects().forEach(function(telemetryObject){
- var series = self.handle.getSeries(telemetryObject) || {},
- pointCount = series.getPointCount ? series.getPointCount() : 0,
- i = 0;
-
- for (; i < pointCount; i++) {
- rowData.push(self.table.getRowValues(telemetryObject, self.handle.makeDatum(telemetryObject, series, i)));
- }
- });
-
- self.$scope.rows = rowData;
- }
- this.handle.request({}).then(getHistoricalData);
+ this.handle.request({}).then(this.addHistoricalData.bind(this));
this.setup();
};
/**
- * Add any historical data available
+ * Populates historical data on scope when it becomes available
* @private
*/
- TelemetryTableController.prototype.addHistoricalData = function(domainObject, series) {
- var i,
- newRows = [];
+ TelemetryTableController.prototype.addHistoricalData = function() {
+ var rowData = [],
+ self = this;
- for (i=0; i < series.getPointCount(); i++) {
- this.$scope.rows.push(this.table.getRowValues(domainObject, this.handle.makeDatum(domainObject, series, i)));
- }
+ this.handle.getTelemetryObjects().forEach(function(telemetryObject){
+ var series = self.handle.getSeries(telemetryObject) || {},
+ pointCount = series.getPointCount ? series.getPointCount() : 0,
+ i = 0;
+
+ for (; i < pointCount; i++) {
+ rowData.push(self.table.getRowValues(telemetryObject, self.handle.makeDatum(telemetryObject, series, i)));
+ }
+ });
+
+ this.$scope.rows = rowData;
};
/**
diff --git a/platform/features/table/test/controllers/MCTTableControllerSpec.js b/platform/features/table/test/controllers/MCTTableControllerSpec.js
index e7a5d1e08d..44cb5f1f8f 100644
--- a/platform/features/table/test/controllers/MCTTableControllerSpec.js
+++ b/platform/features/table/test/controllers/MCTTableControllerSpec.js
@@ -95,6 +95,7 @@ define(
'col3': {'text': 'row3 col3'}
}
];
+ mockScope.rows = testRows;
});
it('Filters results based on filter input', function() {
@@ -128,7 +129,8 @@ define(
};
controller.updateRows(testRows);
expect(mockScope.displayRows.length).toBe(3);
- addRowFunc(row4);
+ testRows.push(row4);
+ addRowFunc(3);
expect(mockScope.displayRows.length).toBe(4);
});
@@ -194,17 +196,23 @@ define(
mockScope.sortColumn = 'col2';
mockScope.sortDirection = 'desc';
- mockScope.displayRows = controller.sortRows(testRows);
+ mockScope.displayRows = controller.sortRows(testRows.slice(0));
- controller.newRow(undefined, row4);
+ mockScope.rows.push(row4);
+ controller.newRow(undefined, mockScope.rows.length-1);
expect(mockScope.displayRows[0].col2.text).toEqual('xyz');
- controller.newRow(undefined, row5);
+
+ mockScope.rows.push(row5);
+ controller.newRow(undefined, mockScope.rows.length-1);
expect(mockScope.displayRows[4].col2.text).toEqual('aaa');
- controller.newRow(undefined, row6);
+
+ mockScope.rows.push(row6);
+ controller.newRow(undefined, mockScope.rows.length-1);
expect(mockScope.displayRows[2].col2.text).toEqual('ggg');
//Add a duplicate row
- controller.newRow(undefined, row6);
+ mockScope.rows.push(row6);
+ controller.newRow(undefined, mockScope.rows.length-1);
expect(mockScope.displayRows[2].col2.text).toEqual('ggg');
expect(mockScope.displayRows[3].col2.text).toEqual('ggg');
});
@@ -216,14 +224,16 @@ define(
mockScope.filters = {'col2': 'a'};//Include only
// rows with 'a'
- mockScope.displayRows = controller.sortRows(testRows);
+ mockScope.displayRows = controller.sortRows(testRows.slice(0));
mockScope.displayRows = controller.filterRows(testRows);
- controller.newRow(undefined, row5);
+ mockScope.rows.push(row5);
+ controller.newRow(undefined, mockScope.rows.length-1);
expect(mockScope.displayRows.length).toBe(2);
expect(mockScope.displayRows[1].col2.text).toEqual('aaa');
- controller.newRow(undefined, row6);
+ mockScope.rows.push(row6);
+ controller.newRow(undefined, mockScope.rows.length-1);
expect(mockScope.displayRows.length).toBe(2);
//Row was not added because does not match filter
});
@@ -234,11 +244,14 @@ define(
mockScope.sortDirection = undefined;
mockScope.filters = {};
- mockScope.displayRows = testRows;
+ mockScope.displayRows = testRows.slice(0);
- controller.newRow(undefined, row5);
+ mockScope.rows.push(row5);
+ controller.newRow(undefined, mockScope.rows.length-1);
expect(mockScope.displayRows[3].col2.text).toEqual('aaa');
- controller.newRow(undefined, row6);
+
+ mockScope.rows.push(row6);
+ controller.newRow(undefined, mockScope.rows.length-1);
expect(mockScope.displayRows[4].col2.text).toEqual('ggg');
});
diff --git a/platform/features/table/test/controllers/RTTelemetryTableControllerSpec.js b/platform/features/table/test/controllers/RTTelemetryTableControllerSpec.js
index a54a95f202..02dbc1d069 100644
--- a/platform/features/table/test/controllers/RTTelemetryTableControllerSpec.js
+++ b/platform/features/table/test/controllers/RTTelemetryTableControllerSpec.js
@@ -132,7 +132,7 @@ define(
it('updates table with new streaming telemetry', function() {
controller.subscribe();
mockTelemetryHandler.handle.mostRecentCall.args[1]();
- expect(mockScope.$broadcast).toHaveBeenCalledWith('addRow', mockTableRow);
+ expect(mockScope.$broadcast).toHaveBeenCalledWith('add:row', 0);
});
it('enables autoscroll for event telemetry', function() {
diff --git a/platform/features/table/test/controllers/TelemetryTableControllerSpec.js b/platform/features/table/test/controllers/TelemetryTableControllerSpec.js
index 43422d73af..0af74ebfe4 100644
--- a/platform/features/table/test/controllers/TelemetryTableControllerSpec.js
+++ b/platform/features/table/test/controllers/TelemetryTableControllerSpec.js
@@ -94,11 +94,15 @@ define(
mockTelemetryHandle = jasmine.createSpyObj('telemetryHandle', [
'request',
'promiseTelemetryObjects',
+ 'getTelemetryObjects',
'getMetadata',
+ 'getSeries',
'unsubscribe',
'makeDatum'
]);
mockTelemetryHandle.promiseTelemetryObjects.andReturn(promise(undefined));
+ mockTelemetryHandle.request.andReturn(promise(undefined));
+ mockTelemetryHandle.getTelemetryObjects.andReturn([]);
mockTelemetryHandler = jasmine.createSpyObj('telemetryHandler', [
'handle'
@@ -159,6 +163,9 @@ define(
return mockRow;
});
mockTable.getRowValues.andReturn(mockRow);
+ mockTelemetryHandle.getTelemetryObjects.andReturn([mockDomainObject]);
+ mockTelemetryHandle.getSeries.andReturn(mockSeries);
+
controller.addHistoricalData(mockDomainObject, mockSeries);
expect(controller.$scope.rows.length).toBe(5);