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

35 lines
1.4 KiB
TypeScript

import { produce } from 'immer';
import { dataSourcesApi } from '../../api/dataSourcesApi';
import { isAlertmanagerDataSource } from '../../utils/datasource';
export const useEnableOrDisableHandlingGrafanaManagedAlerts = () => {
const [getSettings, getSettingsState] = dataSourcesApi.endpoints.getDataSourceSettingsForUID.useLazyQuery();
const [updateSettings, updateSettingsState] = dataSourcesApi.endpoints.updateDataSourceSettingsForUID.useMutation();
const enableOrDisable = async (uid: string, handleGrafanaManagedAlerts: boolean) => {
const existingSettings = await getSettings(uid).unwrap();
if (!isAlertmanagerDataSource(existingSettings)) {
throw new Error(`Data source with UID ${uid} is not an Alertmanager data source`);
}
const newSettings = produce(existingSettings, (draft) => {
draft.jsonData.handleGrafanaManagedAlerts = handleGrafanaManagedAlerts;
});
updateSettings({ uid, settings: newSettings });
};
const enable = (uid: string) => enableOrDisable(uid, true);
const disable = (uid: string) => enableOrDisable(uid, false);
const loadingState = {
isLoading: getSettingsState.isLoading || updateSettingsState.isLoading,
isError: getSettingsState.isError || updateSettingsState.isError,
error: getSettingsState.error || updateSettingsState.error,
data: updateSettingsState.data,
};
return [enable, disable, loadingState] as const;
};