solo_panel_ctrl.ts 1.7 KB

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