Connection.js 2.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576
  1. import styled from 'styled-components'
  2. import gql from 'graphql-tag'
  3. import { ApolloConsumer } from 'react-apollo'
  4. const StyledConnection = styled.div`
  5. fieldset {
  6. display: grid;
  7. grid-template-columns: 1fr 2fr;
  8. }
  9. textarea {
  10. display: block;
  11. font-family: 'roboto_mono';
  12. }
  13. h1 {
  14. grid-column: span 2;
  15. }
  16. `
  17. const CONNECTION_SEND_QUERY = gql`
  18. query CONNECTION_SEND_QUERY($connectionId: String!, $command: String!) {
  19. connectionCommand(connectionId: $connectionId, command: $command)
  20. }
  21. `
  22. class Connection extends React.Component {
  23. state = {
  24. connectionId: '',
  25. command: '',
  26. result: ''
  27. }
  28. sendCommand = async (event, client) => {
  29. event.preventDefault()
  30. const { data } = await client.query({
  31. query: CONNECTION_SEND_QUERY,
  32. variables: this.state
  33. })
  34. const { connectionCommand } = data
  35. this.setState({ result: connectionCommand })
  36. }
  37. changeInput = event => {
  38. this.setState({ [event.target.id]: event.target.value })
  39. }
  40. render() {
  41. const { connectionId } = this.props
  42. return (
  43. <ApolloConsumer>
  44. {(client) => (
  45. <StyledConnection>
  46. <h1>Connection</h1>
  47. <fieldset>
  48. {!connectionId && (
  49. <>
  50. <label htmlFor='connectionId'>Connection ID</label>
  51. <input type='text' value={this.state.connectionId} onChange={this.changeInput} id='connectionId' placeholder='Connection ID' />
  52. </>
  53. )}
  54. <label htmlFor='command'>Command</label>
  55. <input type='text' value={this.state.command} onChange={this.changeInput} id='command' placeholder='Command' />
  56. </fieldset>
  57. <button type='submit' onClick={event => this.sendCommand(event, client)}>Send</button>
  58. <textarea id='response' value={this.state.result} readOnly={true} />
  59. </StyledConnection>
  60. )}
  61. </ApolloConsumer>
  62. )
  63. }
  64. }
  65. export default Connection