VizTooltips: Render data links only when anchored (#83737)

This commit is contained in:
Leon Sorokin 2024-02-29 17:28:37 -06:00 committed by GitHub
parent 88ebef5cba
commit 859ecf2a34
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
3 changed files with 31 additions and 29 deletions

View File

@ -1,6 +1,6 @@
import React from 'react';
import React, { ReactNode } from 'react';
import { Field, FieldType, getFieldDisplayName, LinkModel, TimeRange } from '@grafana/data';
import { FieldType, getFieldDisplayName, TimeRange } from '@grafana/data';
import { SortOrder } from '@grafana/schema/dist/esm/common/common.gen';
import { TooltipDisplayMode, useStyles2 } from '@grafana/ui';
import { VizTooltipContent } from '@grafana/ui/src/components/VizTooltip/VizTooltipContent';
@ -65,12 +65,14 @@ export const StateTimelineTooltip2 = ({
contentItems.push({ label: 'Duration', value: duration });
}
let links: Array<LinkModel<Field>> = [];
let footer: ReactNode;
if (seriesIdx != null) {
if (isPinned && seriesIdx != null) {
const field = seriesFrame.fields[seriesIdx];
const dataIdx = dataIdxs[seriesIdx]!;
links = getDataLinks(field, dataIdx);
const links = getDataLinks(field, dataIdx);
footer = <VizTooltipFooter dataLinks={links} annotate={annotate} />;
}
const headerItem: VizTooltipItem = {
@ -79,14 +81,10 @@ export const StateTimelineTooltip2 = ({
};
return (
<div>
<div className={styles.wrapper}>
<VizTooltipHeader item={headerItem} isPinned={isPinned} />
<VizTooltipContent items={contentItems} isPinned={isPinned} scrollable={scrollable} />
{(links.length > 0 || isPinned) && (
<VizTooltipFooter dataLinks={links} annotate={isPinned ? annotate : undefined} />
)}
</div>
<div className={styles.wrapper}>
<VizTooltipHeader item={headerItem} isPinned={isPinned} />
<VizTooltipContent items={contentItems} isPinned={isPinned} scrollable={scrollable} />
{footer}
</div>
);
};

View File

@ -1,7 +1,7 @@
import { css } from '@emotion/css';
import React from 'react';
import React, { ReactNode } from 'react';
import { DataFrame, FieldType, LinkModel, Field, getFieldDisplayName } from '@grafana/data';
import { DataFrame, FieldType, getFieldDisplayName } from '@grafana/data';
import { SortOrder, TooltipDisplayMode } from '@grafana/schema/dist/esm/common/common.gen';
import { useStyles2 } from '@grafana/ui';
import { VizTooltipContent } from '@grafana/ui/src/components/VizTooltip/VizTooltipContent';
@ -59,12 +59,14 @@ export const TimeSeriesTooltip = ({
(field) => field.type === FieldType.number
);
let links: Array<LinkModel<Field>> = [];
let footer: ReactNode;
if (seriesIdx != null) {
if (isPinned && seriesIdx != null) {
const field = seriesFrame.fields[seriesIdx];
const dataIdx = dataIdxs[seriesIdx]!;
links = getDataLinks(field, dataIdx);
const links = getDataLinks(field, dataIdx);
footer = <VizTooltipFooter dataLinks={links} annotate={annotate} />;
}
const headerItem: VizTooltipItem = {
@ -73,14 +75,10 @@ export const TimeSeriesTooltip = ({
};
return (
<div>
<div className={styles.wrapper}>
<VizTooltipHeader item={headerItem} isPinned={isPinned} />
<VizTooltipContent items={contentItems} isPinned={isPinned} scrollable={scrollable} />
{(links.length > 0 || isPinned) && (
<VizTooltipFooter dataLinks={links} annotate={isPinned ? annotate : undefined} />
)}
</div>
<div className={styles.wrapper}>
<VizTooltipHeader item={headerItem} isPinned={isPinned} />
<VizTooltipContent items={contentItems} isPinned={isPinned} scrollable={scrollable} />
{footer}
</div>
);
};

View File

@ -1,4 +1,4 @@
import React from 'react';
import React, { ReactNode } from 'react';
import { DataFrame, Field, getFieldDisplayName } from '@grafana/data';
import { alpha } from '@grafana/data/src/themes/colorManipulator';
@ -83,13 +83,19 @@ export const XYChartTooltip = ({ dataIdxs, seriesIdx, data, allSeries, dismiss,
});
}
const links = getDataLinks(yField, rowIndex);
let footer: ReactNode;
if (isPinned && seriesIdx != null) {
const links = getDataLinks(yField, rowIndex);
footer = <VizTooltipFooter dataLinks={links} />;
}
return (
<div className={styles.wrapper}>
<VizTooltipHeader item={headerItem} isPinned={isPinned} />
<VizTooltipContent items={contentItems} isPinned={isPinned} />
{(links.length > 0 || isPinned) && <VizTooltipFooter dataLinks={links} />}
{footer}
</div>
);
};