InstrumentParameter.js 3.1 KB

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