InstrumentCommand.js 3.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283
  1. import gql from 'graphql-tag'
  2. import { Query, Mutation } from 'react-apollo'
  3. const CREATE_INSTRUMENT_SUBSYSTEM = gql`
  4. mutation CREATE_INSTRUMENT_SUBSYSTEM($name: String!, $description: String!, $interfaces: [String]!) {
  5. createInstrument(name: $name, description: $description, interfaces: $interfaces) {
  6. id
  7. }
  8. }
  9. `
  10. class InstrumentCommand extends React.Component {
  11. state = {
  12. id: null,
  13. tag: '',
  14. name: '',
  15. description: '',
  16. instrument: null,
  17. readString: '',
  18. writeString: '',
  19. parameters: [],
  20. ...this.props.instrumentCommand
  21. }
  22. toState = event => {
  23. this.setState({ [event.target.name]: event.target.value })
  24. }
  25. addComment = event => {
  26. event.preventDefault()
  27. const newState = { ...this.state }
  28. newState.changes.push(this.state.change)
  29. newState.change = ''
  30. this.setState(newState)
  31. }
  32. render() {
  33. return (
  34. <Mutation mutation={CREATE_PROJECT_VERSION} variables={this.state}>
  35. {(createProjectVersion, { data, error, loading }) => (
  36. <form onSubmit={async event => {
  37. event.preventDefault()
  38. const { data } = await createProjectVersion()
  39. this.state.id = data.createProjectVersion.id
  40. }}>
  41. {!this.props.title && <h1>Project Version</h1>}
  42. <fieldset id='project-generic'>
  43. <label htmlFor='name'>Project name</label>
  44. <input type='text' name='name' id='name' placeholder='Project version name' value={this.state.name} onChange={this.toState} />
  45. <label htmlFor='date'>Date</label>
  46. <input type='date' name='date' id='date' placeholder='Project date' value={this.state.date} onChange={this.toState} />
  47. <label htmlFor='change'>Comments</label>
  48. <input type='text' name='change' id='change' placeholder='Project change' value={this.state.change} onChange={this.toState} /><button onClick={this.addComment}>Add</button>
  49. {this.state.changes.map((change, index) => <p key={index}>{change}</p>)}
  50. {this.props.project || (
  51. <Query query={QUERY_PROJECTS}>
  52. {({ data, error, loading }) => {
  53. if (loading) return <p>Loading projects...</p>
  54. if (error) return <p>Error: {error.message}</p>
  55. if (!data || !data.projects.length) return <p>No projects found.</p>
  56. if (!this.state.project) this.setState({ project: data.projects[0].id })
  57. return (
  58. <label htmlFor="version">
  59. <select name="version" id="version">onChange={this.toState}>
  60. {data.projects.map(project =>
  61. <option key={project.id} value={project.id}>{project.name}</option>)
  62. }
  63. </select>
  64. </label>
  65. )
  66. }}
  67. </Query>
  68. )}
  69. </fieldset>
  70. <button type='submit'>Save</button>
  71. </form>
  72. )}
  73. </Mutation>
  74. )
  75. }
  76. }
  77. export default InstrumentCommand