less nesting and add test

This commit is contained in:
ryan
2019-03-08 02:14:35 -08:00
parent 188dc86246
commit 229dff757c
2 changed files with 61 additions and 30 deletions
@@ -0,0 +1,31 @@
import { toTableData } from './processTimeSeries';
describe('toTableData', () => {
it('converts timeseries to table skipping nulls', () => {
const input = {
target: 'Field Name',
datapoints: [[100, 1], [200, 2]],
};
const data = toTableData([null, input, null, null]);
expect(data.length).toBe(1);
expect(data[0].columns[0].text).toBe(input.target);
expect(data[0].rows).toBe(input.datapoints);
});
it('keeps tableData unchanged', () => {
const input = {
columns: [{ text: 'A' }, { text: 'B' }, { text: 'C' }],
rows: [[100, 'A', 1], [200, 'B', 2], [300, 'C', 3]],
};
const data = toTableData([null, input, null, null]);
expect(data.length).toBe(1);
expect(data[0]).toBe(input);
});
it('supports null values OK', () => {
expect(toTableData([null, null, null, null])).toEqual([]);
expect(toTableData(undefined)).toEqual([]);
expect(toTableData((null as unknown) as any[])).toEqual([]);
expect(toTableData([])).toEqual([]);
});
});
@@ -193,35 +193,35 @@ export function processTimeSeries({ data, xColumn, yColumn, nullValueMode }: Opt
export const isTableData = (data: any): data is TableData => data && data.hasOwnProperty('columns');
export const toTableData = (results: any[]): TableData[] => {
const tables: TableData[] = [];
if (results) {
for (let i = 0; i < results.length; i++) {
const data = results[i];
if (data) {
if (data.hasOwnProperty('columns')) {
tables.push(data as TableData);
} else if (data.hasOwnProperty('datapoints')) {
const ts = data as TimeSeries;
tables.push({
columns: [
{
text: ts.target,
unit: ts.unit,
},
{
text: 'Time',
type: 'time',
},
],
rows: ts.datapoints,
} as TableData);
} else {
console.warn('Can not convert', data);
throw new Error('Unsupported data format');
}
}
}
export const toTableData = (results?: any[]): TableData[] => {
if (!results) {
return [];
}
return tables;
return results
.filter(d => !!d)
.map(data => {
if (data.hasOwnProperty('columns')) {
return data as TableData;
}
if (data.hasOwnProperty('datapoints')) {
const ts = data as TimeSeries;
return {
columns: [
{
text: ts.target || 'Timeseries',
unit: ts.unit,
},
{
text: 'Time',
type: 'time',
},
],
rows: ts.datapoints,
} as TableData;
}
// TODO, try to convert JSON to table?
console.warn('Can not convert', data);
throw new Error('Unsupported data format');
});
};