Jelajahi Sumber

various fixes to to queries tab (in react mode)

Torkel Ödegaard 7 tahun lalu
induk
melakukan
2fb721d3c6

+ 9 - 7
public/app/features/dashboard/dashgrid/QueriesTab.tsx

@@ -1,14 +1,19 @@
-import React from 'react';
+// Libraries
+import React, { PureComponent } from 'react';
+
+// Services & utils
+import { getAngularLoader, AngularComponent } from 'app/core/services/AngularLoader';
+
+// Types
 import { PanelModel } from '../panel_model';
 import { DashboardModel } from '../dashboard_model';
-import { getAngularLoader, AngularComponent } from 'app/core/services/AngularLoader';
 
 interface Props {
   panel: PanelModel;
   dashboard: DashboardModel;
 }
 
-export class QueriesTab extends React.Component<Props, any> {
+export class QueriesTab extends PureComponent<Props> {
   element: any;
   component: AngularComponent;
 
@@ -29,10 +34,7 @@ export class QueriesTab extends React.Component<Props, any> {
       ctrl: {
         panel: panel,
         dashboard: dashboard,
-        panelCtrl: {
-          panel: panel,
-          dashboard: dashboard,
-        },
+        refresh: () => panel.refresh(),
       },
     };
 

+ 11 - 1
public/app/features/dashboard/panel_model.ts

@@ -16,6 +16,12 @@ const notPersistedProperties: { [str: string]: boolean } = {
   hasRefreshed: true,
 };
 
+const defaults: any = {
+  gridPos: { x: 0, y: 0, h: 3, w: 6 },
+  datasource: null,
+  targets: [{}],
+};
+
 export class PanelModel {
   id: number;
   gridPos: GridPos;
@@ -51,7 +57,7 @@ export class PanelModel {
     }
 
     // defaults
-    this.gridPos = this.gridPos || { x: 0, y: 0, h: 3, w: 6 };
+    _.defaultsDeep(this, _.cloneDeep(defaults));
   }
 
   getSaveModel() {
@@ -61,6 +67,10 @@ export class PanelModel {
         continue;
       }
 
+      if (_.isEqual(this[property], defaults[property])) {
+        continue;
+      }
+
       model[property] = _.cloneDeep(this[property]);
     }
 

+ 1 - 1
public/app/features/dashboard/specs/exporter.test.ts

@@ -240,5 +240,5 @@ stubs['-- Grafana --'] = {
 };
 
 function getStub(arg) {
-  return Promise.resolve(stubs[arg]);
+  return Promise.resolve(stubs[arg || 'gfdb']);
 }

+ 0 - 22
public/app/features/panel/metrics_panel_ctrl.ts

@@ -12,7 +12,6 @@ import { metricsTabDirective } from './metrics_tab';
 class MetricsPanelCtrl extends PanelCtrl {
   scope: any;
   datasource: any;
-  datasourceName: any;
   $q: any;
   $timeout: any;
   contextSrv: any;
@@ -287,27 +286,6 @@ class MetricsPanelCtrl extends PanelCtrl {
     });
   }
 
-  setDatasource(datasource) {
-    // switching to mixed
-    if (datasource.meta.mixed) {
-      _.each(this.panel.targets, target => {
-        target.datasource = this.panel.datasource;
-        if (!target.datasource) {
-          target.datasource = config.defaultDatasource;
-        }
-      });
-    } else if (this.datasource && this.datasource.meta.mixed) {
-      _.each(this.panel.targets, target => {
-        delete target.datasource;
-      });
-    }
-
-    this.panel.datasource = datasource.value;
-    this.datasourceName = datasource.name;
-    this.datasource = null;
-    this.refresh();
-  }
-
   getAdditionalMenuItems() {
     const items = [];
     if (

+ 28 - 2
public/app/features/panel/metrics_tab.ts

@@ -1,6 +1,13 @@
-import { DashboardModel } from '../dashboard/dashboard_model';
+// Libraries
+import _ from 'lodash';
 import Remarkable from 'remarkable';
+
+// Services & utils
 import coreModule from 'app/core/core_module';
+import config from 'app/core/config';
+
+// Types
+import { DashboardModel } from '../dashboard/dashboard_model';
 
 export class MetricsTabCtrl {
   dsName: string;
@@ -70,10 +77,29 @@ export class MetricsTabCtrl {
     }
 
     this.datasourceInstance = option.datasource;
-    this.panelCtrl.setDatasource(option.datasource);
+    this.setDatasource(option.datasource);
     this.updateDatasourceOptions();
   }
 
+  setDatasource(datasource) {
+    // switching to mixed
+    if (datasource.meta.mixed) {
+      _.each(this.panel.targets, target => {
+        target.datasource = this.panel.datasource;
+        if (!target.datasource) {
+          target.datasource = config.defaultDatasource;
+        }
+      });
+    } else if (this.datasourceInstance && this.datasourceInstance.meta.mixed) {
+      _.each(this.panel.targets, target => {
+        delete target.datasource;
+      });
+    }
+
+    this.panel.datasource = datasource.value;
+    this.panel.refresh();
+  }
+
   addMixedQuery(option) {
     if (!option) {
       return;

+ 0 - 1
public/app/plugins/panel/graph/module.ts

@@ -179,7 +179,6 @@ class GraphCtrl extends MetricsPanelCtrl {
   }
 
   onDataReceived(dataList) {
-    console.log(dataList);
     this.dataList = dataList;
     this.seriesList = this.processor.getSeriesList({
       dataList: dataList,