react panels minor progress

pull/13578/head
Torkel Ödegaard 7 years ago
parent aa5c9f199a
commit db52ea66bd
  1. 4
      public/app/core/directives/dash_class.ts
  2. 10
      public/app/features/dashboard/dashgrid/DashboardGrid.tsx
  3. 1
      public/app/features/dashboard/dashgrid/DashboardPanel.tsx
  4. 3
      public/app/features/dashboard/dashgrid/PanelChrome.tsx
  5. 2
      public/app/features/dashboard/dashgrid/PanelEditor.tsx
  6. 3
      public/app/features/dashboard/panel_model.ts
  7. 1
      public/app/features/dashboard/view_state_srv.ts
  8. 19
      public/app/features/panel/panel_ctrl.ts
  9. 4
      public/app/features/panel/panel_directive.ts
  10. 2
      public/app/plugins/panel/graph/graph.ts
  11. 2
      public/app/plugins/panel/text2/module.tsx
  12. 1
      public/sass/components/_dashboard_grid.scss

@ -5,9 +5,7 @@ coreModule.directive('dashClass', function($timeout) {
return { return {
link: function($scope, elem) { link: function($scope, elem) {
$scope.ctrl.dashboard.events.on('view-mode-changed', function(panel) { $scope.ctrl.dashboard.events.on('view-mode-changed', function(panel) {
$timeout(() => { elem.toggleClass('panel-in-fullscreen', panel.fullscreen === true);
elem.toggleClass('panel-in-fullscreen', panel.fullscreen === true);
});
}); });
elem.toggleClass('panel-in-fullscreen', $scope.ctrl.dashboard.meta.fullscreen === true); elem.toggleClass('panel-in-fullscreen', $scope.ctrl.dashboard.meta.fullscreen === true);

@ -85,7 +85,7 @@ export class DashboardGrid extends React.Component<DashboardGridProps, any> {
this.dashboard.on('panel-added', this.triggerForceUpdate.bind(this)); this.dashboard.on('panel-added', this.triggerForceUpdate.bind(this));
this.dashboard.on('panel-removed', this.triggerForceUpdate.bind(this)); this.dashboard.on('panel-removed', this.triggerForceUpdate.bind(this));
this.dashboard.on('repeats-processed', this.triggerForceUpdate.bind(this)); this.dashboard.on('repeats-processed', this.triggerForceUpdate.bind(this));
this.dashboard.on('view-mode-changed', this.triggerForceUpdate.bind(this)); this.dashboard.on('view-mode-changed', this.onViewModeChanged.bind(this));
this.dashboard.on('row-collapsed', this.triggerForceUpdate.bind(this)); this.dashboard.on('row-collapsed', this.triggerForceUpdate.bind(this));
this.dashboard.on('row-expanded', this.triggerForceUpdate.bind(this)); this.dashboard.on('row-expanded', this.triggerForceUpdate.bind(this));
} }
@ -142,6 +142,10 @@ export class DashboardGrid extends React.Component<DashboardGridProps, any> {
} }
} }
onViewModeChanged(payload) {
this.setState({ animated: payload.fullscreen });
}
updateGridPos(item, layout) { updateGridPos(item, layout) {
this.panelMap[item.i].updateGridPos(item); this.panelMap[item.i].updateGridPos(item);
@ -165,9 +169,7 @@ export class DashboardGrid extends React.Component<DashboardGridProps, any> {
componentDidMount() { componentDidMount() {
setTimeout(() => { setTimeout(() => {
this.setState(() => { this.setState({ animated: true });
return { animated: true };
});
}); });
} }

@ -75,7 +75,6 @@ export class DashboardPanel extends React.Component<DashboardPanelProps, any> {
} }
if (!this.pluginExports) { if (!this.pluginExports) {
console.log('render null');
return null; return null;
} }

@ -23,7 +23,7 @@ export class PanelChrome extends React.Component<PanelChromeProps, any> {
} }
triggerForceUpdate() { triggerForceUpdate() {
this.forceUpdate(); // this.forceUpdate();
} }
render() { render() {
@ -32,6 +32,7 @@ export class PanelChrome extends React.Component<PanelChromeProps, any> {
}; };
let PanelComponent = this.props.component; let PanelComponent = this.props.component;
console.log('PanelChrome render');
return ( return (
<div className="panel-height-helper"> <div className="panel-height-helper">

@ -12,8 +12,6 @@ export class PanelEditor extends React.Component<PanelEditorProps, any> {
return ( return (
<div className="tabbed-view tabbed-view--panel-edit"> <div className="tabbed-view tabbed-view--panel-edit">
<div className="tabbed-view-header"> <div className="tabbed-view-header">
<h3 className="tabbed-view-panel-title">{this.props.panel.type}</h3>
<ul className="gf-tabs"> <ul className="gf-tabs">
<li className="gf-tabs-item"> <li className="gf-tabs-item">
<a className="gf-tabs-link active">Queries</a> <a className="gf-tabs-link active">Queries</a>

@ -13,7 +13,6 @@ const notPersistedProperties: { [str: string]: boolean } = {
events: true, events: true,
fullscreen: true, fullscreen: true,
isEditing: true, isEditing: true,
editModeInitiated: true,
}; };
export class PanelModel { export class PanelModel {
@ -37,7 +36,6 @@ export class PanelModel {
fullscreen: boolean; fullscreen: boolean;
isEditing: boolean; isEditing: boolean;
events: Emitter; events: Emitter;
editModeInitiated: boolean;
constructor(model) { constructor(model) {
this.events = new Emitter(); this.events = new Emitter();
@ -84,7 +82,6 @@ export class PanelModel {
this.gridPos.h = newPos.h; this.gridPos.h = newPos.h;
if (sizeChanged) { if (sizeChanged) {
console.log('PanelModel sizeChanged event and render events fired');
this.events.emit('panel-size-changed'); this.events.emit('panel-size-changed');
} }
} }

@ -174,7 +174,6 @@ export class DashboardViewState {
// Firefox doesn't return scrollTop position properly if 'dash-scroll' is emitted after setViewMode() // Firefox doesn't return scrollTop position properly if 'dash-scroll' is emitted after setViewMode()
this.$scope.appEvent('dash-scroll', { animate: false, pos: 0 }); this.$scope.appEvent('dash-scroll', { animate: false, pos: 0 });
console.log('viewstatesrv.setViewMode');
this.dashboard.setViewMode(panel, true, isEditing); this.dashboard.setViewMode(panel, true, isEditing);
} }
} }

@ -24,10 +24,8 @@ export class PanelCtrl {
$injector: any; $injector: any;
$location: any; $location: any;
$timeout: any; $timeout: any;
fullscreen: boolean;
inspector: any; inspector: any;
editModeInitiated: boolean; editModeInitiated: boolean;
editMode: any;
height: any; height: any;
containerHeight: any; containerHeight: any;
events: Emitter; events: Emitter;
@ -130,6 +128,7 @@ export class PanelCtrl {
return { templateUrl: directiveFn }; return { templateUrl: directiveFn };
}; };
} }
if (index) { if (index) {
this.editorTabs.splice(index, 0, editorTab); this.editorTabs.splice(index, 0, editorTab);
} else { } else {
@ -190,7 +189,7 @@ export class PanelCtrl {
getExtendedMenu() { getExtendedMenu() {
let menu = []; let menu = [];
if (!this.fullscreen && this.dashboard.meta.canEdit) { if (!this.panel.fullscreen && this.dashboard.meta.canEdit) {
menu.push({ menu.push({
text: 'Duplicate', text: 'Duplicate',
click: 'ctrl.duplicate()', click: 'ctrl.duplicate()',
@ -220,15 +219,15 @@ export class PanelCtrl {
} }
otherPanelInFullscreenMode() { otherPanelInFullscreenMode() {
return this.dashboard.meta.fullscreen && !this.fullscreen; return this.dashboard.meta.fullscreen && !this.panel.fullscreen;
} }
calculatePanelHeight() { calculatePanelHeight() {
if (this.fullscreen) { if (this.panel.fullscreen) {
var docHeight = $(window).height(); var docHeight = $(window).height();
var editHeight = Math.floor(docHeight * 0.4); var editHeight = Math.floor(docHeight * 0.4);
var fullscreenHeight = Math.floor(docHeight * 0.8); var fullscreenHeight = Math.floor(docHeight * 0.8);
this.containerHeight = this.editMode ? editHeight : fullscreenHeight; this.containerHeight = this.panel.isEditing ? editHeight : fullscreenHeight;
} else { } else {
this.containerHeight = this.panel.gridPos.h * GRID_CELL_HEIGHT + (this.panel.gridPos.h - 1) * GRID_CELL_VMARGIN; this.containerHeight = this.panel.gridPos.h * GRID_CELL_HEIGHT + (this.panel.gridPos.h - 1) * GRID_CELL_VMARGIN;
} }
@ -237,6 +236,11 @@ export class PanelCtrl {
this.containerHeight = $(window).height(); this.containerHeight = $(window).height();
} }
// hacky solution
if (this.panel.isEditing && !this.editModeInitiated) {
this.initEditMode();
}
this.height = this.containerHeight - (PANEL_BORDER + TITLE_HEIGHT); this.height = this.containerHeight - (PANEL_BORDER + TITLE_HEIGHT);
} }
@ -247,9 +251,6 @@ export class PanelCtrl {
duplicate() { duplicate() {
this.dashboard.duplicatePanel(this.panel); this.dashboard.duplicatePanel(this.panel);
this.$timeout(() => {
this.$scope.$root.$broadcast('render');
});
} }
removePanel() { removePanel() {

@ -7,7 +7,7 @@ var module = angular.module('grafana.directives');
var panelTemplate = ` var panelTemplate = `
<div class="panel-container"> <div class="panel-container">
<div class="panel-header" ng-class="{'grid-drag-handle': !ctrl.fullscreen}"> <div class="panel-header" ng-class="{'grid-drag-handle': !ctrl.panel.fullscreen}">
<span class="panel-info-corner"> <span class="panel-info-corner">
<i class="fa"></i> <i class="fa"></i>
<span class="panel-info-corner-inner"></span> <span class="panel-info-corner-inner"></span>
@ -25,7 +25,7 @@ var panelTemplate = `
</div> </div>
</div> </div>
<div class="panel-full-edit" ng-if="ctrl.editMode"> <div class="panel-full-edit" ng-if="ctrl.panel.isEditing">
<div class="tabbed-view tabbed-view--panel-edit"> <div class="tabbed-view tabbed-view--panel-edit">
<div class="tabbed-view-header"> <div class="tabbed-view-header">
<h3 class="tabbed-view-panel-title"> <h3 class="tabbed-view-panel-title">

@ -197,6 +197,8 @@ function graphDirective(timeSrv, popoverSrv, contextSrv) {
// Function for rendering panel // Function for rendering panel
function render_panel() { function render_panel() {
panelWidth = elem.width(); panelWidth = elem.width();
console.log('panelWidth', panelWidth);
if (shouldAbortRender()) { if (shouldAbortRender()) {
return; return;
} }

@ -6,7 +6,7 @@ export class ReactTestPanel extends React.Component<any, any> {
} }
render() { render() {
return <h2>Panel content</h2>; return <h2>I am a react panel, haha!</h2>;
} }
} }

@ -20,7 +20,6 @@
} }
// Disable grid interaction indicators in fullscreen panels // Disable grid interaction indicators in fullscreen panels
.panel-header:hover { .panel-header:hover {
background-color: inherit; background-color: inherit;
} }

Loading…
Cancel
Save