solo_panel_ctrl.ts 1.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354
  1. import angular from 'angular';
  2. export class SoloPanelCtrl {
  3. /** @ngInject */
  4. constructor($scope, $routeParams, $location, dashboardLoaderSrv, contextSrv, backendSrv) {
  5. var panelId;
  6. $scope.init = function() {
  7. contextSrv.sidemenu = false;
  8. var params = $location.search();
  9. panelId = parseInt(params.panelId);
  10. $scope.onAppEvent('dashboard-initialized', $scope.initPanelScope);
  11. // if no uid, redirect to new route based on slug
  12. if (!($routeParams.type === 'script' || $routeParams.type === 'snapshot') && !$routeParams.uid) {
  13. backendSrv.get(`/api/dashboards/db/${$routeParams.slug}`).then(res => {
  14. if (res) {
  15. $location.path(res.meta.url.replace('/d/', '/d-solo/'));
  16. }
  17. });
  18. return;
  19. }
  20. dashboardLoaderSrv.loadDashboard($routeParams.type, $routeParams.slug, $routeParams.uid).then(function(result) {
  21. result.meta.soloMode = true;
  22. $scope.initDashboard(result, $scope);
  23. });
  24. };
  25. $scope.initPanelScope = function() {
  26. let panelInfo = $scope.dashboard.getPanelInfoById(panelId);
  27. // fake row ctrl scope
  28. $scope.ctrl = {
  29. dashboard: $scope.dashboard,
  30. };
  31. $scope.panel = panelInfo.panel;
  32. $scope.panel.soloMode = true;
  33. $scope.$index = 0;
  34. if (!$scope.panel) {
  35. $scope.appEvent('alert-error', ['Panel not found', '']);
  36. return;
  37. }
  38. };
  39. $scope.init();
  40. }
  41. }
  42. angular.module('grafana.routes').controller('SoloPanelCtrl', SoloPanelCtrl);