import angular from 'angular'; import _ from 'lodash'; import { getPluginSettings } from './PluginSettingsCache'; import { PluginMeta } from '@grafana/data'; import { NavModelSrv } from 'app/core/core'; import { GrafanaRootScope } from 'app/routes/GrafanaCtrl'; import { AppEvents } from '@grafana/data'; import { promiseToDigest } from '../../core/utils/promiseToDigest'; export class AppPageCtrl { page: any; pluginId: any; appModel: any; navModel: any; /** @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']); 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, url: '', text: this.page.name, breadcrumbs: [{ title: app.name, url: pluginNav.main.url }], }, }; } } angular.module('grafana.controllers').controller('AppPageCtrl', AppPageCtrl);