/
createCartHandler.customMethods.example.js
94 lines (88 loc) · 1.96 KB
/
createCartHandler.customMethods.example.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
90
91
92
93
94
import {
createCartHandler,
cartGetIdDefault,
cartSetIdDefault,
cartLinesAddDefault,
cartLinesRemoveDefault,
} from '@shopify/hydrogen';
const cartQueryOptions = {
storefront,
getCartId: cartGetIdDefault(request.headers),
};
const getCartId = cartGetIdDefault(request.headers);
const cart = createCartHandler({
storefront,
getCartId,
setCartId: cartSetIdDefault(),
customMethods: {
editInLine: async (addLines, removeLineIds, optionalParams) => {
// Using Hydrogen default cart query methods
await cartLinesAddDefault(cartQueryOptions)(addLines, optionalParams);
return await cartLinesRemoveDefault(cartQueryOptions)(
removeLineIds,
optionalParams,
);
},
addLines: async (lines, optionalParams) => {
// With your own Storefront API graphql query
return await storefront.mutate(CART_LINES_ADD_MUTATION, {
variables: {
id: optionalParams.cartId || getCartId(),
lines,
},
});
},
},
});
// Use custom method editInLine that delete and add items in one method
cart.editInLine(
['123'],
[
{
merchandiseId: 'gid://shopify/ProductVariant/456789123',
quantity: 1,
},
],
);
// Use overridden cart.addLines
const result = await cart.addLines(
[
{
merchandiseId: 'gid://shopify/ProductVariant/123456789',
quantity: 1,
},
],
{
cartId: 'c-123',
},
);
// Output of result:
// {
// cartLinesAdd: {
// cart: {
// id: 'c-123',
// totalQuantity: 1
// },
// errors: []
// }
// }
const CART_LINES_ADD_MUTATION = `#graphql
mutation CartLinesAdd(
$cartId: ID!
$lines: [CartLineInput!]!
$country: CountryCode = ZZ
$language: LanguageCode
) @inContext(country: $country, language: $language) {
cartLinesAdd(cartId: $cartId, lines: $lines) {
cart {
id
totalQuantity
}
errors: userErrors {
message
field
code
}
}
}
`;