import { GrafanaTheme } from '@grafana/data'; import { useStyles } from '@grafana/ui'; import { AlertingRule } from 'app/types/unified-alerting'; import { css, cx } from '@emotion/css'; import React, { FC, Fragment, useState } from 'react'; import { getAlertTableStyles } from '../../styles/table'; import { alertInstanceKey } from '../../utils/rules'; import { AlertLabels } from '../AlertLabels'; import { CollapseToggle } from '../CollapseToggle'; import { StateTag } from '../StateTag'; import { AlertInstanceDetails } from './AlertInstanceDetails'; interface Props { instances: AlertingRule['alerts']; } export const AlertInstancesTable: FC = ({ instances }) => { const styles = useStyles(getStyles); const tableStyles = useStyles(getAlertTableStyles); const [expandedKeys, setExpandedKeys] = useState([]); const toggleExpandedState = (ruleKey: string) => setExpandedKeys( expandedKeys.includes(ruleKey) ? expandedKeys.filter((key) => key !== ruleKey) : [...expandedKeys, ruleKey] ); return ( {instances.map((instance, idx) => { const key = alertInstanceKey(instance); const isExpanded = expandedKeys.includes(key); return ( {isExpanded && ( )} ); })}
State Labels Created
toggleExpandedState(key)} data-testid="alert-collapse-toggle" /> {instance.activeAt.substr(0, 19).replace('T', ' ')}
); }; export const getStyles = (theme: GrafanaTheme) => ({ colExpand: css` width: 36px; `, colState: css` width: 110px; `, labelsCell: css` padding-top: ${theme.spacing.xs} !important; padding-bottom: ${theme.spacing.xs} !important; `, createdCell: css` white-space: nowrap; `, table: css` td { vertical-align: top; padding-top: ${theme.spacing.sm}; padding-bottom: ${theme.spacing.sm}; } `, });