-
Notifications
You must be signed in to change notification settings - Fork 842
/
resolvers.js
38 lines (34 loc) · 906 Bytes
/
resolvers.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
import gql from 'graphql-tag';
import { GET_CART_ITEMS } from './pages/cart';
export const typeDefs = gql`
extend type Query {
isLoggedIn: Boolean!
cartItems: [ID!]!
}
extend type Launch {
isInCart: Boolean!
}
extend type Mutation {
addOrRemoveFromCart(id: ID!): [Launch]
}
`;
export const resolvers = {
Launch: {
isInCart: (launch, _, { cache }) => {
const { cartItems } = cache.readQuery({ query: GET_CART_ITEMS });
return cartItems.includes(launch.id);
},
},
Mutation: {
addOrRemoveFromCart: (_, { id }, { cache }) => {
const { cartItems } = cache.readQuery({ query: GET_CART_ITEMS });
const data = {
cartItems: cartItems.includes(id)
? cartItems.filter(i => i !== id)
: [...cartItems, id],
};
cache.writeQuery({ query: GET_CART_ITEMS, data });
return data.cartItems;
},
},
};