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:
Gábor Farkas 2023-07-26 14:17:02 +02:00 committed by GitHub
parent f629698876
commit e56f97ec71
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 46 additions and 2 deletions

View File

@ -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();
});
});

View File

@ -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;
}),
};
}