From 30363dbc34778b3bcc66f718f2e5be7d6cadec5a Mon Sep 17 00:00:00 2001 From: "Grot (@grafanabot)" <43478413+grafanabot@users.noreply.github.com> Date: Thu, 15 Jun 2023 21:18:01 -0400 Subject: [PATCH] [v10.0.x] XYChart: Fix variable interpolation in datalinks/toggletip (#70210) XYChart: Fix variable interpolation in datalinks/toggletip (#70195) (cherry picked from commit 7d4f7e5ffcdc36d14f438885f0d49f3c962d1ed6) Co-authored-by: Leon Sorokin --- public/app/features/explore/utils/links.ts | 5 +++- .../panel/timeseries/TimeSeriesPanel.tsx | 4 +-- .../app/plugins/panel/xychart/TooltipView.tsx | 27 ++++++++++++------- 3 files changed, 22 insertions(+), 14 deletions(-) diff --git a/public/app/features/explore/utils/links.ts b/public/app/features/explore/utils/links.ts index 2e92ebedbaf..b1572c5064d 100644 --- a/public/app/features/explore/utils/links.ts +++ b/public/app/features/explore/utils/links.ts @@ -187,7 +187,10 @@ export const getFieldLinksForExplore = (options: { return []; }; -function getTitleFromHref(href: string): string { +/** + * @internal + */ +export function getTitleFromHref(href: string): string { // The URL constructor needs the url to have protocol if (href.indexOf('://') < 0) { // Doesn't really matter what protocol we use. diff --git a/public/app/plugins/panel/timeseries/TimeSeriesPanel.tsx b/public/app/plugins/panel/timeseries/TimeSeriesPanel.tsx index c5d26d01a71..1971a420862 100644 --- a/public/app/plugins/panel/timeseries/TimeSeriesPanel.tsx +++ b/public/app/plugins/panel/timeseries/TimeSeriesPanel.tsx @@ -79,9 +79,7 @@ export const TimeSeriesPanel = ({ options={options} > {(config, alignedDataFrame) => { - if ( - alignedDataFrame.fields.filter((f) => f.config.links !== undefined && f.config.links.length > 0).length > 0 - ) { + if (alignedDataFrame.fields.some((f) => Boolean(f.config.links?.length))) { alignedDataFrame = regenerateLinksSupplier(alignedDataFrame, frames, replaceVariables, timeZone); } diff --git a/public/app/plugins/panel/xychart/TooltipView.tsx b/public/app/plugins/panel/xychart/TooltipView.tsx index 93e00fb2ab2..33906bf704b 100644 --- a/public/app/plugins/panel/xychart/TooltipView.tsx +++ b/public/app/plugins/panel/xychart/TooltipView.tsx @@ -10,9 +10,9 @@ import { LinkModel, TimeRange, } from '@grafana/data'; -import { LinkButton, usePanelContext, useStyles2, VerticalGroup, VizTooltipOptions } from '@grafana/ui'; +import { LinkButton, useStyles2, VerticalGroup, VizTooltipOptions } from '@grafana/ui'; import { findField } from 'app/features/dimensions'; -import { getFieldLinksForExplore } from 'app/features/explore/utils/links'; +import { getTitleFromHref } from 'app/features/explore/utils/links'; import { ScatterSeriesConfig, SeriesMapping } from './models.gen'; import { ScatterSeries } from './types'; @@ -53,7 +53,6 @@ export const TooltipView = ({ range, }: Props) => { const style = useStyles2(getStyles); - const { onSplitOpen } = usePanelContext(); if (!allSeries || rowIndex == null) { return null; @@ -63,12 +62,20 @@ export const TooltipView = ({ const frame = series.frame(data); const xField = series.x(frame); const yField = series.y(frame); - const links: Array> = getFieldLinksForExplore({ - field: yField, - splitOpenFn: onSplitOpen, - rowIndex, - range, - }); + + let links: LinkModel[] | undefined = undefined; + + if (yField.getLinks) { + const v = yField.values[rowIndex]; + const disp = yField.display ? yField.display(v) : { text: `${v}`, numeric: +v }; + links = yField.getLinks({ calculatedValue: disp, valueRowIndex: rowIndex }).map((linkModel) => { + if (!linkModel.title) { + linkModel.title = getTitleFromHref(linkModel.href); + } + + return linkModel; + }); + } let extraFields: Field[] = frame.fields.filter((f) => f !== xField && f !== yField); @@ -131,7 +138,7 @@ export const TooltipView = ({ {fmt(field, field.values[rowIndex])} ))} - {links.length > 0 && ( + {links && links.length > 0 && (