ProjectVersionForm.js 2.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768
  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. const ProjectVersionFields = props => (
  12. <fieldset>
  13. {props.title && <legend>{props.title}</legend>}
  14. <label htmlFor='name'>Project name</label>
  15. <input type='text' name='name' id='name' placeholder='Project version name' value={props.state.name} onChange={props.onChange} />
  16. <label htmlFor='date'>Date</label>
  17. <input type='date' name='date' id='date' placeholder='Project date' value={props.state.date} onChange={props.onChange} />
  18. <label htmlFor='change'>Comments</label>
  19. <input type='text' name='change' id='change' placeholder='Project change' value={props.state.change} onChange={props.onChange} /><button onClick={props.addChange}>Add</button>
  20. </fieldset>
  21. )
  22. class ProjectVersionForm extends React.Component {
  23. state = {
  24. id: null,
  25. name: '',
  26. date: '',
  27. change: '',
  28. changes: [],
  29. project: null,
  30. ...this.props.projectVersion
  31. }
  32. toState = event => {
  33. this.setState({ [event.target.name]: event.target.value })
  34. }
  35. addComment = event => {
  36. }
  37. render() {
  38. return (
  39. <Mutation mutation={CREATE_PROJECT_VERSION} variables={this.state}>
  40. {(createProjectVersion, { data, error, loading }) => (
  41. <form onSubmit={async event => {
  42. event.preventDefault()
  43. const { data } = await createProjectVersion()
  44. this.state.id = data.createProjectVersion.id
  45. }}>
  46. <ProjectVersionFields title="Project Version" state={this.state} addChange={event => {
  47. event.preventDefault()
  48. const newChanges = this.state.changes
  49. newChanges.push(this.state.change)
  50. this.setState({ changes: newChanges, change: '' })
  51. }} onChange={this.toState} />
  52. {this.state.changes.map((change, index) => <p key={index}>{change}</p>)}
  53. {this.props.project || <ProjectSelector name='project' id='project' value={this.state.project} onChange={this.toState} />}
  54. <button type='submit'>Save</button>
  55. </form>
  56. )}
  57. </Mutation>
  58. )
  59. }
  60. }
  61. export default ProjectVersionForm