import { css } from '@emotion/css'; import { chain } from 'lodash'; import pluralize from 'pluralize'; import React, { useState } from 'react'; import { GrafanaTheme2 } from '@grafana/data'; import { Button, getTagColorsFromName, useStyles2 } from '@grafana/ui'; import { isPrivateLabel } from '../utils/labels'; import { Label, LabelSize } from './Label'; interface Props { labels: Record; commonLabels?: Record; size?: LabelSize; } export const AlertLabels = ({ labels, commonLabels = {}, size }: Props) => { const styles = useStyles2(getStyles, size); const [showCommonLabels, setShowCommonLabels] = useState(false); const labelsToShow = chain(labels) .toPairs() .reject(isPrivateLabel) .reject(([key]) => (showCommonLabels ? false : key in commonLabels)) .value(); const commonLabelsCount = Object.keys(commonLabels).length; const hasCommonLabels = commonLabelsCount > 0; return (
{labelsToShow.map(([label, value]) => (
); }; function getLabelColor(input: string): string { return getTagColorsFromName(input).color; } const getStyles = (theme: GrafanaTheme2, size?: LabelSize) => ({ wrapper: css({ display: 'flex', flexWrap: 'wrap', alignItems: 'center', gap: size === 'md' ? theme.spacing() : theme.spacing(0.5), }), });