6.0.3 • Published 6 years ago
apollo-upload-client-temp v6.0.3
apollo-upload-client
Enhances Apollo for intuitive file uploads via GraphQL mutations or queries. Use with apollo-upload-server.
Setup
Install with peer dependencies using npm:
npm install apollo-upload-client apollo-link graphql
Initialize Apollo Client with this terminating link:
import { createUploadLink } from 'apollo-upload-client'
const link = createUploadLink({
// Options…
})
See also the setup instructions for the apollo-upload-server
middleware.
Options
createUploadLink
options match createHttpLink
options:
includeExtensions
: Toggles sendingextensions
fields to the GraphQL server. Default isfalse
.uri
: GraphQL endpoint URI. Default is/graphql
.credentials
: OverridesfetchOptions.credentials
.headers
: Merges with and overridesfetchOptions.headers
.fetchOptions
:fetch
init object. Overridden by upload requirements.fetch
: Default is globalfetch
.
Usage
Use File
, FileList
or ReactNativeFile
instances anywhere within mutation or query input variables. For server instructions see apollo-upload-server
. See the example API and client.
File
example
import gql from 'graphql-tag'
import { graphql } from 'react-apollo'
export default graphql(gql`
mutation($file: Upload!) {
uploadFile(file: $file) {
id
}
}
`)(({ mutate }) => (
<input
type="file"
required
onChange={({ target }) =>
target.validity.valid && mutate({ variables: { file: target.files[0] } })
}
/>
))
FileList
example
import gql from 'graphql-tag'
import { graphql } from 'react-apollo'
export default graphql(gql`
mutation($files: [Upload!]!) {
uploadFiles(files: $files) {
id
}
}
`)(({ mutate }) => (
<input
type="file"
multiple
required
onChange={({ target }) =>
target.validity.valid && mutate({ variables: { files: target.files } })
}
/>
))
React Native
Substitute File
with ReactNativeFile
from extract-files
:
import { ReactNativeFile } from 'apollo-upload-client'
const file = new ReactNativeFile({
uri: '…',
type: 'image/jpeg',
name: 'photo.jpg'
})
const files = ReactNativeFile.list([
{
uri: '…',
type: 'image/jpeg',
name: 'photo-1.jpg'
},
{
uri: '…',
type: 'image/jpeg',
name: 'photo-2.jpg'
}
])
Support
- > 2% market share browsers.
- React Native.