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) {
id
path
name
description
filename
mimetype
size
}
}
`
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 (
{(uploadFiles, { data, error, loading }) => (
)}
)
}
const FileFormFields = props => {
const [state, setState] = useState({ ...FileState })
const updateState = async event => {
const { name, type, value, files } = event.target
await setState({
...state,
[name]: type === 'file' ? files[0] : value
})
props.onChange(event, state)
}
return (
)
}
const FileFields = {
id: null,
path: '',
name: '',
description: '',
filename: '',
mimetype: '',
size: '',
file: null
}
async function uploadFile (file) {
const body = new FormData()
body.append('file', file)
const res = await fetch(`${endpoint}/upload`, { method: 'POST', body })
return res.json()
}
class FileUpload extends React.Component {
state = {
...FileState
}
upload = async event => {
event.preventDefault()
if (!this.state.file) {
alert('Please select file first.')
return
}
this.setState({ uploading: true })
const data = new FormData()
data.append('file', this.state.file)
data.append('description', this.state.description)
const res = await fetch(`${endpoint}/upload`, {
method: 'POST',
body: data
})
const { error, file } = await res.json()
if (error) {
console.error(error)
alert('Upload error.')
this.setState({ uploading: false })
}
this.setState({ path: `${endpoint}/${file.path}`, uploading: false })
}
selectFile = event => {
const { validity, files } = event.target
this.setState({ file: files[0] })
}
handleChange = event => {
this.setState({ [event.target.name]: event.target.value })
}
render () {
return (
)
}
}
export default FileUpload
export { FileFields, FileFormFields }