From 229c1f417f7d1af17b5efd17cc4864e997b020de Mon Sep 17 00:00:00 2001 From: Konrad Lalik Date: Tue, 9 Jan 2024 11:08:28 +0100 Subject: [PATCH] Alerting: Disable export all rules button when no GMA rules (#80126) Disable export button when no GMA rules --- .../alerting/unified/MoreActionsRuleButtons.tsx | 14 +++++++++++--- public/app/features/alerting/unified/RuleList.tsx | 7 +++++-- 2 files changed, 16 insertions(+), 5 deletions(-) diff --git a/public/app/features/alerting/unified/MoreActionsRuleButtons.tsx b/public/app/features/alerting/unified/MoreActionsRuleButtons.tsx index d3fd6005336..7e6754a30c5 100644 --- a/public/app/features/alerting/unified/MoreActionsRuleButtons.tsx +++ b/public/app/features/alerting/unified/MoreActionsRuleButtons.tsx @@ -10,9 +10,11 @@ import { logInfo, LogMessages } from './Analytics'; import { GrafanaRulesExporter } from './components/export/GrafanaRulesExporter'; import { AlertingAction, useAlertingAbility } from './hooks/useAbilities'; -interface Props {} +interface Props { + enableExport?: boolean; +} -export function MoreActionsRuleButtons({}: Props) { +export function MoreActionsRuleButtons({ enableExport }: Props) { const [createRuleSupported, createRuleAllowed] = useAlertingAbility(AlertingAction.CreateAlertRule); const [createCloudRuleSupported, createCloudRuleAllowed] = useAlertingAbility(AlertingAction.CreateExternalAlertRule); const [exportRulesSupported, exportRulesAllowed] = useAlertingAbility(AlertingAction.ExportGrafanaManagedRules); @@ -40,7 +42,13 @@ export function MoreActionsRuleButtons({}: Props) { if (canExportRules) { menuItems.push( - + ); } diff --git a/public/app/features/alerting/unified/RuleList.tsx b/public/app/features/alerting/unified/RuleList.tsx index dfc7078d9aa..518bf4c3df2 100644 --- a/public/app/features/alerting/unified/RuleList.tsx +++ b/public/app/features/alerting/unified/RuleList.tsx @@ -24,7 +24,7 @@ import { useFilteredRules, useRulesFilter } from './hooks/useFilteredRules'; import { useUnifiedAlertingSelector } from './hooks/useUnifiedAlertingSelector'; import { fetchAllPromAndRulerRulesAction } from './state/actions'; import { RULE_LIST_POLL_INTERVAL_MS } from './utils/constants'; -import { getAllRulesSourceNames } from './utils/datasource'; +import { getAllRulesSourceNames, GRAFANA_RULES_SOURCE_NAME } from './utils/datasource'; const VIEWS = { groups: RuleListGroupView, @@ -77,6 +77,9 @@ const RuleList = withErrorBoundary( return noRules && state.dispatched; }); + const grafanaRules = useUnifiedAlertingSelector((state) => state.rulerRules[GRAFANA_RULES_SOURCE_NAME]?.result); + const hasGrafanaRules = Object.keys(grafanaRules ?? {}).length > 0; + const limitAlerts = hasActiveFilters ? undefined : LIMIT_ALERTS; // Trigger data refresh only when the RULE_LIST_POLL_INTERVAL_MS elapsed since the previous load FINISHED const [_, fetchRules] = useAsyncFn(async () => { @@ -126,7 +129,7 @@ const RuleList = withErrorBoundary( - +