InstrumentCommand.js 3.1 KB

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