54 lines
		
	
	
		
			1.6 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
			
		
		
	
	
			54 lines
		
	
	
		
			1.6 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
| import { ApolloClient } from 'apollo-client';
 | ||
| import { InMemoryCache } from 'apollo-cache-inmemory';
 | ||
| import { createUploadLink } from 'apollo-upload-client';
 | ||
| import { ApolloLink } from 'apollo-link';
 | ||
| import { BatchHttpLink } from 'apollo-link-batch-http';
 | ||
| import csrf from '~/lib/utils/csrf';
 | ||
| 
 | ||
| export const fetchPolicies = {
 | ||
|   CACHE_FIRST: 'cache-first',
 | ||
|   CACHE_AND_NETWORK: 'cache-and-network',
 | ||
|   NETWORK_ONLY: 'network-only',
 | ||
|   NO_CACHE: 'no-cache',
 | ||
|   CACHE_ONLY: 'cache-only',
 | ||
| };
 | ||
| 
 | ||
| export default (resolvers = {}, config = {}) => {
 | ||
|   let uri = `${gon.relative_url_root}/api/graphql`;
 | ||
| 
 | ||
|   if (config.baseUrl) {
 | ||
|     // Prepend baseUrl and ensure that `///` are replaced with `/`
 | ||
|     uri = `${config.baseUrl}${uri}`.replace(/\/{3,}/g, '/');
 | ||
|   }
 | ||
| 
 | ||
|   const httpOptions = {
 | ||
|     uri,
 | ||
|     headers: {
 | ||
|       [csrf.headerKey]: csrf.token,
 | ||
|     },
 | ||
|     // fetch won’t send cookies in older browsers, unless you set the credentials init option.
 | ||
|     // We set to `same-origin` which is default value in modern browsers.
 | ||
|     // See https://github.com/whatwg/fetch/pull/585 for more information.
 | ||
|     credentials: 'same-origin',
 | ||
|   };
 | ||
| 
 | ||
|   return new ApolloClient({
 | ||
|     link: ApolloLink.split(
 | ||
|       operation => operation.getContext().hasUpload || operation.getContext().isSingleRequest,
 | ||
|       createUploadLink(httpOptions),
 | ||
|       new BatchHttpLink(httpOptions),
 | ||
|     ),
 | ||
|     cache: new InMemoryCache({
 | ||
|       ...config.cacheConfig,
 | ||
|       freezeResults: config.assumeImmutableResults,
 | ||
|     }),
 | ||
|     resolvers,
 | ||
|     assumeImmutableResults: config.assumeImmutableResults,
 | ||
|     defaultOptions: {
 | ||
|       query: {
 | ||
|         fetchPolicy: config.fetchPolicy || fetchPolicies.CACHE_FIRST,
 | ||
|       },
 | ||
|     },
 | ||
|   });
 | ||
| };
 |