summaryrefslogtreecommitdiffstats
path: root/lib
diff options
context:
space:
mode:
authorWes Bos <wesbos@gmail.com>2018-01-30 12:39:31 -0500
committerWes Bos <wesbos@gmail.com>2018-01-30 12:39:31 -0500
commit0a1648bf47490b312169c531aeb51ef4725e8d2e (patch)
treea9c3dd7b50bc8dd563d9efeee3eeafaca1b3019a /lib
parent0f1b9240bbd05b377e868faf78b89b509a3d7537 (diff)
Saying goodbye to graphcool
Diffstat (limited to 'lib')
-rw-r--r--lib/initApollo.js28
-rw-r--r--lib/withData.js11
2 files changed, 22 insertions, 17 deletions
diff --git a/lib/initApollo.js b/lib/initApollo.js
index 41b058c..35f5e08 100644
--- a/lib/initApollo.js
+++ b/lib/initApollo.js
@@ -1,9 +1,8 @@
-// import { ApolloClient, createNetworkInterface } from 'react-apollo';
import { ApolloClient } from 'apollo-client';
-import fetch from 'isomorphic-fetch';
+import { ApolloLink, concat } from 'apollo-link';
+import { HttpLink } from 'apollo-link-http';
import { InMemoryCache } from 'apollo-cache-inmemory';
-import { createHttpLink } from 'apollo-link-http';
-import { ApolloLink } from 'apollo-link';
+import fetch from 'isomorphic-fetch';
import { endpoint } from '../config';
let apolloClient = null;
@@ -13,16 +12,22 @@ if (!process.browser) {
global.fetch = fetch;
}
-function create(initialState = {}) {
- const httpLink = createHttpLink({
+function create(initialState) {
+ // First we create three peices of middleware
+
+ // 1. Create a link for local state to be managed in Apollo
+
+
+ // 1. connect to our GraphQL API
+ const httpLink = new HttpLink({
uri: endpoint, // Server URL (must be absolute)
opts: {
- // Additional fetch() options like `credentials` or `headers`
credentials: 'same-origin',
},
});
- const middlewareLink = new ApolloLink((operation, forward) => {
+ // 2. One to tack on our auth token on each request
+ const authMiddleware = new ApolloLink((operation, forward) => {
const headers = {};
if (typeof localStorage !== 'undefined' && localStorage.getItem('auth0IdToken')) {
@@ -33,14 +38,11 @@ function create(initialState = {}) {
return forward(operation);
});
- const link = middlewareLink.concat(httpLink);
-
return new ApolloClient({
- link,
connectToDevTools: process.browser,
- cache: new InMemoryCache().restore(initialState || {}),
- dataIdFromObject: o => o.id,
ssrMode: !process.browser, // Disables forceFetch on the server (so queries are only run once)
+ link: concat(authMiddleware, httpLink),
+ cache: new InMemoryCache().restore(initialState || {}),
});
}
diff --git a/lib/withData.js b/lib/withData.js
index ab9fe78..0c68f49 100644
--- a/lib/withData.js
+++ b/lib/withData.js
@@ -12,13 +12,12 @@ function getComponentDisplayName(Component) {
export default ComposedComponent =>
class WithData extends React.Component {
static displayName = `WithData(${getComponentDisplayName(ComposedComponent)})`;
-
static propTypes = {
serverState: PropTypes.object.isRequired,
};
static async getInitialProps(ctx) {
- let serverState = {};
+ let serverState = { apollo: {} };
// Evaluate the composed component's getInitialProps()
let composedInitialProps = {};
@@ -49,7 +48,11 @@ export default ComposedComponent =>
Head.rewind();
// Extract query data from the Apollo store
- serverState = apollo.cache.extract();
+ serverState = {
+ apollo: {
+ data: apollo.cache.extract(),
+ },
+ };
}
return {
@@ -60,7 +63,7 @@ export default ComposedComponent =>
constructor(props) {
super(props);
- this.apollo = initApollo(this.props.serverState);
+ this.apollo = initApollo(this.props.serverState.apollo.data);
}
render() {