;
59 | };
60 |
61 | export type Client = BaseClient & {
62 | checkout: CheckoutResource;
63 | };
64 |
65 | export type Page = {
66 | id: string;
67 | title: string;
68 | handle: string;
69 | body: string;
70 | bodySummary: string;
71 | url: string;
72 | };
73 |
74 | export type PageEdge = {
75 | node: Page;
76 | };
77 |
--------------------------------------------------------------------------------
/support/components.tsx:
--------------------------------------------------------------------------------
1 | import React from 'react';
2 | import { useRemoveItem, useUpdateItem, usePrice, useAddItem } from '../src';
3 | import { CommerceProvider, useCommerce } from '../src/commerce';
4 |
5 | export const Wrapper = ({ children }) => {
6 | return (
7 |
10 | {children}
11 |
12 | );
13 | };
14 |
15 | export const CartItem = ({ item }) => {
16 | const removeItem = useRemoveItem();
17 | const updateItem = useUpdateItem(item);
18 |
19 | const { price } = usePrice({
20 | variant: item.variant
21 | });
22 |
23 | const handleRemove = async () => {
24 | await removeItem({ id: 'variant-id' });
25 | };
26 |
27 | const handleUpdate = async () => {
28 | await updateItem({ quantity: 2 });
29 | };
30 |
31 | return (
32 |
33 | {item.title} {price}
34 |
35 |
36 | );
37 | };
38 |
39 | export const App = () => {
40 | const { checkout } = useCommerce();
41 | const { price } = usePrice({ amount: 10 });
42 | const addItem = useAddItem();
43 |
44 | const itemsCount = checkout?.lineItems.reduce(
45 | (count, item) => count + item.quantity,
46 | 0
47 | );
48 |
49 | const items = checkout?.lineItems ?? [];
50 |
51 | const addToCart = async () => {
52 | await addItem({
53 | variantId: 'variant-id',
54 | quantity: 1
55 | });
56 | };
57 |
58 | return (
59 | <>
60 | {price}
61 |
62 | {itemsCount}
63 | {items.map((item, index) => (
64 |
65 | ))}
66 | >
67 | );
68 | };
69 |
--------------------------------------------------------------------------------
/support/mock.ts:
--------------------------------------------------------------------------------
1 | import fetch from 'jest-fetch-mock';
2 |
3 | const mock = (fixture: any) =>
4 | fetch.mockResponseOnce(JSON.stringify(fixture), {
5 | status: 200,
6 | headers: { 'content-type': 'application/json' }
7 | });
8 |
9 | export default mock;
10 |
--------------------------------------------------------------------------------
/tsconfig.json:
--------------------------------------------------------------------------------
1 | {
2 | "compilerOptions": {
3 | "baseUrl": ".",
4 | "target": "es5",
5 | "lib": ["dom", "dom.iterable", "esnext"],
6 | "allowJs": true,
7 | "skipLibCheck": true,
8 | "strict": true,
9 | "forceConsistentCasingInFileNames": true,
10 | "esModuleInterop": true,
11 | "module": "commonjs",
12 | "moduleResolution": "node",
13 | "resolveJsonModule": true,
14 | "isolatedModules": true,
15 | "jsx": "react",
16 | "declaration": true,
17 | "outDir": "./dist"
18 | },
19 | "include": ["src"],
20 | "exclude": ["node_nodules"]
21 | }
22 |
--------------------------------------------------------------------------------