Connection.js 2.0 KB

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