view and route

This commit is contained in:
Peter Holmberg
2018-10-02 16:18:42 +02:00
parent c3f87b56ee
commit 7a39e5554b
2 changed files with 115 additions and 3 deletions

View File

@@ -0,0 +1,110 @@
import React, { PureComponent } from 'react';
import { connect } from 'react-redux';
import { hot } from 'react-hot-loader';
import Select from 'react-select';
import PageHeader from 'app/core/components/PageHeader/PageHeader';
import { NavModel } from 'app/types';
import { getNavModel } from 'app/core/selectors/navModel';
export interface Props {
navModel: NavModel;
}
export interface State {
name: string;
type: string;
dataSourceOptions: Array<{ value: string; label: string }>;
}
class NewDataSourcePage extends PureComponent<Props, State> {
state = {
name: '',
type: '',
dataSourceOptions: [
{ value: 'prometheus', label: 'Prometheus' },
{ value: 'graphite', label: 'Graphite' },
{ value: 'mysql', label: 'MySql' },
{ value: 'influxdb', label: 'InfluxDB' },
],
};
onChangeName = event => {
this.setState({
name: event.target.value,
});
};
onTypeChanged = type => {
this.setState({
type: type,
});
};
submitForm = () => {
if (!this.isFieldsEmpty()) {
// post
}
};
isFieldsEmpty = () => {
const { name, type } = this.state;
if (name === '' && type === '') {
return true;
} else if (name !== '' && type === '') {
return true;
} else {
return name === '' && type !== '';
}
};
render() {
const { navModel } = this.props;
const { dataSourceOptions, name, type } = this.state;
return (
<div>
<PageHeader model={navModel} />
<div className="page-container page-body">
<h3 className="page-sub-heading">New Data source</h3>
<form onSubmit={this.submitForm}>
<div className="gf-form max-width-30">
<span className="gf-form-label width-7">Name</span>
<input
className="gf-form-input max-width-23"
type="text"
value={name}
onChange={this.onChangeName}
placeholder="Name"
/>
</div>
<div className="gf-form max-width-30">
<span className="gf-form-label width-7">Type</span>
<Select
options={dataSourceOptions}
value={type}
onChange={this.onTypeChanged}
autoSize={true}
className="width-23"
/>
</div>
<div className="gf-form-button-row">
<button type="submit" className="btn btn-success" disabled={this.isFieldsEmpty()}>
Create
</button>
<button className="btn btn-danger">Cancel</button>
</div>
</form>
</div>
</div>
);
}
}
function mapStateToProps(state) {
return {
navModel: getNavModel(state.navIndex, 'datasources'),
};
}
export default hot(module)(connect(mapStateToProps)(NewDataSourcePage));