123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142 |
- import { Query, Mutation } from 'react-apollo'
- import gql from 'graphql-tag'
- import { QUERY_PROJECTS } from './ProjectList'
- const ADD_CHARACTERIZATION = gql`
- mutation ADD_CHARACTERIZATION($name: String!, $projectVersion: ID!) {
- createCharacterization(name: $name, projectVersion: $projectVersion) {
- id
- name
- projectVersion {
- id
- name
- }
- measurementRuns {
- id
- name
- }
- }
- }
- `
- const QUERY_PROJECT_VERSIONS = gql`
- query QUERY_PROJECT_VERSIONS($projectId: ID!) {
- projectVersions(where: { project: { id: $projectId } }) {
- id
- name
- }
- }
- `
- class CharacterziationForm extends React.Component {
- state = {
- id: null,
- name: '',
- project: null,
- projectVersion: null
- }
- toState = event => {
- this.setState({ [event.target.name]: event.target.value })
- }
- render () {
- return (
- <Mutation mutation={ADD_CHARACTERIZATION} variables={this.state}>
- {(addCharacterization, { data, error, loading }) => (
- <form
- onSubmit={async event => {
- event.preventDefault()
- const { data } = await addCharacterization()
- const { createCharacterization } = data
- this.setState({ id: createCharacterization.id })
- }}
- >
- <fieldset>
- <label htmlFor='name'>Characterization name</label>
- <input
- type='text'
- name='name'
- id='name'
- placeholder='Characterization name'
- value={this.state.name}
- onChange={this.toState}
- />
- <Query query={QUERY_PROJECTS}>
- {({ data, error, loading }) => {
- if (error) { return <p>Error loading project: ${error.message}</p> }
- if (loading) return <p>Loading data...</p>
- if (!data || !data.projects.length) { return <p>No project found.</p> }
- const { projects } = data
- if (!this.state.project && projects.length) { this.setState({ project: projects[0].id }) }
- return (
- <>
- <label htmlFor='project'>Project</label>
- <select
- name='project'
- id='project'
- onChange={this.toState}
- >
- {data.projects.map(project => (
- <option key={project.id} value={project.id}>
- {project.name}
- </option>
- ))}
- </select>
- <Query
- query={QUERY_PROJECT_VERSIONS}
- variables={{ projectId: this.state.project }}
- >
- {({ data, error, loading }) => {
- if (error) {
- return (
- <p>
- Error loading project version: ${error.message}
- </p>
- )
- }
- if (loading) return <p>Loading data...</p>
- if (!data || !data.projectVersions.length) { return <p>No project version found.</p> }
- const { projectVersions } = data
- if (!this.state.projectVersion) {
- this.setState({
- projectVersion: projectVersions[0].id
- })
- }
- return (
- <>
- <label htmlFor='projectVersion' />
- <select
- name='projectVersion'
- id='projectVersion'
- onChange={this.toState}
- >
- {data.projectVersions.map(projectVersion => (
- <option
- key={projectVersion.id}
- value={projectVersion.id}
- >
- {projectVersion.name}
- </option>
- ))}
- </select>
- </>
- )
- }}
- </Query>
- </>
- )
- }}
- </Query>
- <button type='submit'>{data ? 'Save' : 'Add'}</button>
- </fieldset>
- </form>
- )}
- </Mutation>
- )
- }
- }
- export default CharacterziationForm
|