Links: Fix opening links from different orgs on the same tab (#55837)

* Skip intercepting links of different orgs

* Check if orgId is present on query params

* Use locationSearchToObject instead of parseKeyValue

* Revert locationSearchToObject to parseKeyValue
This commit is contained in:
Guilherme Caulada
2022-09-27 16:50:05 -03:00
committed by GitHub
parent 80daf05843
commit 2a12644778
@@ -1,5 +1,6 @@
import { locationUtil } from '@grafana/data';
import { locationUtil, urlUtil } from '@grafana/data';
import { locationService, navigationLogger } from '@grafana/runtime';
import { config } from 'app/core/config';
export function interceptLinkClicks(e: MouseEvent) {
const anchor = getParentAnchor(e.target as HTMLElement);
@@ -14,6 +15,8 @@ export function interceptLinkClicks(e: MouseEvent) {
const target = anchor.getAttribute('target');
if (href && !target) {
const params = urlUtil.parseKeyValue(href.split('?')[1]);
const orgIdChange = params.orgId && Number(params.orgId) !== config.bootData.user.orgId;
navigationLogger('utils', false, 'intercepting link click', e);
e.preventDefault();
@@ -22,9 +25,9 @@ export function interceptLinkClicks(e: MouseEvent) {
// Ensure old angular urls with no starting '/' are handled the same as before
// Make sure external links are handled correctly
// That is they where seen as being absolute from app root
if (href[0] !== '/') {
if (href[0] !== '/' || orgIdChange) {
// if still contains protocol or is a mailto link, it's an absolute link to another domain or web application
if (href.indexOf('://') > 0 || href.indexOf('mailto:') === 0) {
if (href.indexOf('://') > 0 || href.indexOf('mailto:') === 0 || orgIdChange) {
window.location.href = href;
return;
} else if (href.indexOf('#') === 0) {