89 lines
1.9 KiB
JavaScript
89 lines
1.9 KiB
JavaScript
|
const React = require('react');
|
||
|
const Styled = require('styled-components');
|
||
|
const TopologyGraph = require('./graph/topology-graph');
|
||
|
const data = require('./data');
|
||
|
|
||
|
const {
|
||
|
default: styled
|
||
|
} = Styled;
|
||
|
|
||
|
const StyledForm = styled.form`
|
||
|
margin: 20px;
|
||
|
`;
|
||
|
|
||
|
class Topology extends React.Component {
|
||
|
|
||
|
constructor(props) {
|
||
|
super(props)
|
||
|
//nasty
|
||
|
this.state = {
|
||
|
data: {
|
||
|
nodes: [
|
||
|
...data.nodes
|
||
|
],
|
||
|
links: [
|
||
|
...data.links
|
||
|
]
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
render() {
|
||
|
const {
|
||
|
} = this.props;
|
||
|
|
||
|
const nodeSize = {
|
||
|
width: 180,
|
||
|
height: 156
|
||
|
};
|
||
|
|
||
|
const onSubmit = (evt) => {
|
||
|
evt.preventDefault();
|
||
|
console.log('submit ', evt.target.service.value);
|
||
|
console.log('submit ', evt.target.link.value);
|
||
|
const service = evt.target.service.value;
|
||
|
const target = evt.target.link.value;
|
||
|
const data = this.state.data;
|
||
|
|
||
|
this.setState({
|
||
|
data: {
|
||
|
nodes: [
|
||
|
...data.nodes,
|
||
|
{
|
||
|
id: evt.target.service.value
|
||
|
}
|
||
|
],
|
||
|
links: [
|
||
|
...data.links,
|
||
|
{
|
||
|
source: service,
|
||
|
target: target
|
||
|
}
|
||
|
]
|
||
|
}
|
||
|
})
|
||
|
};
|
||
|
|
||
|
const options = data.nodes.map((n, index) => (
|
||
|
<option key={index} value={n.id}>{n.id}</option>
|
||
|
));
|
||
|
|
||
|
return (
|
||
|
<div>
|
||
|
<StyledForm onSubmit={onSubmit}>
|
||
|
<label>New service name</label>
|
||
|
<input name='service' type='text' placeholder='Service name' />
|
||
|
<label>Service to link to</label>
|
||
|
<select name='link'>
|
||
|
{ options }
|
||
|
</select>
|
||
|
<input type='submit' value='submit' />
|
||
|
</StyledForm>
|
||
|
<TopologyGraph data={this.state.data} nodeSize={nodeSize} />
|
||
|
</div>
|
||
|
);
|
||
|
}
|
||
|
};
|
||
|
|
||
|
module.exports = Topology;
|