36 lines
1.4 KiB
TypeScript
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)
|
|
);
|
|
}
|