From f88a0f36ecf16a88124759b22367f9b50fbecad1 Mon Sep 17 00:00:00 2001 From: Sonia Aguilar <33540275+soniaAguilarPeiron@users.noreply.github.com> Date: Mon, 6 Nov 2023 08:35:42 +0100 Subject: [PATCH] Alerting: Avoid alert list view component being unmounted every time we fetch new data (#77631) * Avoid view component being unmounted any time we fetch new data * Render loading indicator only when loading data for the first time * Remove unnecessary useRef --- .../panel/alertlist/UnifiedAlertList.tsx | 61 +++++++++++-------- 1 file changed, 34 insertions(+), 27 deletions(-) diff --git a/public/app/plugins/panel/alertlist/UnifiedAlertList.tsx b/public/app/plugins/panel/alertlist/UnifiedAlertList.tsx index 544834f3422..890f8b23833 100644 --- a/public/app/plugins/panel/alertlist/UnifiedAlertList.tsx +++ b/public/app/plugins/panel/alertlist/UnifiedAlertList.tsx @@ -213,6 +213,10 @@ export function UnifiedAlertList(props: PanelProps) { const noAlertsMessage = rules.length === 0 ? 'No alerts matching filters' : undefined; + const renderLoading = grafanaRulesLoading || (dispatched && loading && !haveResults); + + const havePreviousResults = Object.values(promRulesRequests).some((state) => state.result); + if ( !contextSrv.hasPermission(AccessControlAction.AlertingRuleRead) && !contextSrv.hasPermission(AccessControlAction.AlertingRuleExternalRead) @@ -225,33 +229,36 @@ export function UnifiedAlertList(props: PanelProps) { return (
- {(grafanaRulesLoading || (dispatched && loading && !haveResults)) && } - {noAlertsMessage &&
{noAlertsMessage}
} -
- {props.options.viewMode === ViewMode.Stat && haveResults && ( - - )} - {props.options.viewMode === ViewMode.List && props.options.groupMode === GroupMode.Custom && haveResults && ( - - )} - {props.options.viewMode === ViewMode.List && props.options.groupMode === GroupMode.Default && haveResults && ( - - )} -
+ {havePreviousResults && noAlertsMessage &&
{noAlertsMessage}
} + {havePreviousResults && ( +
+ {props.options.viewMode === ViewMode.Stat && ( + + )} + {props.options.viewMode === ViewMode.List && props.options.groupMode === GroupMode.Custom && ( + + )} + {props.options.viewMode === ViewMode.List && props.options.groupMode === GroupMode.Default && ( + + )} +
+ )} + {/* loading moved here to avoid twitching */} + {renderLoading && }
);