import { useCallback, useMemo, useState } from 'react'; import { Drawer, Tab, TabsBar } from '@grafana/ui'; import { GRAFANA_RULES_SOURCE_NAME } from '../../utils/datasource'; import AlertmanagerConfig from './AlertmanagerConfig'; import { useSettings } from './SettingsContext'; import { AlertmanagerConfigurationVersionManager } from './VersionManager'; type ActiveTab = 'configuration' | 'versions'; export function useEditConfigurationDrawer() { const [activeTab, setActiveTab] = useState('configuration'); const [dataSourceName, setDataSourceName] = useState(); const [open, setOpen] = useState(false); const { updateAlertmanagerSettings, resetAlertmanagerSettings } = useSettings(); const showConfiguration = (dataSourceName: string) => { setDataSourceName(dataSourceName); setOpen(true); }; const handleDismiss = useCallback(() => { setActiveTab('configuration'); setOpen(false); }, []); const drawer = useMemo(() => { if (!open) { return null; } const isGrafanaAlertmanager = dataSourceName === GRAFANA_RULES_SOURCE_NAME; const title = isGrafanaAlertmanager ? 'Internal Grafana Alertmanager' : dataSourceName; // @todo check copy return ( setActiveTab('configuration')} /> setActiveTab('versions')} hidden={!isGrafanaAlertmanager} /> } > {activeTab === 'configuration' && dataSourceName && ( )} {activeTab === 'versions' && dataSourceName && ( )} ); }, [open, dataSourceName, handleDismiss, activeTab, updateAlertmanagerSettings, resetAlertmanagerSettings]); return [drawer, showConfiguration, handleDismiss] as const; }