import React, { useCallback, useEffect, useState } from 'react'; import { useDispatch } from 'react-redux'; import { css } from '@emotion/css'; import { GrafanaTheme2 } from '@grafana/data'; import { Button, ConfirmModal, HorizontalGroup, Icon, Tooltip, useStyles2 } from '@grafana/ui'; import EmptyListCTA from 'app/core/components/EmptyListCTA/EmptyListCTA'; import { AddAlertManagerModal } from './AddAlertManagerModal'; import { addExternalAlertmanagersAction, fetchExternalAlertmanagersAction, fetchExternalAlertmanagersConfigAction, } from '../../state/actions'; import { useExternalAmSelector } from '../../hooks/useExternalAmSelector'; export const ExternalAlertmanagers = () => { const styles = useStyles2(getStyles); const dispatch = useDispatch(); const [modalState, setModalState] = useState({ open: false, payload: [{ url: '' }] }); const [deleteModalState, setDeleteModalState] = useState({ open: false, index: 0 }); const externalAlertManagers = useExternalAmSelector(); useEffect(() => { dispatch(fetchExternalAlertmanagersAction()); dispatch(fetchExternalAlertmanagersConfigAction()); const interval = setInterval(() => dispatch(fetchExternalAlertmanagersAction()), 5000); return () => { clearInterval(interval); }; }, [dispatch]); const onDelete = useCallback( (index: number) => { // to delete we need to filter the alertmanager from the list and repost const newList = (externalAlertManagers ?? []) .filter((am, i) => i !== index) .map((am) => { return am.url; }); dispatch(addExternalAlertmanagersAction(newList)); setDeleteModalState({ open: false, index: 0 }); }, [externalAlertManagers, dispatch] ); const onEdit = useCallback(() => { const ams = externalAlertManagers ? [...externalAlertManagers] : [{ url: '' }]; setModalState((state) => ({ ...state, open: true, payload: ams, })); }, [setModalState, externalAlertManagers]); const onOpenModal = useCallback(() => { setModalState((state) => { const ams = externalAlertManagers ? [...externalAlertManagers, { url: '' }] : [{ url: '' }]; return { ...state, open: true, payload: ams, }; }); }, [externalAlertManagers]); const onCloseModal = useCallback(() => { setModalState((state) => ({ ...state, open: false, })); }, [setModalState]); const getStatusColor = (status: string) => { switch (status) { case 'active': return 'green'; case 'pending': return 'yellow'; default: return 'red'; } }; const noAlertmanagers = externalAlertManagers?.length === 0; return (
| Url | Status | Action |
|---|---|---|
|
{am.url}
{am.actualUrl ? (
|
|
|