diff --git a/packages/grafana-data/src/utils/location.test.ts b/packages/grafana-data/src/utils/location.test.ts index 1b78b1b785f..897b4678cbb 100644 --- a/packages/grafana-data/src/utils/location.test.ts +++ b/packages/grafana-data/src/utils/location.test.ts @@ -54,6 +54,10 @@ describe('locationUtil', () => { const urlWithoutMaster = locationUtil.stripBaseFromUrl('/subUrl-backup/thisShouldRemain/'); expect(urlWithoutMaster).toBe('/subUrl-backup/thisShouldRemain/'); }); + test('relative url with same url', () => { + const urlWithoutMaster = locationUtil.stripBaseFromUrl('/subUrl'); + expect(urlWithoutMaster).toBe(''); + }); test('absolute url', () => { const urlWithoutMaster = locationUtil.stripBaseFromUrl('http://www.domain.com:9877/subUrl/thisShouldRemain/'); expect(urlWithoutMaster).toBe('/thisShouldRemain/'); @@ -74,6 +78,10 @@ describe('locationUtil', () => { ); expect(urlWithoutMaster).toBe('http://www.domain.com:9877/subUrl-backup/thisShouldRemain/'); }); + test('absolute url with same url', () => { + const urlWithoutMaster = locationUtil.stripBaseFromUrl('http://www.domain.com:9877/subUrl'); + expect(urlWithoutMaster).toBe(''); + }); }); describe('when appSubUrl not configured', () => { diff --git a/packages/grafana-data/src/utils/location.ts b/packages/grafana-data/src/utils/location.ts index c843cd3f6d8..7897e860c52 100644 --- a/packages/grafana-data/src/utils/location.ts +++ b/packages/grafana-data/src/utils/location.ts @@ -43,9 +43,10 @@ const stripBaseFromUrl = (urlOrPath: string): string => { segmentToStrip = `${window.location.origin}${appSubUrl}`; } - // Check if the segment is followed by a '/' so it does not replace incorrect similarly named segments + // Check if the segment is either exactly the same as the url + // or followed by a '/' so it does not replace incorrect similarly named segments // i.e. /grafana should not replace /grafanadashboards - return urlOrPath.length > 0 && urlOrPath.indexOf(segmentToStrip + '/') === 0 + return urlOrPath.length > 0 && (urlOrPath.indexOf(segmentToStrip + '/') === 0 || urlOrPath === segmentToStrip) ? urlOrPath.slice(segmentToStrip.length - stripExtraChars) : urlOrPath; };