fix: added fix for incorrect query in dashboard on panel change to list panel (#8994)

* fix: added fix for incorrect query in dashboard on panel change to list issue

* test: added test for handleQueryChange

* chore: pr reviews
This commit is contained in:
Abhi kumar 2025-09-03 19:30:22 +05:30 committed by GitHub
parent 10c6e1fac7
commit 68d9c6c3cc
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
2 changed files with 83 additions and 1 deletions

View File

@ -0,0 +1,80 @@
import {
initialQueryBuilderFormValuesMap,
PANEL_TYPES,
} from 'constants/queryBuilder';
import { Query } from 'types/api/queryBuilder/queryBuilderData';
import { EQueryType } from 'types/common/dashboard';
import { DataSource } from 'types/common/queryBuilder';
import type { PartialPanelTypes } from '../utils';
import { handleQueryChange } from '../utils';
const buildSupersetQuery = (extras?: Record<string, unknown>): Query => ({
queryType: EQueryType.QUERY_BUILDER,
promql: [],
clickhouse_sql: [],
id: '1',
unit: '1',
builder: {
queryFormulas: [],
queryData: [
{
...initialQueryBuilderFormValuesMap[DataSource.LOGS],
queryName: 'A',
orderBy: [{ columnName: 'x', order: 'asc' }],
limit: 10,
...(extras || {}),
},
{
...initialQueryBuilderFormValuesMap[DataSource.LOGS],
queryName: 'B',
orderBy: [{ columnName: 'x', order: 'desc' }],
limit: 20,
...(extras || {}),
},
],
},
});
describe('handleQueryChange', () => {
test('sets list-specific fields when switching to LIST', () => {
const superset = buildSupersetQuery();
const output = handleQueryChange(
PANEL_TYPES.LIST as keyof PartialPanelTypes,
superset as Query,
PANEL_TYPES.TABLE,
);
const firstQuery = output.builder.queryData[0];
expect(firstQuery.aggregateOperator).toBe('noop');
expect(firstQuery.offset).toBe(0);
expect(firstQuery.pageSize).toBe(10);
expect(firstQuery.orderBy).toBeUndefined();
expect(firstQuery.queryName).toBe('A');
const secondQuery = output.builder.queryData[1];
expect(secondQuery.aggregateOperator).toBe('noop');
expect(secondQuery.offset).toBe(0);
expect(secondQuery.pageSize).toBe(10);
expect(secondQuery.orderBy).toBeUndefined();
expect(secondQuery.queryName).toBe('B');
});
test('resets noop and pagination when leaving LIST', () => {
const superset = buildSupersetQuery({
aggregateOperator: 'noop',
offset: 5,
pageSize: 50,
});
const output = handleQueryChange(
PANEL_TYPES.TABLE as keyof PartialPanelTypes,
superset as Query,
PANEL_TYPES.LIST,
);
const q = output.builder.queryData[0];
expect(q.aggregateOperator).not.toBe('noop');
expect(q.offset).toBeUndefined();
expect(q.pageSize).toBeUndefined();
expect(q.orderBy).toBeUndefined();
expect(q.queryName).toBe('A');
});
});

View File

@ -393,6 +393,7 @@ export const panelTypeDataSourceFormValuesMap: Record<
[DataSource.LOGS]: {
builder: {
queryData: [
'queryName',
'filters',
'filter',
'limit',
@ -404,12 +405,13 @@ export const panelTypeDataSourceFormValuesMap: Record<
},
[DataSource.METRICS]: {
builder: {
queryData: ['filters', 'filter', 'aggregations'],
queryData: ['queryName', 'filters', 'filter', 'aggregations'],
},
},
[DataSource.TRACES]: {
builder: {
queryData: [
'queryName',
'filters',
'filter',
'limit',