grafana/public/app/features/plugins/plugin_page_ctrl.ts

63 lines
1.8 KiB
TypeScript
Raw Normal View History

import angular from 'angular';
import { find } from 'lodash';
2016-02-09 04:17:49 -06:00
import { getPluginSettings } from './PluginSettingsCache';
import { PluginMeta, AppEvents } from '@grafana/data';
import { NavModelSrv } from 'app/core/core';
import { GrafanaRootScope } from 'app/routes/GrafanaCtrl';
import { promiseToDigest } from '../../core/utils/promiseToDigest';
2016-02-09 04:17:49 -06:00
export class AppPageCtrl {
page: any;
pluginId: any;
2016-02-09 04:17:49 -06:00
appModel: any;
2017-08-15 13:24:16 -05:00
navModel: any;
2016-02-09 04:17:49 -06:00
/** @ngInject */
constructor(private $routeParams: any, private $rootScope: GrafanaRootScope, private navModelSrv: NavModelSrv) {
this.pluginId = $routeParams.pluginId;
promiseToDigest($rootScope)(
Promise.resolve(getPluginSettings(this.pluginId))
.then((settings) => {
this.initPage(settings);
})
.catch((err) => {
this.$rootScope.appEvent(AppEvents.alertError, ['Unknown Plugin']);
this.navModel = this.navModelSrv.getNotFoundNav();
})
);
}
initPage(app: PluginMeta) {
this.appModel = app;
this.page = find(app.includes, { slug: this.$routeParams.slug });
if (!this.page) {
this.$rootScope.appEvent(AppEvents.alertError, ['App Page Not Found']);
this.navModel = this.navModelSrv.getNotFoundNav();
return;
}
if (app.type !== 'app' || !app.enabled) {
this.$rootScope.appEvent(AppEvents.alertError, ['Application Not Enabled']);
2017-08-15 13:24:16 -05:00
this.navModel = this.navModelSrv.getNotFoundNav();
return;
}
const pluginNav = this.navModelSrv.getNav('plugin-page-' + app.id);
this.navModel = {
main: {
img: app.info.logos.large,
subTitle: app.name,
2017-12-20 05:33:33 -06:00
url: '',
text: this.page.name,
breadcrumbs: [{ title: app.name, url: pluginNav.main.url }],
2017-12-20 05:33:33 -06:00
},
};
}
2016-02-09 04:17:49 -06:00
}
2017-12-20 05:33:33 -06:00
angular.module('grafana.controllers').controller('AppPageCtrl', AppPageCtrl);