Remove raw query tab from app
parent
d27d239ded
commit
4b65f9097f
|
@ -28,7 +28,6 @@ const Explorer = React.createClass({
|
|||
applyFuncsToField: func.isRequired,
|
||||
deletePanel: func.isRequired,
|
||||
}).isRequired,
|
||||
onClickStatement: func.isRequired,
|
||||
},
|
||||
|
||||
getInitialState() {
|
||||
|
@ -120,7 +119,6 @@ const Explorer = React.createClass({
|
|||
timeRange={timeRange}
|
||||
query={this.getActiveQuery()}
|
||||
actions={actions}
|
||||
onClickStatement={this.props.onClickStatement}
|
||||
onAddQuery={this.handleAddQuery}
|
||||
/>
|
||||
);
|
||||
|
|
|
@ -14,7 +14,6 @@ const ExplorerList = React.createClass({
|
|||
panels: shape({}).isRequired,
|
||||
queryConfigs: PropTypes.shape({}),
|
||||
actions: shape({}).isRequired,
|
||||
onClickStatement: func.isRequired,
|
||||
setActivePanel: func.isRequired,
|
||||
activePanelID: string,
|
||||
},
|
||||
|
@ -54,7 +53,6 @@ const ExplorerList = React.createClass({
|
|||
onToggleExplorer={this.handleToggleExplorer}
|
||||
isExpanded={panelID === activePanelID}
|
||||
actions={allActions}
|
||||
onClickStatement={this.props.onClickStatement}
|
||||
/>
|
||||
);
|
||||
})}
|
||||
|
|
|
@ -1,14 +1,9 @@
|
|||
import React, {PropTypes} from 'react';
|
||||
import {connect} from 'react-redux';
|
||||
import classNames from 'classnames';
|
||||
import {bindActionCreators} from 'redux';
|
||||
import ExplorerList from './ExplorerList';
|
||||
import RawQueryList from './RawQueryList';
|
||||
import * as viewActions from '../actions/view';
|
||||
|
||||
const EXPLORER = 'explorer';
|
||||
const RAW_QUERY = 'raw query';
|
||||
|
||||
const {string, func} = PropTypes;
|
||||
const PanelBuilder = React.createClass({
|
||||
propTypes: {
|
||||
|
@ -31,72 +26,26 @@ const PanelBuilder = React.createClass({
|
|||
activePanelID: string,
|
||||
},
|
||||
|
||||
getInitialState() {
|
||||
return {
|
||||
activeTab: EXPLORER,
|
||||
};
|
||||
},
|
||||
|
||||
handleClickTab(nextTab) {
|
||||
this.setState({
|
||||
activeTab: nextTab,
|
||||
activeQueryID: null,
|
||||
});
|
||||
},
|
||||
|
||||
handleCreateExploer() {
|
||||
this.props.actions.createPanel();
|
||||
},
|
||||
|
||||
handleClickStatement(queryID) {
|
||||
this.setState({
|
||||
activeTab: RAW_QUERY,
|
||||
activeQueryID: queryID,
|
||||
});
|
||||
},
|
||||
|
||||
render() {
|
||||
const {width} = this.props;
|
||||
const {activeTab} = this.state;
|
||||
const {width, actions} = this.props;
|
||||
|
||||
return (
|
||||
<div className="panel-builder" style={{width}}>
|
||||
<div className="panel-builder__tabs">
|
||||
<div className={classNames("panel-builder__tab", {active: activeTab === EXPLORER})} onClick={() => this.handleClickTab(EXPLORER)}>Explorer</div>
|
||||
<div className={classNames("panel-builder__tab", {active: activeTab === RAW_QUERY})} onClick={() => this.handleClickTab(RAW_QUERY)}>Raw Query</div>
|
||||
</div>
|
||||
<div className="panel-builder__tab-content">
|
||||
<div className="panel-builder__item btn btn-block btn-primary" onClick={this.handleCreateExploer}><span className="icon graphline"></span> Create Graph</div>
|
||||
{this.renderTab()}
|
||||
<ExplorerList
|
||||
actions={actions}
|
||||
setActivePanel={this.props.setActivePanel}
|
||||
activePanelID={this.props.activePanelID}
|
||||
/>
|
||||
</div>
|
||||
</div>
|
||||
);
|
||||
},
|
||||
|
||||
renderTab() {
|
||||
const {actions} = this.props;
|
||||
const {activeTab} = this.state;
|
||||
|
||||
if (activeTab === EXPLORER) {
|
||||
return (
|
||||
<ExplorerList
|
||||
actions={actions}
|
||||
onClickStatement={this.handleClickStatement}
|
||||
setActivePanel={this.props.setActivePanel}
|
||||
activePanelID={this.props.activePanelID}
|
||||
/>
|
||||
);
|
||||
}
|
||||
|
||||
return (
|
||||
<RawQueryList
|
||||
actions={actions}
|
||||
activeQueryID={this.state.activeQueryID}
|
||||
activePanelID={this.props.activePanelID}
|
||||
setActivePanel={this.props.setActivePanel}
|
||||
/>
|
||||
);
|
||||
},
|
||||
});
|
||||
|
||||
function mapStateToProps() {
|
||||
|
|
|
@ -33,7 +33,6 @@ const QueryEditor = React.createClass({
|
|||
groupByTime: func.isRequired,
|
||||
toggleTagAcceptance: func.isRequired,
|
||||
}).isRequired,
|
||||
onClickStatement: func.isRequired,
|
||||
},
|
||||
|
||||
getInitialState() {
|
||||
|
@ -99,24 +98,13 @@ const QueryEditor = React.createClass({
|
|||
return (
|
||||
<div className="query-editor">
|
||||
<div className="query-editor__code">
|
||||
{this.renderQueryWarning()}
|
||||
<pre className={classNames("", {"rq-mode": query.rawText})} onClick={() => this.props.onClickStatement(query.id)}><code>{statement}</code></pre>
|
||||
<pre className={classNames("", {"rq-mode": query.rawText})}><code>{statement}</code></pre>
|
||||
</div>
|
||||
{this.renderEditor()}
|
||||
</div>
|
||||
);
|
||||
},
|
||||
|
||||
renderQueryWarning() {
|
||||
if (!this.props.query.rawText) {
|
||||
return (
|
||||
<div className="query-editor__warning">
|
||||
<div className="btn btn-sm btn-warning" onClick={() => this.props.onClickStatement(this.props.query.id)}>Convert to Raw Query</div>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
},
|
||||
|
||||
renderEditor() {
|
||||
if (this.props.query.rawText) {
|
||||
return (
|
||||
|
|
|
@ -1,123 +0,0 @@
|
|||
import React, {PropTypes} from 'react';
|
||||
import classNames from 'classnames';
|
||||
import selectStatement from '../utils/influxql/select';
|
||||
import RenamePanelModal from './RenamePanelModal';
|
||||
|
||||
const ENTER = 13;
|
||||
|
||||
const RawQueryGroup = React.createClass({
|
||||
propTypes: {
|
||||
queryConfigs: PropTypes.arrayOf(PropTypes.shape({})),
|
||||
panel: PropTypes.shape({
|
||||
id: PropTypes.string.isRequired,
|
||||
}),
|
||||
timeRange: PropTypes.shape({
|
||||
upper: PropTypes.string,
|
||||
lower: PropTypes.string,
|
||||
}).isRequired,
|
||||
actions: PropTypes.shape({
|
||||
updateRawQuery: PropTypes.func.isRequired,
|
||||
renamePanel: PropTypes.func.isRequired,
|
||||
deletePanel: PropTypes.func.isRequired,
|
||||
}),
|
||||
activeQueryID: PropTypes.string,
|
||||
setActivePanel: PropTypes.func,
|
||||
},
|
||||
|
||||
handleRename(newName) {
|
||||
this.props.actions.renamePanel(this.props.panel.id, newName);
|
||||
},
|
||||
|
||||
handleDeletePanel(e) {
|
||||
e.stopPropagation();
|
||||
this.props.actions.deletePanel(this.props.panel.id);
|
||||
},
|
||||
|
||||
openRenamePanelModal(e) {
|
||||
e.stopPropagation();
|
||||
$(`#renamePanelModal-${this.props.panel.id}`).modal('show'); // eslint-disable-line no-undef
|
||||
},
|
||||
|
||||
handleSetActivePanel() {
|
||||
this.props.setActivePanel(this.props.panel.id);
|
||||
},
|
||||
|
||||
render() {
|
||||
const {queryConfigs, timeRange, panel} = this.props;
|
||||
|
||||
return (
|
||||
<div className="raw-editor__panel">
|
||||
<RenamePanelModal panel={panel} onConfirm={this.handleRename} />
|
||||
<div className="raw-editor__header" onClick={this.handleSelectExplorer}>
|
||||
<div className="raw-editor__header-name">
|
||||
{panel.name || "Panel"}
|
||||
</div>
|
||||
<div className="raw-editor__header-actions">
|
||||
<div title="Rename" className="raw-editor__header-rename" onClick={this.openRenamePanelModal}><span className="icon pencil"></span></div>
|
||||
<div title="Delete" className="raw-editor__header-delete" onClick={this.handleDeletePanel}><span className="icon trash"></span></div>
|
||||
</div>
|
||||
</div>
|
||||
{queryConfigs.map((q) => {
|
||||
return <RawQueryEditor onFocus={this.handleSetActivePanel} shouldFocus={this.props.activeQueryID === q.id} key={q.id} query={q} defaultValue={q.rawText || selectStatement(timeRange, q) || ''} updateRawQuery={this.props.actions.updateRawQuery} />;
|
||||
})}
|
||||
</div>
|
||||
);
|
||||
},
|
||||
});
|
||||
|
||||
const RawQueryEditor = React.createClass({
|
||||
propTypes: {
|
||||
query: PropTypes.shape({
|
||||
rawText: PropTypes.string,
|
||||
id: PropTypes.string.isRequired,
|
||||
}).isRequired,
|
||||
updateRawQuery: PropTypes.func.isRequired,
|
||||
defaultValue: PropTypes.string.isRequired,
|
||||
shouldFocus: PropTypes.bool.isRequired,
|
||||
onFocus: PropTypes.func.isRequired,
|
||||
},
|
||||
|
||||
componentDidMount() {
|
||||
if (this.props.shouldFocus) {
|
||||
this.editor.scrollIntoView();
|
||||
this.editor.focus();
|
||||
}
|
||||
},
|
||||
|
||||
handleKeyDown(e) {
|
||||
e.stopPropagation();
|
||||
if (e.keyCode !== ENTER) {
|
||||
return;
|
||||
}
|
||||
e.preventDefault();
|
||||
this.editor.blur();
|
||||
},
|
||||
|
||||
updateRawQuery() {
|
||||
const text = this.editor.value;
|
||||
this.props.updateRawQuery(this.props.query.id, text);
|
||||
},
|
||||
|
||||
render() {
|
||||
const {defaultValue, query} = this.props;
|
||||
|
||||
return (
|
||||
<div className={classNames("raw-query-editor-wrapper", {"rq-mode": query.rawText})}>
|
||||
<textarea
|
||||
className="raw-query-editor"
|
||||
onKeyDown={this.handleKeyDown}
|
||||
onBlur={this.updateRawQuery}
|
||||
onFocus={this.props.onFocus}
|
||||
ref={(editor) => this.editor = editor}
|
||||
defaultValue={defaultValue}
|
||||
placeholder="Blank query"
|
||||
/>
|
||||
{/* <button title="Delete this query?" className="raw-query-editor-delete">
|
||||
<span className="icon remove"></span>
|
||||
</button> */}
|
||||
</div>
|
||||
);
|
||||
},
|
||||
});
|
||||
|
||||
export default RawQueryGroup;
|
|
@ -1,51 +0,0 @@
|
|||
import React, {PropTypes} from 'react';
|
||||
import {connect} from 'react-redux';
|
||||
import RawQueryGroup from './RawQueryGroup';
|
||||
|
||||
const {func, string, shape} = PropTypes;
|
||||
const RawQueryList = React.createClass({
|
||||
propTypes: {
|
||||
timeRange: shape({
|
||||
upper: string,
|
||||
lower: string,
|
||||
}).isRequired,
|
||||
panels: shape({}).isRequired,
|
||||
queryConfigs: shape({}).isRequired,
|
||||
actions: shape({
|
||||
updateRawQuery: func.isRequired,
|
||||
renamePanel: func.isRequired,
|
||||
}).isRequired,
|
||||
activeQueryID: PropTypes.string,
|
||||
setActivePanel: PropTypes.func,
|
||||
},
|
||||
|
||||
render() {
|
||||
const {panels, timeRange, queryConfigs, actions, setActivePanel, activeQueryID} = this.props;
|
||||
|
||||
return (
|
||||
<div>
|
||||
<div className="alert alert-rawquery">
|
||||
<span className="icon alert-triangle"></span>
|
||||
Editing a query turns it into a <strong>Raw Query</strong> which is no longer editable from <strong>Explorer</strong> mode. This action cannot be undone.
|
||||
</div>
|
||||
{Object.keys(panels).map((panelID) => {
|
||||
const panel = panels[panelID];
|
||||
const queries = panel.queryIds.map((configId) => queryConfigs[configId]);
|
||||
return (
|
||||
<RawQueryGroup setActivePanel={setActivePanel} activeQueryID={activeQueryID} key={panelID} panel={panel} queryConfigs={queries} timeRange={timeRange} actions={actions} />
|
||||
);
|
||||
})}
|
||||
</div>
|
||||
);
|
||||
},
|
||||
});
|
||||
|
||||
function mapStateToProps(state) {
|
||||
return {
|
||||
timeRange: state.timeRange,
|
||||
panels: state.panels,
|
||||
queryConfigs: state.queryConfigs,
|
||||
};
|
||||
}
|
||||
|
||||
export default connect(mapStateToProps)(RawQueryList);
|
Loading…
Reference in New Issue