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);