ProjectVersionForm.js 2.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263
  1. import gql from 'graphql-tag'
  2. import { Query, Mutation } from 'react-apollo'
  3. import { ProjectSelector } from './ProjectForm'
  4. const CREATE_PROJECT_VERSION = gql`
  5. mutation CREATE_PROJECT_VERSION($name: String!, $date: String!, $project: ID!, $changes: [String]!) {
  6. createProjectVersion(name: $name, date: $date, project: $project, changes: $changes) {
  7. id
  8. }
  9. }
  10. `
  11. class ProjectVersionForm extends React.Component {
  12. state = {
  13. id: this.props.project ? this.props.project.id : null,
  14. name: '',
  15. date: '',
  16. change: '',
  17. changes: [],
  18. project: null
  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='date'>Date</label>
  44. <input type='date' name='date' id='date' placeholder='Project date' value={this.state.date} onChange={this.toState} />
  45. <label htmlFor='change'>Comments</label>
  46. <input type='text' name='change' id='change' placeholder='Project change' value={this.state.change} onChange={this.toState} /><button onClick={this.addComment}>Add</button>
  47. {this.state.changes.map((change, index) => <p key={index}>{change}</p>)}
  48. {this.props.project || <ProjectSelector name='project' id='project' value={this.state.project} onChange={this.toState} />}
  49. </fieldset>
  50. <button type='submit'>Save</button>
  51. </form>
  52. )}
  53. </Mutation>
  54. )
  55. }
  56. }
  57. export default ProjectVersionForm