|
@@ -1,10 +1,18 @@
|
|
|
import React, { createRef, PureComponent } from 'react';
|
|
import React, { createRef, PureComponent } from 'react';
|
|
|
import { connect } from 'react-redux';
|
|
import { connect } from 'react-redux';
|
|
|
-import { DataSource, Plugin } from 'app/types';
|
|
|
|
|
|
|
+import { DataSource, NavModel, Plugin } from 'app/types';
|
|
|
|
|
+import PageHeader from '../../core/components/PageHeader/PageHeader';
|
|
|
|
|
+import { importPluginModule } from '../plugins/plugin_loader';
|
|
|
|
|
+import { loadDataSource } from './state/actions';
|
|
|
|
|
+import { getNavModel } from '../../core/selectors/navModel';
|
|
|
|
|
+import { getRouteParamsId } from '../../core/selectors/location';
|
|
|
|
|
|
|
|
export interface Props {
|
|
export interface Props {
|
|
|
|
|
+ navModel: NavModel;
|
|
|
dataSource: DataSource;
|
|
dataSource: DataSource;
|
|
|
dataSourceMeta: Plugin;
|
|
dataSourceMeta: Plugin;
|
|
|
|
|
+ pageId: number;
|
|
|
|
|
+ loadDataSource: typeof loadDataSource;
|
|
|
}
|
|
}
|
|
|
interface State {
|
|
interface State {
|
|
|
name: string;
|
|
name: string;
|
|
@@ -24,10 +32,13 @@ export class DataSourceSettings extends PureComponent<Props, State> {
|
|
|
showNamePopover: false,
|
|
showNamePopover: false,
|
|
|
};
|
|
};
|
|
|
|
|
|
|
|
- componentDidMount() {
|
|
|
|
|
- // importPluginModule(this.props.dataSourceMeta.module).then(pluginExports => {
|
|
|
|
|
- // console.log(pluginExports);
|
|
|
|
|
- // });
|
|
|
|
|
|
|
+ async componentDidMount() {
|
|
|
|
|
+ const { loadDataSource, pageId } = this.props;
|
|
|
|
|
+
|
|
|
|
|
+ await loadDataSource(pageId);
|
|
|
|
|
+ importPluginModule(this.props.dataSourceMeta.module).then(pluginExports => {
|
|
|
|
|
+ console.log(pluginExports);
|
|
|
|
|
+ });
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
onNameChange = event => {
|
|
onNameChange = event => {
|
|
@@ -84,75 +95,90 @@ export class DataSourceSettings extends PureComponent<Props, State> {
|
|
|
render() {
|
|
render() {
|
|
|
const { name, showNamePopover } = this.state;
|
|
const { name, showNamePopover } = this.state;
|
|
|
|
|
|
|
|
|
|
+ console.log(this.props);
|
|
|
|
|
+
|
|
|
return (
|
|
return (
|
|
|
<div>
|
|
<div>
|
|
|
- <form onSubmit={this.onSubmit}>
|
|
|
|
|
- <div className="gf-form-group">
|
|
|
|
|
- <div className="gf-form-inline">
|
|
|
|
|
- <div className="gf-form max-width-30">
|
|
|
|
|
- <span className="gf-form-label width-10">Name</span>
|
|
|
|
|
- <input
|
|
|
|
|
- className="gf-form-input max-width-23"
|
|
|
|
|
- type="text"
|
|
|
|
|
- value={name}
|
|
|
|
|
- placeholder="Name"
|
|
|
|
|
- onChange={this.onNameChange}
|
|
|
|
|
- required
|
|
|
|
|
- />
|
|
|
|
|
- <div onClick={this.onTogglePopover}>
|
|
|
|
|
- <i className="fa fa-info-circle" />
|
|
|
|
|
- </div>
|
|
|
|
|
- {showNamePopover && (
|
|
|
|
|
- <div
|
|
|
|
|
- style={{
|
|
|
|
|
- position: 'absolute',
|
|
|
|
|
- left: '450px',
|
|
|
|
|
- top: '-20px',
|
|
|
|
|
- padding: '10px',
|
|
|
|
|
- backgroundColor: 'black',
|
|
|
|
|
- zIndex: 2,
|
|
|
|
|
- width: '300px',
|
|
|
|
|
- border: '1px solid gray',
|
|
|
|
|
- borderRadius: '3px',
|
|
|
|
|
- }}
|
|
|
|
|
- >
|
|
|
|
|
- The name is used when you select the data source in panels. The <em>Default</em> data source is
|
|
|
|
|
- preselected in new panels.
|
|
|
|
|
|
|
+ <PageHeader model={this.props.navModel} />
|
|
|
|
|
+ <div className="page-container page-body">
|
|
|
|
|
+ <div>
|
|
|
|
|
+ <form onSubmit={this.onSubmit}>
|
|
|
|
|
+ <div className="gf-form-group">
|
|
|
|
|
+ <div className="gf-form-inline">
|
|
|
|
|
+ <div className="gf-form max-width-30">
|
|
|
|
|
+ <span className="gf-form-label width-10">Name</span>
|
|
|
|
|
+ <input
|
|
|
|
|
+ className="gf-form-input max-width-23"
|
|
|
|
|
+ type="text"
|
|
|
|
|
+ value={name}
|
|
|
|
|
+ placeholder="Name"
|
|
|
|
|
+ onChange={this.onNameChange}
|
|
|
|
|
+ required
|
|
|
|
|
+ />
|
|
|
|
|
+ <div onClick={this.onTogglePopover}>
|
|
|
|
|
+ <i className="fa fa-info-circle" />
|
|
|
|
|
+ </div>
|
|
|
|
|
+ {showNamePopover && (
|
|
|
|
|
+ <div
|
|
|
|
|
+ style={{
|
|
|
|
|
+ position: 'absolute',
|
|
|
|
|
+ left: '450px',
|
|
|
|
|
+ top: '-20px',
|
|
|
|
|
+ padding: '10px',
|
|
|
|
|
+ backgroundColor: 'black',
|
|
|
|
|
+ zIndex: 2,
|
|
|
|
|
+ width: '300px',
|
|
|
|
|
+ border: '1px solid gray',
|
|
|
|
|
+ borderRadius: '3px',
|
|
|
|
|
+ }}
|
|
|
|
|
+ >
|
|
|
|
|
+ The name is used when you select the data source in panels. The <em>Default</em> data source is
|
|
|
|
|
+ preselected in new panels.
|
|
|
|
|
+ </div>
|
|
|
|
|
+ )}
|
|
|
</div>
|
|
</div>
|
|
|
- )}
|
|
|
|
|
|
|
+ </div>
|
|
|
</div>
|
|
</div>
|
|
|
- </div>
|
|
|
|
|
- </div>
|
|
|
|
|
- {this.shouldRenderInfoBox() && <div className="grafana-info-box">{this.getInfoText()}</div>}
|
|
|
|
|
- {this.isReadyOnly() && (
|
|
|
|
|
- <div className="grafana-info-box span8">
|
|
|
|
|
- This datasource was added by config and cannot be modified using the UI. Please contact your server admin
|
|
|
|
|
- to update this datasource.
|
|
|
|
|
- </div>
|
|
|
|
|
- )}
|
|
|
|
|
- <div ref={this.settingsElement} />
|
|
|
|
|
- <div className="gf-form-button-row">
|
|
|
|
|
- <button type="submit" className="btn btn-success" disabled={this.isReadyOnly()} onClick={this.onSubmit}>
|
|
|
|
|
- Save & Test
|
|
|
|
|
- </button>
|
|
|
|
|
- <button type="submit" className="btn btn-danger" disabled={this.isReadyOnly()} onClick={this.onDelete}>
|
|
|
|
|
- Delete
|
|
|
|
|
- </button>
|
|
|
|
|
- <a className="btn btn-inverse" href="datasources">
|
|
|
|
|
- Back
|
|
|
|
|
- </a>
|
|
|
|
|
|
|
+ {this.shouldRenderInfoBox() && <div className="grafana-info-box">{this.getInfoText()}</div>}
|
|
|
|
|
+ {this.isReadyOnly() && (
|
|
|
|
|
+ <div className="grafana-info-box span8">
|
|
|
|
|
+ This datasource was added by config and cannot be modified using the UI. Please contact your server
|
|
|
|
|
+ admin to update this datasource.
|
|
|
|
|
+ </div>
|
|
|
|
|
+ )}
|
|
|
|
|
+ <div ref={this.settingsElement} />
|
|
|
|
|
+ <div className="gf-form-button-row">
|
|
|
|
|
+ <button type="submit" className="btn btn-success" disabled={this.isReadyOnly()} onClick={this.onSubmit}>
|
|
|
|
|
+ Save & Test
|
|
|
|
|
+ </button>
|
|
|
|
|
+ <button type="submit" className="btn btn-danger" disabled={this.isReadyOnly()} onClick={this.onDelete}>
|
|
|
|
|
+ Delete
|
|
|
|
|
+ </button>
|
|
|
|
|
+ <a className="btn btn-inverse" href="datasources">
|
|
|
|
|
+ Back
|
|
|
|
|
+ </a>
|
|
|
|
|
+ </div>
|
|
|
|
|
+ </form>
|
|
|
</div>
|
|
</div>
|
|
|
- </form>
|
|
|
|
|
|
|
+ </div>
|
|
|
</div>
|
|
</div>
|
|
|
);
|
|
);
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
function mapStateToProps(state) {
|
|
function mapStateToProps(state) {
|
|
|
|
|
+ const pageId = getRouteParamsId(state.location);
|
|
|
|
|
+
|
|
|
return {
|
|
return {
|
|
|
|
|
+ navModel: getNavModel(state.navIndex, `datasource-settings-${pageId}`),
|
|
|
dataSource: state.dataSources.dataSource,
|
|
dataSource: state.dataSources.dataSource,
|
|
|
dataSourceMeta: state.dataSources.dataSourceMeta,
|
|
dataSourceMeta: state.dataSources.dataSourceMeta,
|
|
|
|
|
+ pageId: pageId,
|
|
|
};
|
|
};
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
-export default connect(mapStateToProps)(DataSourceSettings);
|
|
|
|
|
|
|
+const mapDispatchToProps = {
|
|
|
|
|
+ loadDataSource,
|
|
|
|
|
+};
|
|
|
|
|
+
|
|
|
|
|
+export default connect(mapStateToProps, mapDispatchToProps)(DataSourceSettings);
|