import { css } from '@emotion/css'; import { GrafanaTheme2, LinkModel } from '@grafana/data'; import { DataLinkButton, useStyles2 } from '@grafana/ui'; import { VizTooltipRow } from '@grafana/ui/src/components/VizTooltip/VizTooltipRow'; import { renderValue } from 'app/plugins/panel/geomap/utils/uiUtils'; import { DisplayValue } from './DataHoverView'; export interface Props { displayValues: DisplayValue[]; links?: LinkModel[]; header?: string; } export const ExemplarHoverView = ({ displayValues, links, header = 'Exemplar' }: Props) => { const styles = useStyles2(getStyles); const time = displayValues.find((val) => val.name === 'Time'); displayValues = displayValues.filter((val) => val.name !== 'Time'); // time? return (
{header} {time && {renderValue(time.valueString)}}
{displayValues.map((displayValue, i) => { return ( ); })}
{links && links.length > 0 && (
{links.map((link, i) => ( ))}
)}
); }; const getStyles = (theme: GrafanaTheme2, padding = 0) => { return { exemplarWrapper: css({ display: 'flex', flexDirection: 'column', flex: 1, gap: 4, whiteSpace: 'pre', borderRadius: theme.shape.radius.default, background: theme.colors.background.primary, border: `1px solid ${theme.colors.border.weak}`, boxShadow: `0 4px 8px ${theme.colors.background.primary}`, }), exemplarHeader: css({ display: 'flex', flexDirection: 'column', alignItems: 'flex-start', gap: theme.spacing(0.5), color: theme.colors.text.secondary, padding: theme.spacing(1), }), time: css({ color: theme.colors.text.primary, }), exemplarContent: css({ display: 'flex', flexDirection: 'column', flex: 1, gap: 4, borderTop: `1px solid ${theme.colors.border.medium}`, padding: theme.spacing(1), }), exemplarFooter: css({ display: 'flex', flexDirection: 'column', padding: theme.spacing(1), borderTop: `1px solid ${theme.colors.border.medium}`, gap: 4, }), linkButton: css({ width: 'fit-content', }), label: css({ color: theme.colors.text.secondary, fontWeight: 400, textOverflow: 'ellipsis', overflow: 'hidden', marginRight: theme.spacing(0.5), }), value: css({ fontWeight: 500, textOverflow: 'ellipsis', overflow: 'hidden', }), title: css({ fontWeight: theme.typography.fontWeightMedium, overflow: 'hidden', display: 'inline-block', whiteSpace: 'nowrap', textOverflow: 'ellipsis', flexGrow: 1, }), }; };