mirror of
https://github.com/grafana/grafana.git
synced 2025-02-25 18:55:37 -06:00
New solo panel route working in all scenarios I can test
This commit is contained in:
@@ -1,6 +1,5 @@
|
||||
import './panel_header';
|
||||
import './panel_directive';
|
||||
import './solo_panel_ctrl';
|
||||
import './query_ctrl';
|
||||
import './panel_editor_tab';
|
||||
import './query_editor_row';
|
||||
|
||||
@@ -16,7 +16,6 @@ class MetricsPanelCtrl extends PanelCtrl {
|
||||
datasourceSrv: any;
|
||||
timeSrv: any;
|
||||
templateSrv: any;
|
||||
timing: any;
|
||||
range: any;
|
||||
interval: any;
|
||||
intervalMs: any;
|
||||
@@ -81,7 +80,6 @@ class MetricsPanelCtrl extends PanelCtrl {
|
||||
this.loading = true;
|
||||
|
||||
// load datasource service
|
||||
this.setTimeQueryStart();
|
||||
this.datasourceSrv
|
||||
.get(this.panel.datasource)
|
||||
.then(this.updateTimeRange.bind(this))
|
||||
@@ -112,14 +110,6 @@ class MetricsPanelCtrl extends PanelCtrl {
|
||||
});
|
||||
}
|
||||
|
||||
setTimeQueryStart() {
|
||||
this.timing.queryStart = new Date().getTime();
|
||||
}
|
||||
|
||||
setTimeQueryEnd() {
|
||||
this.timing.queryEnd = new Date().getTime();
|
||||
}
|
||||
|
||||
updateTimeRange(datasource?) {
|
||||
this.datasource = datasource || this.datasource;
|
||||
this.range = this.timeSrv.timeRange();
|
||||
@@ -181,7 +171,6 @@ class MetricsPanelCtrl extends PanelCtrl {
|
||||
}
|
||||
|
||||
handleQueryResult(result) {
|
||||
this.setTimeQueryEnd();
|
||||
this.loading = false;
|
||||
|
||||
// check for if data source returns subject
|
||||
|
||||
@@ -1,5 +1,4 @@
|
||||
import _ from 'lodash';
|
||||
import $ from 'jquery';
|
||||
import Remarkable from 'remarkable';
|
||||
|
||||
import config from 'app/core/config';
|
||||
@@ -13,7 +12,7 @@ import {
|
||||
sharePanel as sharePanelUtil,
|
||||
} from 'app/features/dashboard/utils/panel';
|
||||
|
||||
import { GRID_CELL_HEIGHT, GRID_CELL_VMARGIN, GRID_COLUMN_COUNT, PANEL_HEADER_HEIGHT, PANEL_BORDER } from 'app/core/constants';
|
||||
import { GRID_COLUMN_COUNT, PANEL_HEADER_HEIGHT, PANEL_BORDER } from 'app/core/constants';
|
||||
|
||||
export class PanelCtrl {
|
||||
panel: any;
|
||||
@@ -31,8 +30,8 @@ export class PanelCtrl {
|
||||
height: any;
|
||||
containerHeight: any;
|
||||
events: Emitter;
|
||||
timing: any;
|
||||
loading: boolean;
|
||||
timing: any;
|
||||
maxPanelsPerRowOptions: number[];
|
||||
|
||||
constructor($scope, $injector) {
|
||||
@@ -42,7 +41,7 @@ export class PanelCtrl {
|
||||
this.$timeout = $injector.get('$timeout');
|
||||
this.editorTabs = [];
|
||||
this.events = this.panel.events;
|
||||
this.timing = {};
|
||||
this.timing = {}; // not used but here to not break plugins
|
||||
|
||||
const plugin = config.panels[this.panel.type];
|
||||
if (plugin) {
|
||||
@@ -59,7 +58,7 @@ export class PanelCtrl {
|
||||
}
|
||||
|
||||
renderingCompleted() {
|
||||
profiler.renderingCompleted(this.panel.id, this.timing);
|
||||
profiler.renderingCompleted(this.panel.id);
|
||||
}
|
||||
|
||||
refresh() {
|
||||
@@ -200,24 +199,12 @@ export class PanelCtrl {
|
||||
return this.dashboard.meta.fullscreen && !this.panel.fullscreen;
|
||||
}
|
||||
|
||||
calculatePanelHeight() {
|
||||
if (this.panel.isEditing) {
|
||||
this.containerHeight = $('.panel-wrapper--edit').height();
|
||||
} else if (this.panel.fullscreen) {
|
||||
this.containerHeight = $('.panel-wrapper--view').height();
|
||||
} else {
|
||||
this.containerHeight = this.panel.gridPos.h * GRID_CELL_HEIGHT + (this.panel.gridPos.h - 1) * GRID_CELL_VMARGIN;
|
||||
}
|
||||
|
||||
if (this.panel.soloMode) {
|
||||
this.containerHeight = $(window).height();
|
||||
}
|
||||
|
||||
calculatePanelHeight(containerHeight) {
|
||||
this.containerHeight = containerHeight;
|
||||
this.height = this.containerHeight - (PANEL_BORDER + PANEL_HEADER_HEIGHT);
|
||||
}
|
||||
|
||||
render(payload?) {
|
||||
this.timing.renderStart = new Date().getTime();
|
||||
this.events.emit('render', payload);
|
||||
}
|
||||
|
||||
|
||||
@@ -101,7 +101,7 @@ module.directive('grafanaPanel', ($rootScope, $document, $timeout) => {
|
||||
});
|
||||
|
||||
ctrl.events.on('panel-size-changed', () => {
|
||||
ctrl.calculatePanelHeight();
|
||||
ctrl.calculatePanelHeight(panelContainer[0].offsetHeight);
|
||||
$timeout(() => {
|
||||
resizeScrollableContent();
|
||||
ctrl.render();
|
||||
@@ -112,19 +112,21 @@ module.directive('grafanaPanel', ($rootScope, $document, $timeout) => {
|
||||
// first wait one pass for dashboard fullscreen view mode to take effect (classses being applied)
|
||||
setTimeout(() => {
|
||||
// then recalc style
|
||||
ctrl.calculatePanelHeight();
|
||||
ctrl.calculatePanelHeight(panelContainer[0].offsetHeight);
|
||||
// then wait another cycle (this might not be needed)
|
||||
$timeout(() => {
|
||||
ctrl.render();
|
||||
resizeScrollableContent();
|
||||
});
|
||||
});
|
||||
}, 10);
|
||||
});
|
||||
|
||||
// set initial height
|
||||
ctrl.calculatePanelHeight();
|
||||
|
||||
ctrl.events.on('render', () => {
|
||||
// set initial height
|
||||
if (!ctrl.height) {
|
||||
ctrl.calculatePanelHeight(panelContainer[0].offsetHeight);
|
||||
}
|
||||
|
||||
if (transparentLastState !== ctrl.panel.transparent) {
|
||||
panelContainer.toggleClass('panel-transparent', ctrl.panel.transparent === true);
|
||||
transparentLastState = ctrl.panel.transparent;
|
||||
|
||||
@@ -1,4 +0,0 @@
|
||||
<div class="panel-solo" ng-if="panel">
|
||||
<plugin-component type="panel">
|
||||
</plugin-component>
|
||||
</div>
|
||||
@@ -1,58 +0,0 @@
|
||||
import angular from 'angular';
|
||||
import locationUtil from 'app/core/utils/location_util';
|
||||
import appEvents from 'app/core/app_events';
|
||||
|
||||
export class SoloPanelCtrl {
|
||||
/** @ngInject */
|
||||
constructor($scope, $routeParams, $location, dashboardLoaderSrv, contextSrv, backendSrv) {
|
||||
let panelId;
|
||||
|
||||
$scope.init = () => {
|
||||
contextSrv.sidemenu = false;
|
||||
appEvents.emit('toggle-sidemenu-hidden');
|
||||
|
||||
const params = $location.search();
|
||||
panelId = parseInt(params.panelId, 10);
|
||||
|
||||
appEvents.on('dashboard-initialized', $scope.initPanelScope);
|
||||
|
||||
// if no uid, redirect to new route based on slug
|
||||
if (!($routeParams.type === 'script' || $routeParams.type === 'snapshot') && !$routeParams.uid) {
|
||||
backendSrv.getDashboardBySlug($routeParams.slug).then(res => {
|
||||
if (res) {
|
||||
const url = locationUtil.stripBaseFromUrl(res.meta.url.replace('/d/', '/d-solo/'));
|
||||
$location.path(url).replace();
|
||||
}
|
||||
});
|
||||
return;
|
||||
}
|
||||
|
||||
dashboardLoaderSrv.loadDashboard($routeParams.type, $routeParams.slug, $routeParams.uid).then(result => {
|
||||
result.meta.soloMode = true;
|
||||
$scope.initDashboard(result, $scope);
|
||||
});
|
||||
};
|
||||
|
||||
$scope.initPanelScope = () => {
|
||||
const panelInfo = $scope.dashboard.getPanelInfoById(panelId);
|
||||
|
||||
// fake row ctrl scope
|
||||
$scope.ctrl = {
|
||||
dashboard: $scope.dashboard,
|
||||
};
|
||||
|
||||
$scope.panel = panelInfo.panel;
|
||||
$scope.panel.soloMode = true;
|
||||
$scope.$index = 0;
|
||||
|
||||
if (!$scope.panel) {
|
||||
$scope.appEvent('alert-error', ['Panel not found', '']);
|
||||
return;
|
||||
}
|
||||
};
|
||||
|
||||
$scope.init();
|
||||
}
|
||||
}
|
||||
|
||||
angular.module('grafana.routes').controller('SoloPanelCtrl', SoloPanelCtrl);
|
||||
Reference in New Issue
Block a user