Uploads show up in the uploads list without needing a page refresh.

This commit is contained in:
Jayden Seric 2017-04-09 14:56:04 +10:00
parent 21c28e87fe
commit 3b11a922f6
6 changed files with 40 additions and 22 deletions

View File

@ -11,21 +11,23 @@ db.defaults({uploads: []})
const saveFile = file => { const saveFile = file => {
return db.get('uploads') return db.get('uploads')
.push(file) .push({
id: file.path,
...file
})
.last() .last()
.write() .write()
.then(result => result) .then(result => result)
} }
export default { export default {
Query: { Query: {
allUploads () { uploads () {
return db.get('uploads').value() return db.get('uploads').value()
} }
}, },
Mutation: { Mutation: {
singleUpload (_, {file}) { singleUpload: (_, {file}) => saveFile(file),
return saveFile(file)
},
multipleUpload (_, {files}) { multipleUpload (_, {files}) {
return Promise.all(files.map((file) => { return Promise.all(files.map((file) => {
return saveFile(file) return saveFile(file)

View File

@ -1,4 +1,5 @@
type File { type File {
id: String!
name: String! name: String!
type: String! type: String!
size: Int! size: Int!
@ -13,7 +14,7 @@ input Upload {
} }
type Query { type Query {
allUploads: [File] uploads: [File]
} }
type Mutation { type Mutation {

View File

@ -1,5 +1,6 @@
import {Component} from 'react' import {Component} from 'react'
import {graphql, gql} from 'react-apollo' import {graphql, gql} from 'react-apollo'
import uploadsQuery from '../queries/uploads'
class MultipleUploader extends Component { class MultipleUploader extends Component {
handleChange = ({target}) => { handleChange = ({target}) => {
@ -8,7 +9,10 @@ class MultipleUploader extends Component {
.mutate({ .mutate({
variables: { variables: {
files: target.files files: target.files
} },
refetchQueries: [{
query: uploadsQuery
}]
}) })
.then(({data}) => console.log('Mutation response:', data)) .then(({data}) => console.log('Mutation response:', data))
} }
@ -22,6 +26,7 @@ class MultipleUploader extends Component {
export default graphql(gql` export default graphql(gql`
mutation multipleUpload ($files: [Upload!]!) { mutation multipleUpload ($files: [Upload!]!) {
multipleUpload (files: $files) { multipleUpload (files: $files) {
id
name name
type type
size size

View File

@ -1,5 +1,6 @@
import {Component} from 'react' import {Component} from 'react'
import {graphql, gql} from 'react-apollo' import {graphql, gql} from 'react-apollo'
import uploadsQuery from '../queries/uploads'
class SingleUploader extends Component { class SingleUploader extends Component {
handleChange = ({target}) => { handleChange = ({target}) => {
@ -8,7 +9,10 @@ class SingleUploader extends Component {
.mutate({ .mutate({
variables: { variables: {
file: target.files[0] file: target.files[0]
} },
refetchQueries: [{
query: uploadsQuery
}]
}) })
.then(({data}) => console.log('Mutation response:', data)) .then(({data}) => console.log('Mutation response:', data))
} }
@ -22,6 +26,7 @@ class SingleUploader extends Component {
export default graphql(gql` export default graphql(gql`
mutation singleUpload ($file: Upload!) { mutation singleUpload ($file: Upload!) {
singleUpload (file: $file) { singleUpload (file: $file) {
id
name name
type type
size size

View File

@ -1,6 +1,7 @@
import {graphql, gql} from 'react-apollo' import {graphql} from 'react-apollo'
import uploadsQuery from '../queries/uploads'
const UploadList = ({data: {allUploads}}) => { const UploadList = ({data: {uploads}}) => {
return ( return (
<table> <table>
<thead> <thead>
@ -12,8 +13,8 @@ const UploadList = ({data: {allUploads}}) => {
</tr> </tr>
</thead> </thead>
<tbody> <tbody>
{allUploads.map(({name, type, size, path}) => ( {uploads.map(({id, name, type, size, path}) => (
<tr key={path}> <tr key={id}>
<td>{name}</td> <td>{name}</td>
<td>{type}</td> <td>{type}</td>
<td>{size}</td> <td>{size}</td>
@ -34,13 +35,4 @@ const UploadList = ({data: {allUploads}}) => {
) )
} }
export default graphql(gql` export default graphql(uploadsQuery)(UploadList)
query allUploads {
allUploads {
name
type
size
path
}
}
`)(UploadList)

13
app/queries/uploads.js Normal file
View File

@ -0,0 +1,13 @@
import {gql} from 'react-apollo'
export default gql`
query uploads {
uploads {
id
name
type
size
path
}
}
`