Commit e569c8ea by Johannes Schill Committed by Torkel Ödegaard

fix: Navigation on small screens when Grafana is installed in a sub directory (#10252) (#10261)

* ux: Add missing icon for login with grafana-com, fixes #10238

* fix: This fix potentially solves installations in sub directories, #10252
parent 22643eb1
import coreModule from 'app/core/core_module'; import coreModule from 'app/core/core_module';
import config from 'app/core/config';
import appEvents from 'app/core/app_events'; import appEvents from 'app/core/app_events';
// This service is for registering global events. // This service is for registering global events.
// Good for communication react > angular and vice verse // Good for communication react > angular and vice verse
export class GlobalEventSrv { export class GlobalEventSrv {
private appSubUrl;
/** @ngInject */ /** @ngInject */
constructor(private $location, private $timeout) { constructor(private $location, private $timeout) {
this.appSubUrl = config.appSubUrl;
}
// Angular's $location does not like <base href...> and absolute urls
stripBaseFromUrl (url = '') {
const appSubUrl = this.appSubUrl;
const stripExtraChars = appSubUrl.endsWith('/') ? 1 : 0;
const urlWithoutBase = url.length > 0 && url.indexOf(appSubUrl) === 0 ?
url.slice(appSubUrl.length - stripExtraChars)
: url;
return urlWithoutBase;
} }
init() { init() {
appEvents.on('location-change', payload => { appEvents.on('location-change', payload => {
this.$timeout(() => { // A hack to use timeout when we're changing things (in this case the url) from outside of Angular. const urlWithoutBase = this.stripBaseFromUrl(payload.href);
this.$location.path(payload.href);
}); this.$timeout(() => { // A hack to use timeout when we're changing things (in this case the url) from outside of Angular.
this.$location.url(urlWithoutBase);
});
}); });
} }
} }
......
import { GlobalEventSrv } from 'app/core/services/global_event_srv';
import { beforeEach } from 'test/lib/common';
jest.mock('app/core/config', () => {
return {
appSubUrl: '/subUrl'
};
});
describe('GlobalEventSrv', () => {
let searchSrv;
beforeEach(() => {
searchSrv = new GlobalEventSrv(null, null);
});
describe('With /subUrl as appSubUrl', () => {
it('/subUrl should be stripped', () => {
const urlWithoutMaster = searchSrv.stripBaseFromUrl('/subUrl/grafana/');
expect(urlWithoutMaster).toBe('/grafana/');
});
});
});
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment