2025-04-01 10:38:02 +09:00

36 lines
1.4 KiB
TypeScript

import { useEffect } from 'react';
import { alertRuleApi } from 'app/features/alerting/unified/api/alertRuleApi';
import { ReceiverTypes } from 'app/features/alerting/unified/components/receivers/grafanaAppReceivers/onCall/onCall';
import { useDataSourceFeatures } from 'app/features/alerting/unified/hooks/useCombinedRule';
import { GRAFANA_RULES_SOURCE_NAME } from 'app/features/alerting/unified/utils/datasource';
import { Receiver } from 'app/plugins/datasource/alertmanager/types';
export function useIsCreateAlertRuleDone() {
const [fetchRulerRules, { data, isLoading }] = alertRuleApi.endpoints.rulerRules.useLazyQuery({
refetchOnFocus: true,
refetchOnReconnect: true,
});
const { dsFeatures, isLoadingDsFeatures } = useDataSourceFeatures(GRAFANA_RULES_SOURCE_NAME);
const rulerConfig = dsFeatures?.rulerConfig;
useEffect(() => {
rulerConfig && fetchRulerRules({ rulerConfig });
}, [rulerConfig, fetchRulerRules]);
const rules = data
? Object.entries(data).flatMap(([_, groupDto]) => {
return groupDto.flatMap((group) => group.rules);
})
: [];
const isDone = rules.length > 0;
return { isDone, isLoading: isLoading || isLoadingDsFeatures };
}
export function isOnCallContactPointReady(contactPoints: Receiver[]) {
return contactPoints.some((contactPoint: Receiver) =>
contactPoint.grafana_managed_receiver_configs?.some((receiver) => receiver.type === ReceiverTypes.OnCall)
);
}