| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144 |
- import config from 'app/core/config';
- import coreModule from 'app/core/core_module';
- import {PanelContainer} from './dashgrid/PanelContainer';
- import {DashboardModel} from './model';
- export class DashboardCtrl implements PanelContainer {
- dashboard: DashboardModel;
- dashboardViewState: any;
- loadedFallbackDashboard: boolean;
- editTab: number;
- /** @ngInject */
- constructor(
- private $scope,
- private $rootScope,
- private keybindingSrv,
- private timeSrv,
- private variableSrv,
- private alertingSrv,
- private dashboardSrv,
- private unsavedChangesSrv,
- private dynamicDashboardSrv,
- private dashboardViewStateSrv,
- private panelLoader) {
- // temp hack due to way dashboards are loaded
- // can't use controllerAs on route yet
- $scope.ctrl = this;
- // TODO: break out settings view to separate view & controller
- this.editTab = 0;
- // funcs called from React component bindings and needs this binding
- this.getPanelContainer = this.getPanelContainer.bind(this);
- }
- setupDashboard(data) {
- try {
- this.setupDashboardInternal(data);
- } catch (err) {
- this.onInitFailed(err, 'Dashboard init failed', true);
- }
- }
- setupDashboardInternal(data) {
- const dashboard = this.dashboardSrv.create(data.dashboard, data.meta);
- this.dashboardSrv.setCurrent(dashboard);
- // init services
- this.timeSrv.init(dashboard);
- this.alertingSrv.init(dashboard, data.alerts);
- // template values service needs to initialize completely before
- // the rest of the dashboard can load
- this.variableSrv.init(dashboard)
- // template values failes are non fatal
- .catch(this.onInitFailed.bind(this, 'Templating init failed', false))
- // continue
- .finally(() => {
- this.dashboard = dashboard;
- this.dynamicDashboardSrv.init(dashboard);
- this.dynamicDashboardSrv.process();
- this.unsavedChangesSrv.init(dashboard, this.$scope);
- // TODO refactor ViewStateSrv
- this.$scope.dashboard = dashboard;
- this.dashboardViewState = this.dashboardViewStateSrv.create(this.$scope);
- this.keybindingSrv.setupDashboardBindings(this.$scope, dashboard);
- this.dashboard.updateSubmenuVisibility();
- this.setWindowTitleAndTheme();
- this.$scope.appEvent("dashboard-initialized", dashboard);
- })
- .catch(this.onInitFailed.bind(this, 'Dashboard init failed', true));
- }
- onInitFailed(msg, fatal, err) {
- console.log(msg, err);
- if (err.data && err.data.message) {
- err.message = err.data.message;
- } else if (!err.message) {
- err = {message: err.toString()};
- }
- this.$scope.appEvent("alert-error", [msg, err.message]);
- // protect against recursive fallbacks
- if (fatal && !this.loadedFallbackDashboard) {
- this.loadedFallbackDashboard = true;
- this.setupDashboard({dashboard: {title: 'Dashboard Init failed'}});
- }
- }
- templateVariableUpdated() {
- this.dynamicDashboardSrv.process();
- }
- setWindowTitleAndTheme() {
- window.document.title = config.window_title_prefix + this.dashboard.title;
- }
- showJsonEditor(evt, options) {
- var editScope = this.$rootScope.$new();
- editScope.object = options.object;
- editScope.updateHandler = options.updateHandler;
- this.$scope.appEvent('show-dash-editor', { src: 'public/app/partials/edit_json.html', scope: editScope });
- }
- getDashboard() {
- return this.dashboard;
- }
- getPanelLoader() {
- return this.panelLoader;
- }
- timezoneChanged() {
- this.$rootScope.$broadcast("refresh");
- }
- onFolderChange(folder) {
- this.dashboard.folderId = folder.id;
- this.dashboard.meta.folderId = folder.id;
- this.dashboard.meta.folderTitle= folder.title;
- }
- getPanelContainer() {
- console.log('DashboardCtrl:getPanelContainer()');
- return this;
- }
- init(dashboard) {
- this.$scope.onAppEvent('show-json-editor', this.$scope.showJsonEditor);
- this.$scope.onAppEvent('template-variable-value-updated', this.$scope.templateVariableUpdated);
- this.setupDashboard(dashboard);
- }
- }
- coreModule.controller('DashboardCtrl', DashboardCtrl);
|