Don't mutate seriesList parameter in mergeSeriesByTime (#15619)

* do not mutate seriesList in mergeSeriesByTime

* extendedseriesList -> extendedDatapointsList

* remove toString() from datapoints, since the value can be null
This commit is contained in:
parry 2019-03-04 02:56:47 -06:00 committed by Dominik Prokop
parent 6fd6f893aa
commit 25b09168eb
2 changed files with 24 additions and 13 deletions

View File

@ -60,6 +60,16 @@ describe('file_export', () => {
expect(text).toBe(expectedText);
});
it('should not modify series.datapoints', () => {
const expectedSeries1DataPoints = ctx.seriesList[0].datapoints.slice();
const expectedSeries2DataPoints = ctx.seriesList[1].datapoints.slice();
fileExport.convertSeriesListToCsvColumns(ctx.seriesList, ctx.timeFormat);
expect(expectedSeries1DataPoints).toEqual(ctx.seriesList[0].datapoints);
expect(expectedSeries2DataPoints).toEqual(ctx.seriesList[1].datapoints);
});
});
describe('when exporting table data to csv', () => {

View File

@ -88,18 +88,18 @@ export function convertSeriesListToCsvColumns(seriesList, dateTimeFormat = DEFAU
)
);
// process data
seriesList = mergeSeriesByTime(seriesList);
const extendedDatapointsList = mergeSeriesByTime(seriesList);
// make text
for (let i = 0; i < seriesList[0].datapoints.length; i += 1) {
const timestamp = moment(seriesList[0].datapoints[i][POINT_TIME_INDEX]).format(dateTimeFormat);
for (let i = 0; i < extendedDatapointsList[0].length; i += 1) {
const timestamp = moment(extendedDatapointsList[0][i][POINT_TIME_INDEX]).format(dateTimeFormat);
text += formatRow(
[timestamp].concat(
seriesList.map(series => {
return series.datapoints[i][POINT_VALUE_INDEX];
extendedDatapointsList.map(datapoints => {
return datapoints[i][POINT_VALUE_INDEX];
})
),
i < seriesList[0].datapoints.length - 1
i < extendedDatapointsList[0].length - 1
);
}
@ -120,22 +120,23 @@ function mergeSeriesByTime(seriesList) {
}
timestamps = sortedUniq(timestamps.sort());
const result = [];
for (let i = 0; i < seriesList.length; i++) {
const seriesPoints = seriesList[i].datapoints;
const seriesTimestamps = seriesPoints.map(p => p[POINT_TIME_INDEX]);
const extendedSeries = [];
let pointIndex;
const extendedDatapoints = [];
for (let j = 0; j < timestamps.length; j++) {
pointIndex = sortedIndexOf(seriesTimestamps, timestamps[j]);
const timestamp = timestamps[j];
const pointIndex = sortedIndexOf(seriesTimestamps, timestamp);
if (pointIndex !== -1) {
extendedSeries.push(seriesPoints[pointIndex]);
extendedDatapoints.push(seriesPoints[pointIndex]);
} else {
extendedSeries.push([null, timestamps[j]]);
extendedDatapoints.push([null, timestamp]);
}
}
seriesList[i].datapoints = extendedSeries;
result.push(extendedDatapoints);
}
return seriesList;
return result;
}
export function exportSeriesListToCsvColumns(seriesList, dateTimeFormat = DEFAULT_DATETIME_FORMAT, excel = false) {