Преглед изворни кода

render after leaving fullscreen

Torkel Ödegaard пре 6 година
родитељ
комит
d29e1278dc
1 измењених фајлова са 34 додато и 16 уклоњено
  1. 34 16
      public/app/features/dashboard/containers/DashboardPage.tsx

+ 34 - 16
public/app/features/dashboard/containers/DashboardPage.tsx

@@ -102,28 +102,46 @@ export class DashboardPage extends PureComponent<Props, State> {
 
     // Sync url state with model
     if (urlFullscreen !== dashboard.meta.fullscreen || urlEdit !== dashboard.meta.isEditing) {
-      // entering fullscreen/edit mode
       if (urlPanelId) {
-        const panel = dashboard.getPanelById(parseInt(urlPanelId, 10));
-
-        if (panel) {
-          dashboard.setViewMode(panel, urlFullscreen, urlEdit);
-          this.setState({ isEditing: urlEdit, isFullscreen: urlFullscreen, fullscreenPanel: panel });
-          this.setPanelFullscreenClass(urlFullscreen);
-        } else {
-          this.handleFullscreenPanelNotFound(urlPanelId);
-        }
+        this.onEnterFullscreen();
       } else {
-        // handle leaving fullscreen mode
-        if (this.state.fullscreenPanel) {
-          dashboard.setViewMode(this.state.fullscreenPanel, urlFullscreen, urlEdit);
-        }
-        this.setState({ isEditing: false, isFullscreen: false, fullscreenPanel: null });
-        this.setPanelFullscreenClass(false);
+        this.onLeaveFullscreen();
       }
     }
   }
 
+  onEnterFullscreen() {
+    const { dashboard, urlEdit, urlFullscreen, urlPanelId } = this.props;
+
+    const panel = dashboard.getPanelById(parseInt(urlPanelId, 10));
+
+    if (panel) {
+      dashboard.setViewMode(panel, urlFullscreen, urlEdit);
+      this.setState({
+        isEditing: urlEdit,
+        isFullscreen: urlFullscreen,
+        fullscreenPanel: panel,
+      });
+      this.setPanelFullscreenClass(urlFullscreen);
+    } else {
+      this.handleFullscreenPanelNotFound(urlPanelId);
+    }
+  }
+
+  onLeaveFullscreen() {
+    const { dashboard } = this.props;
+
+    if (this.state.fullscreenPanel) {
+      dashboard.setViewMode(this.state.fullscreenPanel, false, false);
+    }
+
+    this.setState({ isEditing: false, isFullscreen: false, fullscreenPanel: null }, () => {
+      dashboard.render();
+    });
+
+    this.setPanelFullscreenClass(false);
+  }
+
   handleFullscreenPanelNotFound(urlPanelId: string) {
     // Panel not found
     this.props.notifyApp(createErrorNotification(`Panel with id ${urlPanelId} not found`));