diff --git a/app/components/blob-uploader.js b/app/components/blob-uploader.js
deleted file mode 100644
index 75a6194..0000000
--- a/app/components/blob-uploader.js
+++ /dev/null
@@ -1,35 +0,0 @@
-import { graphql } from 'react-apollo'
-import gql from 'graphql-tag'
-import FileInput from './file-input'
-import uploadsQuery from '../queries/uploads'
-
-const BlobUploader = ({ mutate }) => {
- const handleChange = ({ target }) => {
- // We just convert the actual File to a Blob for the example
- const blob = new Blob([target.files[0].slice(0, -1)], { type: target.files[0].type })
- blob.name = target.files[0].name; // Don't forget to add the name to the Blob or it will be unnamed!
-
- mutate({
- variables: { file: blob },
- update: (proxy, { data: { singleUpload } }) => {
- const data = proxy.readQuery({ query: uploadsQuery })
- data.uploads.push(singleUpload)
- proxy.writeQuery({ query: uploadsQuery, data })
- }
- })
- }
-
- return
-}
-
-export default graphql(gql`
- mutation($file: Upload!) {
- singleUpload(file: $file) {
- id
- filename
- encoding
- mimetype
- path
- }
- }
-`)(BlobUploader)
diff --git a/app/components/field.js b/app/components/field.js
new file mode 100644
index 0000000..17f3c90
--- /dev/null
+++ b/app/components/field.js
@@ -0,0 +1,13 @@
+const Field = ({ children }) => (
+
+)
+
+export default Field
diff --git a/app/components/file-input.js b/app/components/file-input.js
deleted file mode 100644
index 95fc272..0000000
--- a/app/components/file-input.js
+++ /dev/null
@@ -1,13 +0,0 @@
-const FileInput = props => (
-
-
{props.title}
-
-
-
-)
-
-export default FileInput
diff --git a/app/components/section.js b/app/components/section.js
new file mode 100644
index 0000000..fb85e50
--- /dev/null
+++ b/app/components/section.js
@@ -0,0 +1,15 @@
+const Section = ({ heading, children }) => (
+
+ {heading}
+ {children}
+
+
+)
+
+export default Section
diff --git a/app/components/upload-blob.js b/app/components/upload-blob.js
new file mode 100644
index 0000000..337cdb6
--- /dev/null
+++ b/app/components/upload-blob.js
@@ -0,0 +1,70 @@
+import { Component } from 'react'
+import { graphql } from 'react-apollo'
+import gql from 'graphql-tag'
+import Field from './field'
+import uploadsQuery from '../queries/uploads'
+
+class UploadBlob extends Component {
+ state = {
+ name: '',
+ content: ''
+ }
+
+ handleChange = ({ target: { name, value } }) =>
+ this.setState({ [name]: value })
+
+ handleSubmit = event => {
+ event.preventDefault()
+
+ const file = new Blob([this.state.content], { type: 'text/plain' })
+ file.name = `${this.state.name}.txt`
+
+ this.props.mutate({
+ variables: { file },
+ update: (proxy, { data: { singleUpload } }) => {
+ const data = proxy.readQuery({ query: uploadsQuery })
+ data.uploads.push(singleUpload)
+ proxy.writeQuery({ query: uploadsQuery, data })
+ }
+ })
+ }
+
+ render() {
+ return (
+
+ )
+ }
+}
+
+export default graphql(gql`
+ mutation($file: Upload!) {
+ singleUpload(file: $file) {
+ id
+ filename
+ encoding
+ mimetype
+ path
+ }
+ }
+`)(UploadBlob)
diff --git a/app/components/single-uploader.js b/app/components/upload-file.js
similarity index 64%
rename from app/components/single-uploader.js
rename to app/components/upload-file.js
index 1cba2b6..a832fba 100644
--- a/app/components/single-uploader.js
+++ b/app/components/upload-file.js
@@ -1,13 +1,12 @@
import { graphql } from 'react-apollo'
import gql from 'graphql-tag'
-import FileInput from './file-input'
import uploadsQuery from '../queries/uploads'
-const SingleUploader = ({ mutate }) => {
- const handleChange = ({ target }) =>
- target.validity.valid &&
+const UploadFile = ({ mutate }) => {
+ const handleChange = ({ target: { validity, files: [file] } }) =>
+ validity.valid &&
mutate({
- variables: { file: target.files[0] },
+ variables: { file },
update: (proxy, { data: { singleUpload } }) => {
const data = proxy.readQuery({ query: uploadsQuery })
data.uploads.push(singleUpload)
@@ -15,7 +14,7 @@ const SingleUploader = ({ mutate }) => {
}
})
- return
+ return
}
export default graphql(gql`
@@ -28,4 +27,4 @@ export default graphql(gql`
path
}
}
-`)(SingleUploader)
+`)(UploadFile)
diff --git a/app/components/multiple-uploader.js b/app/components/upload-filelist.js
similarity index 63%
rename from app/components/multiple-uploader.js
rename to app/components/upload-filelist.js
index fa31d15..f5fed39 100644
--- a/app/components/multiple-uploader.js
+++ b/app/components/upload-filelist.js
@@ -1,13 +1,12 @@
import { graphql } from 'react-apollo'
import gql from 'graphql-tag'
-import FileInput from './file-input'
import uploadsQuery from '../queries/uploads'
-const MultipleUploader = ({ mutate }) => {
- const handleChange = ({ target }) =>
- target.validity.valid &&
+const UploadFileList = ({ mutate }) => {
+ const handleChange = ({ target: { validity, files } }) =>
+ validity.valid &&
mutate({
- variables: { files: target.files },
+ variables: { files },
update: (proxy, { data: { multipleUpload } }) => {
const data = proxy.readQuery({ query: uploadsQuery })
data.uploads.push(...multipleUpload)
@@ -15,7 +14,7 @@ const MultipleUploader = ({ mutate }) => {
}
})
- return
+ return
}
export default graphql(gql`
@@ -28,4 +27,4 @@ export default graphql(gql`
path
}
}
-`)(MultipleUploader)
+`)(UploadFileList)
diff --git a/app/components/upload-list.js b/app/components/uploads.js
similarity index 84%
rename from app/components/upload-list.js
rename to app/components/uploads.js
index 695c120..4bcef3a 100644
--- a/app/components/upload-list.js
+++ b/app/components/uploads.js
@@ -2,7 +2,7 @@ import { graphql } from 'react-apollo'
import { Table, Head, Cell } from './table'
import uploadsQuery from '../queries/uploads'
-const UploadList = ({ data: { uploads = [] } }) => (
+const Uploads = ({ data: { uploads = [] } }) => (
@@ -23,4 +23,4 @@ const UploadList = ({ data: { uploads = [] } }) => (
/>
)
-export default graphql(uploadsQuery)(UploadList)
+export default graphql(uploadsQuery)(Uploads)
diff --git a/app/pages/index.js b/app/pages/index.js
index 2dc6750..74da268 100644
--- a/app/pages/index.js
+++ b/app/pages/index.js
@@ -1,8 +1,9 @@
import Page from '../components/page'
-import SingleUploader from '../components/single-uploader'
-import MultipleUploader from '../components/multiple-uploader'
-import BlobUploader from '../components/blob-uploader'
-import UploadList from '../components/upload-list'
+import Section from '../components/section'
+import UploadFile from '../components/upload-file'
+import UploadFileList from '../components/upload-filelist'
+import UploadBlob from '../components/upload-blob'
+import Uploads from '../components/uploads'
import withData from '../providers/with-data'
const HomePage = () => (
@@ -13,10 +14,18 @@ const HomePage = () => (
height="128"
alt="Apollo upload logo"
/>
-
-
-
-
+
+
+
+
)