/
initApollo.js
89 lines (76 loc) · 2.35 KB
/
initApollo.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
import { ApolloClient, createNetworkInterface } from "react-apollo";
import fetch from "isomorphic-fetch";
import {
SubscriptionClient,
addGraphQLSubscriptions
} from "subscriptions-transport-ws";
const uri = "http://localhost:3000/graphql";
const subscriptionUri = "ws://localhost:3000/subscriptions";
let apolloClient = null;
// Polyfill fetch() on the server (used by apollo-client)
if (!process.browser) {
global.fetch = fetch;
}
function create(headers, initialState, ni) {
let networkInterface = ni;
if (!ni) {
networkInterface = createNetworkInterface({ uri })
networkInterface.use([{
applyMiddleware(req, next) {
if (!req.options.headers) {
req.options.headers = {};
}
console.log('middleware called! 1');
// if (apolloClient) {
// req.options.headers['x-token'] = localStorage.getItem('token');
// req.options.headers['x-refresh-token'] = localStorage.getItem('refreshToken');
// }
next();
}
}]);
}
return new ApolloClient({
initialState,
ssrMode: !process.browser, // Disables forceFetch on the server (so queries are only run once)
networkInterface,
});
}
export default function initApollo(headers, 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(headers, initialState);
}
// Reuse client on the client-side
if (!apolloClient) {
const wsClient = new SubscriptionClient(subscriptionUri, {
reconnect: true
});
const networkInterface = createNetworkInterface({
uri
});
networkInterface.use([{
applyMiddleware(req, next) {
if (!req.options.headers) {
req.options.headers = {};
}
console.log('middleware called! 2');
// if (apolloClient) {
// req.options.headers['x-token'] = localStorage.getItem('token');
// req.options.headers['x-refresh-token'] = localStorage.getItem('refreshToken');
// }
next();
}
}]);
const networkInterfaceWithSubscriptions = addGraphQLSubscriptions(
networkInterface,
wsClient
);
apolloClient = create(
headers,
initialState,
networkInterfaceWithSubscriptions
);
}
return apolloClient;
}