Limit: Invalidate field reducer calcs on applying limit transformation (#106723)

* fix: clear state calcs when limit transformation is applied

* chore: fix limit tests expected values
This commit is contained in:
Alex Spencer
2025-07-08 11:37:54 -07:00
committed by GitHub
parent 68ee251c5c
commit efe46c8aad
2 changed files with 12 additions and 0 deletions
@@ -35,18 +35,21 @@ describe('Limit transformer', () => {
{ {
name: 'time', name: 'time',
type: FieldType.time, type: FieldType.time,
state: { calcs: undefined },
values: [3000, 4000, 5000], values: [3000, 4000, 5000],
config: {}, config: {},
}, },
{ {
name: 'message', name: 'message',
type: FieldType.string, type: FieldType.string,
state: { calcs: undefined },
values: ['one', 'two', 'two'], values: ['one', 'two', 'two'],
config: {}, config: {},
}, },
{ {
name: 'values', name: 'values',
type: FieldType.number, type: FieldType.number,
state: { calcs: undefined },
values: [1, 2, 2], values: [1, 2, 2],
config: {}, config: {},
}, },
@@ -79,18 +82,21 @@ describe('Limit transformer', () => {
{ {
name: 'time', name: 'time',
type: FieldType.time, type: FieldType.time,
state: { calcs: undefined },
values: [6000, 7000, 8000], values: [6000, 7000, 8000],
config: {}, config: {},
}, },
{ {
name: 'message', name: 'message',
type: FieldType.string, type: FieldType.string,
state: { calcs: undefined },
values: ['three', 'three', 'three'], values: ['three', 'three', 'three'],
config: {}, config: {},
}, },
{ {
name: 'values', name: 'values',
type: FieldType.number, type: FieldType.number,
state: { calcs: undefined },
values: [3, 3, 3], values: [3, 3, 3],
config: {}, config: {},
}, },
@@ -37,6 +37,12 @@ export const limitTransformer: DataTransformerInfo<LimitTransformerOptions> = {
fields: frame.fields.map((f) => { fields: frame.fields.map((f) => {
return { return {
...f, ...f,
// Clear cached field calculations since applying a limit changes the dataset
// and previously computed stats (min, max, mean, etc.) are no longer valid
state: {
...f.state,
calcs: undefined,
},
values: values:
limit >= 0 ? f.values.slice(0, limit) : f.values.slice(f.values.length + limit, f.values.length), limit >= 0 ? f.values.slice(0, limit) : f.values.slice(f.values.length + limit, f.values.length),
}; };