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 f9b3af5..0000000
--- a/app/components/file-input.js
+++ /dev/null
@@ -1,12 +0,0 @@
-const FileInput = props => (
-
-
-
-
-)
-
-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 66%
rename from app/components/single-uploader.js
rename to app/components/upload-file.js
index ece6fb3..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 66%
rename from app/components/multiple-uploader.js
rename to app/components/upload-filelist.js
index cf086b0..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/package.json b/app/package.json
index c6af5fe..5c4185f 100644
--- a/app/package.json
+++ b/app/package.json
@@ -9,7 +9,7 @@
"apollo-cache-inmemory": "^1.1.5",
"apollo-client": "^2.2.0",
"apollo-link": "^1.0.7",
- "apollo-upload-client": "^7.0.0-alpha.3",
+ "apollo-upload-client": "^7.0.0-alpha.4",
"babel-plugin-transform-inline-environment-variables": "^0.2.0",
"dotenv-cli": "^1.4.0",
"graphql": "^0.12.3",
diff --git a/app/pages/index.js b/app/pages/index.js
index 8805796..74da268 100644
--- a/app/pages/index.js
+++ b/app/pages/index.js
@@ -1,7 +1,9 @@
import Page from '../components/page'
-import SingleUploader from '../components/single-uploader'
-import MultipleUploader from '../components/multiple-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 = () => (
@@ -12,9 +14,18 @@ const HomePage = () => (
height="128"
alt="Apollo upload logo"
/>
-
-
-
+
+
+
+
)