Instrument.js 2.8 KB

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