Commit be67801e by Johannes Schill

react-panel: Trigger panel refresh when opening inspector. Add loading-message

parent 62423799
import React, { PureComponent } from 'react';
import React, { SFC, PureComponent } from 'react';
import DataSourceOption from './DataSourceOption';
import { getAngularLoader, AngularComponent } from 'app/core/services/AngularLoader';
import { EditorTabBody } from './EditorTabBody';
......@@ -27,12 +27,23 @@ interface Help {
helpHtml: any;
}
interface DsQuery {
isLoading: boolean;
response: {};
}
interface State {
currentDatasource: DataSourceSelectItem;
help: Help;
dsQuery: {};
dsQuery: DsQuery;
}
interface LoadingPlaceholderProps {
text: string;
}
const LoadingPlaceholder: SFC<LoadingPlaceholderProps> = ({ text }) => <h2>{text}</h2>;
export class QueriesTab extends PureComponent<Props, State> {
element: any;
component: AngularComponent;
......@@ -44,14 +55,18 @@ export class QueriesTab extends PureComponent<Props, State> {
const { panel } = props;
this.state = {
dsQuery: {},
currentDatasource: this.datasources.find(datasource => datasource.value === panel.datasource),
help: {
isLoading: false,
helpHtml: null,
},
dsQuery: {
isLoading: false,
response: {},
},
};
appEvents.on('ds-request-response', this.onDataSourceResponse);
panel.events.on('refresh', this.onPanelRefresh);
}
componentDidMount() {
......@@ -74,13 +89,25 @@ export class QueriesTab extends PureComponent<Props, State> {
}
componentWillUnmount() {
const { panel } = this.props;
appEvents.off('ds-request-response', this.onDataSourceResponse);
panel.events.off('refresh', this.onPanelRefresh);
if (this.component) {
this.component.destroy();
}
}
onPanelRefresh = () => {
this.setState(prevState => ({
...prevState,
dsQuery: {
isLoading: true,
response: {},
},
}));
};
onDataSourceResponse = (response: any = {}) => {
// ignore if closed
// if (!this.isOpen) {
......@@ -94,6 +121,7 @@ export class QueriesTab extends PureComponent<Props, State> {
// this.isLoading = false;
// data = _.cloneDeep(data);
response = { ...response }; // clone
if (response.headers) {
delete response.headers;
......@@ -132,7 +160,10 @@ export class QueriesTab extends PureComponent<Props, State> {
}
this.setState(prevState => ({
...prevState,
dsQuery: response,
dsQuery: {
isLoading: false,
response: response,
},
}));
};
......@@ -260,14 +291,24 @@ export class QueriesTab extends PureComponent<Props, State> {
});
};
loadQueryInspector = () => {
const { panel } = this.props;
panel.refresh();
};
renderQueryInspector = () => {
const { dsQuery } = this.state;
return <JSONFormatter json={dsQuery} />;
const { response, isLoading } = this.state.dsQuery;
return isLoading ? <LoadingPlaceholder text="Loading query inspector..." /> : <JSONFormatter json={response} />;
};
renderHelp = () => {
const { helpHtml, isLoading } = this.state.help;
return isLoading ? <LoadingPlaceholder text="Loading help..." /> : helpHtml;
};
render() {
const { currentDatasource } = this.state;
const { helpHtml } = this.state.help;
const { hasQueryHelp, queryOptions } = currentDatasource.meta;
const hasQueryOptions = !!queryOptions;
const dsInformation = {
......@@ -286,6 +327,7 @@ export class QueriesTab extends PureComponent<Props, State> {
const queryInspector = {
title: 'Query Inspector',
onClick: this.loadQueryInspector,
render: this.renderQueryInspector,
};
......@@ -294,7 +336,7 @@ export class QueriesTab extends PureComponent<Props, State> {
icon: 'fa fa-question',
disabled: !hasQueryHelp,
onClick: this.loadHelp,
render: () => helpHtml,
render: this.renderHelp,
};
const options = {
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment