mirror of
https://github.com/grafana/grafana.git
synced 2025-02-25 18:55:37 -06:00
grafana-data: handle reordering of field.nanos (#72290)
* grafana-data: handle reordering of field.nanos * do not add nanos:undefined
This commit is contained in:
parent
f629698876
commit
e56f97ec71
@ -8,6 +8,7 @@ import {
|
||||
guessFieldTypes,
|
||||
isDataFrame,
|
||||
isTableData,
|
||||
reverseDataFrame,
|
||||
sortDataFrame,
|
||||
toDataFrame,
|
||||
toLegacyResponseData,
|
||||
@ -360,19 +361,45 @@ describe('sorted DataFrame', () => {
|
||||
{ name: 'fist', type: FieldType.time, values: [1, 2, 3] },
|
||||
{ name: 'second', type: FieldType.string, values: ['a', 'b', 'c'] },
|
||||
{ name: 'third', type: FieldType.number, values: [2000, 3000, 1000] },
|
||||
{ name: 'fourth', type: FieldType.time, values: [1, 2, 3], nanos: [10, 20, 30] },
|
||||
],
|
||||
});
|
||||
it('Should sort numbers', () => {
|
||||
const sorted = sortDataFrame(frame, 0, true);
|
||||
expect(sorted.length).toEqual(3);
|
||||
expect(sorted.fields[0].values).toEqual([3, 2, 1]);
|
||||
expect(sorted.fields[0].nanos).toBeUndefined();
|
||||
expect(sorted.fields[1].values).toEqual(['c', 'b', 'a']);
|
||||
expect(sorted.fields[1].nanos).toBeUndefined();
|
||||
expect(sorted.fields[3].values).toEqual([3, 2, 1]);
|
||||
expect(sorted.fields[3].nanos).toEqual([30, 20, 10]);
|
||||
});
|
||||
|
||||
it('Should sort strings', () => {
|
||||
const sorted = sortDataFrame(frame, 1, true);
|
||||
expect(sorted.length).toEqual(3);
|
||||
expect(sorted.fields[0].values).toEqual([3, 2, 1]);
|
||||
expect(sorted.fields[0].nanos).toBeUndefined();
|
||||
expect(sorted.fields[1].values).toEqual(['c', 'b', 'a']);
|
||||
expect(sorted.fields[1].nanos).toBeUndefined();
|
||||
expect(sorted.fields[3].values).toEqual([3, 2, 1]);
|
||||
expect(sorted.fields[3].nanos).toEqual([30, 20, 10]);
|
||||
});
|
||||
});
|
||||
|
||||
describe('reverse DataFrame', () => {
|
||||
const frame = toDataFrame({
|
||||
fields: [
|
||||
{ name: 'fist', type: FieldType.time, values: [1, 2, 3], nanos: [10, 20, 30] },
|
||||
{ name: 'third', type: FieldType.string, values: ['a', 'b', 'c'] },
|
||||
],
|
||||
});
|
||||
it('should reverse dataframe', () => {
|
||||
const rev = reverseDataFrame(frame);
|
||||
expect(rev.length).toEqual(3);
|
||||
expect(rev.fields[0].values).toEqual([3, 2, 1]);
|
||||
expect(rev.fields[0].nanos).toEqual([30, 20, 10]);
|
||||
expect(rev.fields[1].values).toEqual(['c', 'b', 'a']);
|
||||
expect(rev.fields[1].nanos).toBeUndefined();
|
||||
});
|
||||
});
|
||||
|
@ -431,10 +431,17 @@ export function sortDataFrame(data: DataFrame, sortIndex?: number, reverse = fal
|
||||
return {
|
||||
...data,
|
||||
fields: data.fields.map((f) => {
|
||||
return {
|
||||
const newF = {
|
||||
...f,
|
||||
values: f.values.map((v, i) => f.values[index[i]]),
|
||||
};
|
||||
|
||||
// only add .nanos if it exists
|
||||
const { nanos } = f;
|
||||
if (nanos !== undefined) {
|
||||
newF.nanos = nanos.map((n, i) => nanos[index[i]]);
|
||||
}
|
||||
return newF;
|
||||
}),
|
||||
};
|
||||
}
|
||||
@ -448,10 +455,20 @@ export function reverseDataFrame(data: DataFrame): DataFrame {
|
||||
fields: data.fields.map((f) => {
|
||||
const values = [...f.values];
|
||||
values.reverse();
|
||||
return {
|
||||
|
||||
const newF = {
|
||||
...f,
|
||||
values,
|
||||
};
|
||||
|
||||
// only add .nanos if it exists
|
||||
const { nanos } = f;
|
||||
if (nanos !== undefined) {
|
||||
const revNanos = [...nanos];
|
||||
revNanos.reverse();
|
||||
newF.nanos = revNanos;
|
||||
}
|
||||
return newF;
|
||||
}),
|
||||
};
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user