import React, { FC, useState } from 'react'; import { css } from '@emotion/css'; import { GrafanaTheme2 } from '@grafana/data'; import { Button, useStyles2 } from '@grafana/ui'; import { AmRouteReceiver, FormAmRoute } from '../../types/amroutes'; import { emptyArrayFieldMatcher, emptyRoute } from '../../utils/amroutes'; import { EmptyArea } from '../EmptyArea'; import { AmRoutesTable } from './AmRoutesTable'; export interface AmSpecificRoutingProps { onChange: (routes: FormAmRoute) => void; onRootRouteEdit: () => void; receivers: AmRouteReceiver[]; routes: FormAmRoute; } export const AmSpecificRouting: FC = ({ onChange, onRootRouteEdit, receivers, routes }) => { const [actualRoutes, setActualRoutes] = useState(routes.routes); const [isAddMode, setIsAddMode] = useState(false); const styles = useStyles2(getStyles); const addNewRoute = () => { setIsAddMode(true); setActualRoutes((actualRoutes) => [ ...actualRoutes, { ...emptyRoute, matchers: [emptyArrayFieldMatcher], }, ]); }; return (
Specific routing

Send specific alerts to chosen contact points, based on matching criteria

{!routes.receiver ? ( ) : actualRoutes.length > 0 ? ( <> {!isAddMode && ( )} { setIsAddMode(false); setActualRoutes((actualRoutes) => { const newRoutes = [...actualRoutes]; newRoutes.pop(); return newRoutes; }); }} onChange={(newRoutes) => { onChange({ ...routes, routes: newRoutes, }); if (isAddMode) { setIsAddMode(false); } }} receivers={receivers} routes={actualRoutes} /> ) : ( )}
); }; const getStyles = (theme: GrafanaTheme2) => { return { container: css` display: flex; flex-flow: column nowrap; `, addMatcherBtn: css` align-self: flex-end; margin-bottom: ${theme.spacing(3.5)}; `, }; };