grafana/public/app/angular/loadAndInitAngularIfEnabled.ts

93 lines
3.0 KiB
TypeScript

import { deprecationWarning } from '@grafana/data';
import {
config,
setAngularLoader,
setLegacyAngularInjector,
getDataSourceSrv,
getBackendSrv,
getTemplateSrv,
} from '@grafana/runtime';
import { contextSrv } from 'app/core/core';
import { getDashboardSrv } from 'app/features/dashboard/services/DashboardSrv';
import { getTimeSrv } from 'app/features/dashboard/services/TimeSrv';
import { validationSrv } from 'app/features/manage-dashboards/services/ValidationSrv';
import { getLinkSrv } from 'app/features/panel/panellinks/link_srv';
export async function loadAndInitAngularIfEnabled() {
if (config.angularSupportEnabled) {
const { AngularApp } = await import(/* webpackChunkName: "AngularApp" */ './index');
const app = new AngularApp();
app.init();
app.bootstrap();
} else {
// Register a dummy loader that does nothing
setAngularLoader({
load: (elem, scopeProps, template) => {
return {
destroy: () => {},
digest: () => {},
getScope: () => {
return {};
},
};
},
});
// Temporary path to allow access to services exposed directly by the angular injector
setLegacyAngularInjector({
get: (key: string) => {
switch (key) {
case 'backendSrv': {
deprecationWarning('getLegacyAngularInjector', 'backendSrv', 'use getBackendSrv() in @grafana/runtime');
return getBackendSrv();
}
case 'contextSrv': {
deprecationWarning('getLegacyAngularInjector', 'contextSrv');
return contextSrv;
}
case 'dashboardSrv': {
// we do not yet have a public interface for this
deprecationWarning('getLegacyAngularInjector', 'getDashboardSrv');
return getDashboardSrv();
}
case 'datasourceSrv': {
deprecationWarning(
'getLegacyAngularInjector',
'datasourceSrv',
'use getDataSourceSrv() in @grafana/runtime'
);
return getDataSourceSrv();
}
case 'linkSrv': {
// we do not yet have a public interface for this
deprecationWarning('getLegacyAngularInjector', 'linkSrv');
return getLinkSrv();
}
case 'validationSrv': {
// we do not yet have a public interface for this
deprecationWarning('getLegacyAngularInjector', 'validationSrv');
return validationSrv;
}
case 'timeSrv': {
// we do not yet have a public interface for this
deprecationWarning('getLegacyAngularInjector', 'timeSrv');
return getTimeSrv();
}
case 'templateSrv': {
deprecationWarning('getLegacyAngularInjector', 'templateSrv', 'use getTemplateSrv() in @grafana/runtime');
return getTemplateSrv();
}
}
throw 'Angular is disabled. Unable to expose: ' + key;
},
} as angular.auto.IInjectorService);
}
}