|
@@ -1,6 +1,55 @@
|
|
|
+import gql from 'graphql-tag'
|
|
|
+import { Mutation, Query } from 'react-apollo'
|
|
|
import { useState } from 'react'
|
|
|
import { endpoint } from '../config'
|
|
|
|
|
|
+const DO_LOCAL = gql`
|
|
|
+ {
|
|
|
+ doLocal @client
|
|
|
+ }
|
|
|
+`
|
|
|
+
|
|
|
+const UPLOAD_FILE = gql`
|
|
|
+ mutation UPLOAD_FILE($files: [Upload!]!, $name: String!, $description: String!) {
|
|
|
+ uploadFiles(files: $files, name: $name, description: $description)
|
|
|
+ }
|
|
|
+`
|
|
|
+
|
|
|
+const TestForm = props => {
|
|
|
+ const [state, setState] = useState({ files: null, name: '', description: '' })
|
|
|
+ function updateState(event) {
|
|
|
+ const { name, type, files, value } = event.target
|
|
|
+ setState({ ...state, [name]: type === 'file' ? files : value })
|
|
|
+ }
|
|
|
+ return (
|
|
|
+ <Mutation mutation={UPLOAD_FILE} variables={state}>
|
|
|
+ {(uploadFiles, { data, error, loading }) => (
|
|
|
+ <form onSubmit={async event => {
|
|
|
+ console.log(state)
|
|
|
+ event.preventDefault()
|
|
|
+ const res = await uploadFiles()
|
|
|
+ console.log(res)
|
|
|
+ }}>
|
|
|
+ <input type='file' multiple required name='files' onChange={updateState} />
|
|
|
+ <input type='text' name='name' value={state.name} onChange={updateState} />
|
|
|
+ <textarea name='description' value={state.description} onChange={updateState} />
|
|
|
+ <button>Send</button>
|
|
|
+ <Query query={DO_LOCAL}>
|
|
|
+ {({ data, client }) => (
|
|
|
+ <>
|
|
|
+ <button type='button' onClick={
|
|
|
+ event => { client.writeData({ data: { doLocal: !data.doLocal } }) }
|
|
|
+ }>Do Local</button>
|
|
|
+ <button disabled={data.doLocal}>Uh-Oh!</button>
|
|
|
+ </>
|
|
|
+ )}
|
|
|
+ </Query>
|
|
|
+ </form>
|
|
|
+ )}
|
|
|
+ </Mutation>
|
|
|
+ )
|
|
|
+}
|
|
|
+
|
|
|
const FileFields = props => {
|
|
|
const [state, setState] = useState({ ...FileState })
|
|
|
|
|
@@ -17,8 +66,8 @@ const FileFields = props => {
|
|
|
return (
|
|
|
< fieldset >
|
|
|
<label htmlFor='file'>File</label>
|
|
|
- <input type='file' name='file' id='file' onChange={updateState} />
|
|
|
- < label htmlFor='name'>File name</label>
|
|
|
+ <input type='file' multiple required name='file' id='file' onChange={updateState} />
|
|
|
+ <label htmlFor='name'>File name</label>
|
|
|
<input type='text' name='name' id='name' placeholder='File name' value={state.name} onChange={updateState} />
|
|
|
<label htmlFor='description'>File description</label>
|
|
|
<textarea name='description' id='description' placeholder='File description' value={state.description} onChange={updateState} />
|
|
@@ -105,4 +154,4 @@ class FileUpload extends React.Component {
|
|
|
}
|
|
|
|
|
|
export default FileUpload
|
|
|
-export { FileFields, FileState, uploadFile }
|
|
|
+export { FileFields, FileState, uploadFile, TestForm }
|