import { css } from '@emotion/css'; import React, { useMemo } from 'react'; import { GrafanaTheme2, intervalToAbbreviatedDurationString } from '@grafana/data'; import { useStyles2 } from '@grafana/ui'; import { AlertmanagerAlert } from 'app/plugins/datasource/alertmanager/types'; import { AlertLabels } from '../AlertLabels'; import { DynamicTableColumnProps, DynamicTableItemProps } from '../DynamicTable'; import { DynamicTableWithGuidelines } from '../DynamicTableWithGuidelines'; import { AmAlertStateTag } from '../silences/AmAlertStateTag'; import { AlertDetails } from './AlertDetails'; interface Props { alerts: AlertmanagerAlert[]; alertManagerSourceName: string; } type AlertGroupAlertsTableColumnProps = DynamicTableColumnProps; type AlertGroupAlertsTableItemProps = DynamicTableItemProps; export const AlertGroupAlertsTable = ({ alerts, alertManagerSourceName }: Props) => { const styles = useStyles2(getStyles); const columns = useMemo( (): AlertGroupAlertsTableColumnProps[] => [ { id: 'state', label: 'State', // eslint-disable-next-line react/display-name renderCell: ({ data: alert }) => ( <> for{' '} {intervalToAbbreviatedDurationString({ start: new Date(alert.startsAt), end: new Date(alert.endsAt), })} ), size: '220px', }, { id: 'labels', label: 'Labels', // eslint-disable-next-line react/display-name renderCell: ({ data: { labels } }) => , size: 1, }, ], [styles] ); const items = useMemo( (): AlertGroupAlertsTableItemProps[] => alerts.map((alert) => ({ id: alert.fingerprint, data: alert, })), [alerts] ); return (
( )} />
); }; const getStyles = (theme: GrafanaTheme2) => ({ tableWrapper: css` margin-top: ${theme.spacing(3)}; ${theme.breakpoints.up('md')} { margin-left: ${theme.spacing(4.5)}; } `, duration: css` margin-left: ${theme.spacing(1)}; font-size: ${theme.typography.bodySmall.fontSize}; `, labels: css` padding-bottom: 0; `, });