summaryrefslogtreecommitdiffstats
path: root/lib/initApollo.js
diff options
context:
space:
mode:
Diffstat (limited to 'lib/initApollo.js')
-rw-r--r--lib/initApollo.js37
1 files changed, 37 insertions, 0 deletions
diff --git a/lib/initApollo.js b/lib/initApollo.js
new file mode 100644
index 0000000..4ca3b05
--- /dev/null
+++ b/lib/initApollo.js
@@ -0,0 +1,37 @@
+import { ApolloClient, createNetworkInterface } from 'react-apollo'
+import fetch from 'isomorphic-fetch'
+
+let apolloClient = null
+
+// Polyfill fetch() on the server (used by apollo-client)
+if (!process.browser) {
+ global.fetch = fetch
+}
+
+function create (initialState) {
+ return new ApolloClient({
+ initialState,
+ ssrMode: !process.browser, // Disables forceFetch on the server (so queries are only run once)
+ networkInterface: createNetworkInterface({
+ uri: 'https://api.graph.cool/simple/v1/cj5xz8szs28930145gct82bdj', // Server URL (must be absolute)
+ opts: { // Additional fetch() options like `credentials` or `headers`
+ credentials: 'same-origin'
+ }
+ })
+ })
+}
+
+export default function initApollo (initialState) {
+ // Make sure to create a new client for every server-side request so that data
+ // isn't shared between connections (which would be bad)
+ if (!process.browser) {
+ return create(initialState)
+ }
+
+ // Reuse client on the client-side
+ if (!apolloClient) {
+ apolloClient = create(initialState)
+ }
+
+ return apolloClient
+}