import React from 'react'; import { DataFrame, FALLBACK_COLOR, Field, getDisplayProcessor, getFieldDisplayName, TimeZone, LinkModel, } from '@grafana/data'; import { MenuItem, SeriesTableRow, useTheme2 } from '@grafana/ui'; interface StatusHistoryTooltipProps { data: DataFrame[]; alignedData: DataFrame; seriesIdx: number; datapointIdx: number; timeZone: TimeZone; } export const StatusHistoryTooltip: React.FC = ({ data, alignedData, seriesIdx, datapointIdx, timeZone, }) => { const theme = useTheme2(); if (!data || datapointIdx == null) { return null; } const field = alignedData.fields[seriesIdx!]; const links: Array> = []; const linkLookup = new Set(); if (field.getLinks) { const v = field.values.get(datapointIdx); const disp = field.display ? field.display(v) : { text: `${v}`, numeric: +v }; field.getLinks({ calculatedValue: disp, valueRowIndex: datapointIdx }).forEach((link) => { const key = `${link.title}/${link.href}`; if (!linkLookup.has(key)) { links.push(link); linkLookup.add(key); } }); } const xField = alignedData.fields[0]; const xFieldFmt = xField.display || getDisplayProcessor({ field: xField, timeZone, theme }); const dataFrameFieldIndex = field.state?.origin; const fieldFmt = field.display || getDisplayProcessor({ field, timeZone, theme }); const value = field.values.get(datapointIdx!); const display = fieldFmt(value); const fieldDisplayName = dataFrameFieldIndex ? getFieldDisplayName( data[dataFrameFieldIndex.frameIndex].fields[dataFrameFieldIndex.fieldIndex], data[dataFrameFieldIndex.frameIndex], data ) : null; return (
{xFieldFmt(xField.values.get(datapointIdx)).text}
{fieldDisplayName}
{links.length > 0 && (
{links.map((link, i) => ( ))}
)}
); }; StatusHistoryTooltip.displayName = 'StatusHistoryTooltip';