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