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 { PANEL_GROUP_TYPES } from 'constants/queryBuilder';
import { generateGridTitle } from 'container/GridPanelSwitch/utils';
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
// and excluding row widgets since they are not panels that can have variables
const widgets = Object.values(
(selectedDashboard?.data?.widgets || []).reduce(
(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;
}
return acc;

View File

@ -1,4 +1,8 @@
/* eslint-disable sonarjs/cognitive-complexity */
import {
convertFiltersToExpressionWithExistingQuery,
removeKeysFromExpression,
} from 'components/QueryBuilderV2/utils';
import { cloneDeep, isArray, isEmpty } from 'lodash-es';
import { Dashboard, Widgets } from 'types/api/dashboard/getAll';
import {
@ -47,13 +51,18 @@ const updateQueryFilters = (
newItems.push(filter);
}
const newFilterToUpdate = {
...queryData.filters,
items: newItems,
op: queryData.filters?.op || 'AND',
};
return {
...queryData,
filters: {
...queryData.filters,
items: newItems,
op: queryData.filters?.op || 'AND',
},
...convertFiltersToExpressionWithExistingQuery(
newFilterToUpdate,
queryData.filter?.expression,
),
};
};
@ -113,6 +122,13 @@ const removeIfPresent = (
items: newItems,
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}`,
'',
'IN',
); // todo - Sagar: make a logic to have correct type and other details
);
return addTagFiltersToDashboard(
dashboard,

View File

@ -105,6 +105,7 @@ export const createDynamicVariableToWidgetsMap = (
widgets.forEach((widget) => {
if (widget.query?.builder?.queryData) {
widget.query.builder.queryData.forEach((queryData: IBuilderQuery) => {
// Check filter items for dynamic variables
queryData.filters?.items?.forEach((filter: TagFilterItem) => {
// For each filter, check if it uses any dynamic 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);
}
});
}
});
}
});