Kaynağa Gözat

Fit panels to screen height

Tobias Skarhed 7 yıl önce
ebeveyn
işleme
818fe09a7f
1 değiştirilmiş dosya ile 29 ekleme ve 1 silme
  1. 29 1
      public/app/features/dashboard/dashboard_ctrl.ts

+ 29 - 1
public/app/features/dashboard/dashboard_ctrl.ts

@@ -4,7 +4,8 @@ import coreModule from 'app/core/core_module';
 import { PanelContainer } from './dashgrid/PanelContainer';
 import { DashboardModel } from './dashboard_model';
 import { PanelModel } from './panel_model';
-
+import { GRID_CELL_HEIGHT } from 'app/core/constants';
+import { PanelLinksEditorCtrl } from '../panellinks/module';
 export class DashboardCtrl implements PanelContainer {
   dashboard: DashboardModel;
   dashboardViewState: any;
@@ -62,6 +63,33 @@ export class DashboardCtrl implements PanelContainer {
       .finally(() => {
         this.dashboard = dashboard;
         this.dashboard.processRepeats();
+        console.log(this.dashboard.panels);
+
+        let maxRows = Math.max(
+          ...this.dashboard.panels.map(panel => {
+            return panel.gridPos.h + panel.gridPos.y;
+          })
+        );
+        console.log('maxRows: ' + maxRows);
+        //Consider navbar and submenu controls
+        let availableHeight = window.innerHeight - 280;
+        let availableRows = Math.floor(availableHeight / GRID_CELL_HEIGHT);
+
+        console.log('availableRows: ' + availableRows);
+        if (maxRows > availableRows) {
+          let scaleFactor = maxRows / availableRows;
+          console.log(scaleFactor);
+
+          this.dashboard.panels.forEach((panel, i) => {
+            console.log(i);
+            console.log(panel.gridPos);
+            panel.gridPos.y = Math.floor(panel.gridPos.y / scaleFactor) || 1;
+            panel.gridPos.h = Math.floor(panel.gridPos.h / scaleFactor) || 1;
+
+            console.log(panel.gridPos);
+          });
+        }
+        console.log(this.dashboard.panels);
 
         this.unsavedChangesSrv.init(dashboard, this.$scope);