-
Notifications
You must be signed in to change notification settings - Fork 289
/
apollo-client.js
73 lines (53 loc) · 1.58 KB
/
apollo-client.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
import { ApolloClient, HttpLink, InMemoryCache } from '@apollo/client';
import { concatPagination } from '@apollo/client/utilities';
let apolloClient;
const WORDPRESS_HOST = process.env.WORDPRESS_HOST;
/**
* createApolloClient
*/
export function _createApolloClient() {
const link = new HttpLink({
uri: `${WORDPRESS_HOST}/graphql`,
});
const cache = new InMemoryCache({
typePolicies: {
Query: {
fields: {
allPosts: concatPagination(),
allPages: concatPagination(),
},
},
},
});
return new ApolloClient({
ssrMode: typeof window === 'undefined',
link,
cache,
});
}
/**
* initializeApollo
*/
export function initializeApollo(initialState = null) {
const _apolloClient = getApolloClient();
// If your page has Next.js data fetching methods that use Apollo Client, the initial state
// gets hydrated here
if (initialState) {
// Get existing cache, loaded during client side data fetching
const existingCache = _apolloClient.extract();
// Restore the cache using the data passed from getStaticProps/getServerSideProps
// combined with the existing cached data
_apolloClient.cache.restore({ ...existingCache, ...initialState });
}
// For SSG and SSR always create a new Apollo Client
if (typeof window === 'undefined') return _apolloClient;
// Create the Apollo Client once in the client
if (!apolloClient) apolloClient = _apolloClient;
return _apolloClient;
}
/**
* getApolloClient
*/
export function getApolloClient() {
return apolloClient ?? _createApolloClient();
}