import { useCleanup } from 'app/core/hooks/useCleanup'; import { AlertManagerCortexConfig } from 'app/plugins/datasource/alertmanager/types'; import React, { FC } from 'react'; import { useUnifiedAlertingSelector } from '../../hooks/useUnifiedAlertingSelector'; import { useForm, FormProvider } from 'react-hook-form'; import { globalConfigOptions } from '../../utils/cloud-alertmanager-notifier-types'; import { OptionField } from './form/fields/OptionField'; import { Alert, Button, HorizontalGroup, LinkButton, useStyles2 } from '@grafana/ui'; import { makeAMLink } from '../../utils/misc'; import { useDispatch } from 'react-redux'; import { updateAlertManagerConfigAction } from '../../state/actions'; import { omitEmptyValues } from '../../utils/receiver-form'; import { css } from '@emotion/css'; import { GrafanaTheme2 } from '@grafana/data'; import { isVanillaPrometheusAlertManagerDataSource } from '../../utils/datasource'; interface Props { config: AlertManagerCortexConfig; alertManagerSourceName: string; } type FormValues = Record; const defaultValues: FormValues = { smtp_require_tls: true, } as const; export const GlobalConfigForm: FC = ({ config, alertManagerSourceName }) => { const dispatch = useDispatch(); useCleanup((state) => state.unifiedAlerting.saveAMConfig); const { loading, error } = useUnifiedAlertingSelector((state) => state.saveAMConfig); const readOnly = isVanillaPrometheusAlertManagerDataSource(alertManagerSourceName); const styles = useStyles2(getStyles); const formAPI = useForm({ // making a copy here beacuse react-hook-form will mutate these, and break if the object is frozen. for real. defaultValues: JSON.parse( JSON.stringify({ ...defaultValues, ...(config.alertmanager_config.global ?? {}), }) ), }); const { handleSubmit, formState: { errors }, } = formAPI; const onSubmitCallback = (values: FormValues) => { dispatch( updateAlertManagerConfigAction({ newConfig: { ...config, alertmanager_config: { ...config.alertmanager_config, global: omitEmptyValues(values), }, }, oldConfig: config, alertManagerSourceName, successMessage: 'Global config updated.', redirectPath: makeAMLink('/alerting/notifications', alertManagerSourceName), }) ); }; return (

Global config

{error && ( {error.message || String(error)} )} {globalConfigOptions.map((option) => ( ))}
{!readOnly && ( <> {loading && ( )} {!loading && } )} Cancel
); }; const getStyles = (theme: GrafanaTheme2) => ({ heading: css` margin: ${theme.spacing(4, 0)}; `, });