From c9b8317352bca84ec018173893f90d32749089d5 Mon Sep 17 00:00:00 2001 From: Gilles De Mey Date: Fri, 6 May 2022 16:13:04 +0200 Subject: [PATCH] Alerting: automatically select last expression (#48787) (#48818) (cherry picked from commit 2d6ab03e4f15ba05e3699a72b304de2c4ee1051a) --- .../components/rule-editor/ConditionField.tsx | 27 ++++++++++++++----- 1 file changed, 21 insertions(+), 6 deletions(-) diff --git a/public/app/features/alerting/unified/components/rule-editor/ConditionField.tsx b/public/app/features/alerting/unified/components/rule-editor/ConditionField.tsx index 9c45e41bf51..fdd00f80fec 100644 --- a/public/app/features/alerting/unified/components/rule-editor/ConditionField.tsx +++ b/public/app/features/alerting/unified/components/rule-editor/ConditionField.tsx @@ -1,3 +1,4 @@ +import { last } from 'lodash'; import React, { FC, useEffect, useMemo } from 'react'; import { useFormContext } from 'react-hook-form'; @@ -28,15 +29,29 @@ export const ConditionField: FC = () => { [queries] ); + const expressions = useMemo(() => { + return queries.filter((query) => query.datasourceUid === ExpressionDatasourceUID); + }, [queries]); + + // automatically use the last expression when new expressions have been added + useEffect(() => { + const lastExpression = last(expressions); + if (lastExpression) { + setValue('condition', lastExpression.refId, { shouldValidate: true }); + } + }, [expressions, setValue]); + // reset condition if option no longer exists or if it is unset, but there are options available useEffect(() => { - const expressions = queries.filter((query) => query.datasourceUid === ExpressionDatasourceUID); - if (condition && !options.find(({ value }) => value === condition)) { - setValue('condition', expressions.length ? expressions[expressions.length - 1].refId : null); - } else if (!condition && expressions.length) { - setValue('condition', expressions[expressions.length - 1].refId); + const lastExpression = last(expressions); + const conditionExists = options.find(({ value }) => value === condition); + + if (condition && !conditionExists) { + setValue('condition', lastExpression?.refId ?? null); + } else if (!condition && lastExpression) { + setValue('condition', lastExpression.refId, { shouldValidate: true }); } - }, [condition, options, queries, setValue]); + }, [condition, expressions, options, setValue]); return (