fix: added migration to filter expression for crud operations of variable

This commit is contained in:
SagarRajput-7 2025-08-19 10:33:17 +05:30
parent a11cd5cc3e
commit b7d6d54ddc
4 changed files with 43 additions and 7 deletions

View File

@ -1,4 +1,5 @@
import { CustomMultiSelect } from 'components/NewSelect'; import { CustomMultiSelect } from 'components/NewSelect';
import { PANEL_GROUP_TYPES } from 'constants/queryBuilder';
import { generateGridTitle } from 'container/GridPanelSwitch/utils'; import { generateGridTitle } from 'container/GridPanelSwitch/utils';
import { useDashboard } from 'providers/Dashboard/Dashboard'; import { useDashboard } from 'providers/Dashboard/Dashboard';
@ -17,10 +18,15 @@ export function WidgetSelector({
); );
// Filter and deduplicate widgets by ID, keeping only those with layout entries // Filter and deduplicate widgets by ID, keeping only those with layout entries
// and excluding row widgets since they are not panels that can have variables
const widgets = Object.values( const widgets = Object.values(
(selectedDashboard?.data?.widgets || []).reduce( (selectedDashboard?.data?.widgets || []).reduce(
(acc: Record<string, any>, widget) => { (acc: Record<string, any>, widget) => {
if (widget.id && layoutIds.has(widget.id)) { if (
widget.id &&
layoutIds.has(widget.id) &&
widget.panelTypes !== PANEL_GROUP_TYPES.ROW
) {
acc[widget.id] = widget; acc[widget.id] = widget;
} }
return acc; return acc;

View File

@ -1,4 +1,8 @@
/* eslint-disable sonarjs/cognitive-complexity */ /* eslint-disable sonarjs/cognitive-complexity */
import {
convertFiltersToExpressionWithExistingQuery,
removeKeysFromExpression,
} from 'components/QueryBuilderV2/utils';
import { cloneDeep, isArray, isEmpty } from 'lodash-es'; import { cloneDeep, isArray, isEmpty } from 'lodash-es';
import { Dashboard, Widgets } from 'types/api/dashboard/getAll'; import { Dashboard, Widgets } from 'types/api/dashboard/getAll';
import { import {
@ -47,13 +51,18 @@ const updateQueryFilters = (
newItems.push(filter); newItems.push(filter);
} }
const newFilterToUpdate = {
...queryData.filters,
items: newItems,
op: queryData.filters?.op || 'AND',
};
return { return {
...queryData, ...queryData,
filters: { ...convertFiltersToExpressionWithExistingQuery(
...queryData.filters, newFilterToUpdate,
items: newItems, queryData.filter?.expression,
op: queryData.filters?.op || 'AND', ),
},
}; };
}; };
@ -113,6 +122,13 @@ const removeIfPresent = (
items: newItems, items: newItems,
op: queryData.filters?.op || 'AND', op: queryData.filters?.op || 'AND',
}, },
filter: {
...queryData.filter,
expression: removeKeysFromExpression(
queryData.filter?.expression ?? '',
filter.key?.key ? [filter.key.key] : [],
),
},
}; };
}; };

View File

@ -34,7 +34,7 @@ export const useAddDynamicVariableToPanels = (): ((
`$${name}`, `$${name}`,
'', '',
'IN', 'IN',
); // todo - Sagar: make a logic to have correct type and other details );
return addTagFiltersToDashboard( return addTagFiltersToDashboard(
dashboard, dashboard,

View File

@ -105,6 +105,7 @@ export const createDynamicVariableToWidgetsMap = (
widgets.forEach((widget) => { widgets.forEach((widget) => {
if (widget.query?.builder?.queryData) { if (widget.query?.builder?.queryData) {
widget.query.builder.queryData.forEach((queryData: IBuilderQuery) => { widget.query.builder.queryData.forEach((queryData: IBuilderQuery) => {
// Check filter items for dynamic variables
queryData.filters?.items?.forEach((filter: TagFilterItem) => { queryData.filters?.items?.forEach((filter: TagFilterItem) => {
// For each filter, check if it uses any dynamic variable // For each filter, check if it uses any dynamic variable
dynamicVariables.forEach((variable) => { dynamicVariables.forEach((variable) => {
@ -120,6 +121,19 @@ export const createDynamicVariableToWidgetsMap = (
} }
}); });
}); });
// Check filter expression for dynamic variables
if (queryData.filter?.expression) {
dynamicVariables.forEach((variable) => {
if (
variable.dynamicVariablesAttribute &&
queryData.filter?.expression?.includes(`$${variable.name}`) &&
!dynamicVariableToWidgetsMap[variable.id].includes(widget.id)
) {
dynamicVariableToWidgetsMap[variable.id].push(widget.id);
}
});
}
}); });
} }
}); });