TraceView: Handle External correlation links correctly (#103594)

* TraceView: Handle External correlation links correctly

* Improve handling URLs
This commit is contained in:
Piotr Jamróz 2025-04-10 21:07:49 +02:00 committed by GitHub
parent acd843303e
commit 3551e6074c
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
1 changed files with 18 additions and 1 deletions

View File

@ -49,6 +49,8 @@ const LINKS_ORDER = [
*/ */
const MAX_LINKS = 3; const MAX_LINKS = 3;
const ABSOLUTE_LINK_PATTERN = /^https?:\/\//i;
export const getSpanDetailLinkButtons = (props: Props) => { export const getSpanDetailLinkButtons = (props: Props) => {
const { span, createSpanLink, traceToProfilesOptions, timeRange, datasourceType, app } = props; const { span, createSpanLink, traceToProfilesOptions, timeRange, datasourceType, app } = props;
@ -212,7 +214,22 @@ const createLinkModel = (
if (link.onClick) { if (link.onClick) {
link.onClick?.(event); link.onClick?.(event);
} else { } else {
locationService.push(link.href); // TODO: Replace with https://github.com/grafana/grafana/issues/103593
// We need to handle absolute and relative URLs correctly because when
// there are multiple links we group them into a dropdown and not use
// the grafana/ui DataLinkButton component which handles relative and
// absolute URLs nicely. A nice solution would be to have a separate
// component that handles this for us and not pass the onClick in the
// SpanLinkModel when link.href is defined (removing the need of having
// if (link.onClick) in here.
// if it's an absolute URL - open it in a new window
if (!ABSOLUTE_LINK_PATTERN.test(link.href)) {
// handle relative URLs by changing current URL:
locationService.push(link.href);
} else {
window.open(link.href, '_blank', 'noopener,noreferrer');
}
} }
}, },
}, },