Alerting: Fix removing reducer when inital value is instant (#97054)

* Fix removing reducer when inital value is instant

* use ID to allow clicking label to toggle the switch

---------

Co-authored-by: Gilles De Mey <gilles.de.mey@gmail.com>
This commit is contained in:
Sonia Aguilar
2024-11-27 15:59:25 +01:00
committed by GitHub
parent 33e7005483
commit 2e14c20c71
2 changed files with 12 additions and 8 deletions

View File

@ -37,6 +37,7 @@ export const RuleEditorSection = ({
{switchMode && ( {switchMode && (
<Text variant="bodySmall"> <Text variant="bodySmall">
<InlineSwitch <InlineSwitch
id="query-and-expressions-advanced-switch"
data-testid={ data-testid={
switchMode.isAdvancedMode switchMode.isAdvancedMode
? 'query-and-expressions-advanced-options' ? 'query-and-expressions-advanced-options'

View File

@ -140,6 +140,7 @@ export const QueryAndExpressionsStep = ({ editingExistingRule, onDataChange }: P
}; };
const [{ queries }, dispatch] = useReducer(queriesAndExpressionsReducer, initialState); const [{ queries }, dispatch] = useReducer(queriesAndExpressionsReducer, initialState);
const isOptimizeReducerEnabled = config.featureToggles.alertingUIOptimizeReducer ?? false;
// data queries only // data queries only
const dataQueries = useMemo(() => { const dataQueries = useMemo(() => {
@ -151,6 +152,15 @@ export const QueryAndExpressionsStep = ({ editingExistingRule, onDataChange }: P
return queries.filter((query) => isExpressionQueryInAlert(query)); return queries.filter((query) => isExpressionQueryInAlert(query));
}, [queries]); }, [queries]);
useEffect(() => {
// we only remove or add the reducer(optimize reducer) expression when creating a new alert.
// When editing an alert, we assume the user wants to manually adjust expressions and queries for more control and customization.
if (!editingExistingRule && isOptimizeReducerEnabled) {
dispatch(optimizeReduceExpression({ updatedQueries: dataQueries, expressionQueries }));
}
}, [dataQueries, expressionQueries, editingExistingRule, isOptimizeReducerEnabled]);
const [type, condition, dataSourceName, editorSettings] = watch([ const [type, condition, dataSourceName, editorSettings] = watch([
'type', 'type',
'condition', 'condition',
@ -265,7 +275,6 @@ export const QueryAndExpressionsStep = ({ editingExistingRule, onDataChange }: P
); );
const updateExpressionAndDatasource = useSetExpressionAndDataSource(); const updateExpressionAndDatasource = useSetExpressionAndDataSource();
const isOptimizeReducerEnabled = config.featureToggles.alertingUIOptimizeReducer ?? false;
const onChangeQueries = useCallback( const onChangeQueries = useCallback(
(updatedQueries: AlertQuery[]) => { (updatedQueries: AlertQuery[]) => {
@ -279,12 +288,6 @@ export const QueryAndExpressionsStep = ({ editingExistingRule, onDataChange }: P
setValue('queries', [...updatedQueries, ...expressionQueries], { shouldValidate: false }); setValue('queries', [...updatedQueries, ...expressionQueries], { shouldValidate: false });
updateExpressionAndDatasource(updatedQueries); updateExpressionAndDatasource(updatedQueries);
// we only remove or add the reducer(optimize reducer) expression when creating a new alert.
// When editing an alert, we assume the user wants to manually adjust expressions and queries for more control and customization.
if (!editingExistingRule && isOptimizeReducerEnabled) {
dispatch(optimizeReduceExpression({ updatedQueries, expressionQueries }));
}
dispatch(setDataQueries(updatedQueries)); dispatch(setDataQueries(updatedQueries));
dispatch(updateExpressionTimeRange()); dispatch(updateExpressionTimeRange());
@ -294,7 +297,7 @@ export const QueryAndExpressionsStep = ({ editingExistingRule, onDataChange }: P
dispatch(rewireExpressions({ oldRefId, newRefId })); dispatch(rewireExpressions({ oldRefId, newRefId }));
} }
}, },
[queries, updateExpressionAndDatasource, getValues, setValue, editingExistingRule, isOptimizeReducerEnabled] [queries, updateExpressionAndDatasource, getValues, setValue]
); );
const onChangeRecordingRulesQueries = useCallback( const onChangeRecordingRulesQueries = useCallback(