summaryrefslogtreecommitdiffstats
path: root/stepped-solutions/40/frontend/lib/withData.js
diff options
context:
space:
mode:
Diffstat (limited to 'stepped-solutions/40/frontend/lib/withData.js')
-rwxr-xr-xstepped-solutions/40/frontend/lib/withData.js42
1 files changed, 42 insertions, 0 deletions
diff --git a/stepped-solutions/40/frontend/lib/withData.js b/stepped-solutions/40/frontend/lib/withData.js
new file mode 100755
index 0000000..33908d6
--- /dev/null
+++ b/stepped-solutions/40/frontend/lib/withData.js
@@ -0,0 +1,42 @@
+import withApollo from 'next-with-apollo';
+import ApolloClient from 'apollo-boost';
+import { endpoint } from '../config';
+import { LOCAL_STATE_QUERY } from '../components/Cart';
+
+function createClient({ headers }) {
+ return new ApolloClient({
+ uri: process.env.NODE_ENV === 'development' ? endpoint : endpoint,
+ request: operation => {
+ operation.setContext({
+ fetchOptions: {
+ credentials: 'include',
+ },
+ headers,
+ });
+ },
+ // local data
+ clientState: {
+ resolvers: {
+ Mutation: {
+ toggleCart(_, variables, { cache }) {
+ // read the cartOpen value from the cache
+ const { cartOpen } = cache.readQuery({
+ query: LOCAL_STATE_QUERY,
+ });
+ // Write the cart State to the opposite
+ const data = {
+ data: { cartOpen: !cartOpen },
+ };
+ cache.writeData(data);
+ return data;
+ },
+ },
+ },
+ defaults: {
+ cartOpen: true,
+ },
+ },
+ });
+}
+
+export default withApollo(createClient);