@jetshop/core 5.10.0 → 5.11.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/ChannelHandler/ChannelHandler.d.ts +9 -13
- package/ChannelHandler/ChannelHandler.js +16 -63
- package/ChannelHandler/ChannelHandler.js.map +1 -1
- package/ChannelHandler/channelUtils.d.ts +13 -0
- package/ChannelHandler/channelUtils.js +26 -15
- package/ChannelHandler/channelUtils.js.map +1 -1
- package/ChannelHandler/redirectUtils.d.ts +3 -0
- package/ChannelHandler/redirectUtils.js +48 -0
- package/ChannelHandler/redirectUtils.js.map +1 -0
- package/ChannelHandler/redirectUtils.test.js +8 -0
- package/analytics/AnalyticsProvider.js +1 -1
- package/analytics/AnalyticsProvider.js.map +1 -1
- package/boot/SharedTree.js +1 -1
- package/boot/SharedTree.js.map +1 -1
- package/boot/apollo.d.ts +5 -3
- package/boot/apollo.js +9 -13
- package/boot/apollo.js.map +1 -1
- package/boot/client/startClient.js +5 -10
- package/boot/client/startClient.js.map +1 -1
- package/boot/server/createRenderer.js +8 -7
- package/boot/server/createRenderer.js.map +1 -1
- package/boot/server/index.js +2 -2
- package/boot/server/index.js.map +1 -1
- package/boot/server/persistedQueries/__tests__/getPersistedQueriesForRequest.test.js +53 -39
- package/boot/server/persistedQueries/getPersistedQueriesForRequest.js +2 -2
- package/boot/server/persistedQueries/getPersistedQueriesForRequest.js.map +1 -1
- package/components/Auth/CustomerUpdateForm.js +7 -7
- package/components/Auth/CustomerUpdateForm.js.map +1 -1
- package/components/ChannelContext/ChannelProvider.d.ts +1 -3
- package/components/ChannelContext/ChannelProvider.js +6 -13
- package/components/ChannelContext/ChannelProvider.js.map +1 -1
- package/components/ChannelContext/ChannelProvider.test.js +110 -0
- package/components/Mutation/cartMutationUtils.js +7 -6
- package/components/Mutation/cartMutationUtils.js.map +1 -1
- package/components/Query/CartProvider.js +31 -21
- package/components/Query/CartProvider.js.map +1 -1
- package/components/StructuredData/StructuredBreadcrumbData.js +4 -3
- package/components/StructuredData/StructuredBreadcrumbData.js.map +1 -1
- package/hooks/ProductList/ProductListContext.js +37 -14
- package/hooks/ProductList/ProductListContext.js.map +1 -1
- package/hooks/ProductList/action-creators.d.ts +20 -7
- package/hooks/ProductList/action-creators.js +125 -31
- package/hooks/ProductList/action-creators.js.map +1 -1
- package/hooks/ProductList/index.d.ts +34 -8
- package/hooks/ProductList/index.js +19 -0
- package/hooks/ProductList/index.js.map +1 -1
- package/hooks/ProductList/list-transforms.d.ts +2 -2
- package/hooks/ProductList/list-transforms.js +22 -22
- package/hooks/ProductList/list-transforms.js.map +1 -1
- package/hooks/ProductList/list-transforms.test.js +103 -100
- package/hooks/ProductList/product-list-reducer.d.ts +37 -14
- package/hooks/ProductList/product-list-reducer.js +106 -43
- package/hooks/ProductList/product-list-reducer.js.map +1 -1
- package/hooks/ProductList/product-list-reducer.test.js +144 -82
- package/hooks/ProductList/useProductList.d.ts +2 -2
- package/hooks/ProductList/useProductList.js +12 -5
- package/hooks/ProductList/useProductList.js.map +1 -1
- package/hooks/ProductList/useProductListItems.d.ts +1 -1
- package/hooks/ProductList/useProductListItems.js +8 -6
- package/hooks/ProductList/useProductListItems.js.map +1 -1
- package/package.json +1 -1
- package/resolvers/index.d.ts +3 -0
- package/resolvers/index.js +3 -0
- package/resolvers/index.js.map +1 -1
- package/sentry/client.js +1 -1
- package/sentry/client.js.map +1 -1
- package/time.d.ts +1 -0
- package/time.js +6 -0
- package/time.js.map +1 -0
@@ -0,0 +1,110 @@
|
|
1
|
+
import React, { useContext } from 'react';
|
2
|
+
import { render } from '@testing-library/react';
|
3
|
+
import ChannelContext, { ChannelProvider } from '../ChannelContext/';
|
4
|
+
import { ChannelHandler } from '../../ChannelHandler/ChannelHandler';
|
5
|
+
import { createSelectedChannel } from '../../ChannelHandler/channelUtils';
|
6
|
+
import { channels } from '@jetshop/core/test-utils/variables';
|
7
|
+
|
8
|
+
function SelectedChannel() {
|
9
|
+
const { selectedChannel } = useContext(ChannelContext);
|
10
|
+
return <div id="selected-channel">{selectedChannel.displayName}</div>;
|
11
|
+
}
|
12
|
+
|
13
|
+
describe('ChannelProvider', () => {
|
14
|
+
const selectedChannel = createSelectedChannel(channels[0]);
|
15
|
+
|
16
|
+
const oldWindowLocation = window.location;
|
17
|
+
let mockAssign = jest.fn();
|
18
|
+
|
19
|
+
beforeAll(() => {
|
20
|
+
// Mock the window.location object so we can test redirects
|
21
|
+
delete window.location;
|
22
|
+
window.location = Object.defineProperties(
|
23
|
+
{},
|
24
|
+
{
|
25
|
+
...Object.getOwnPropertyDescriptors(oldWindowLocation),
|
26
|
+
assign: {
|
27
|
+
configurable: true,
|
28
|
+
value: mockAssign
|
29
|
+
}
|
30
|
+
}
|
31
|
+
);
|
32
|
+
});
|
33
|
+
|
34
|
+
beforeEach(() => {
|
35
|
+
window.location.assign.mockReset();
|
36
|
+
});
|
37
|
+
|
38
|
+
afterAll(() => {
|
39
|
+
window.location = oldWindowLocation;
|
40
|
+
});
|
41
|
+
|
42
|
+
test('Selected channel should be available', () => {
|
43
|
+
const channelHandler = new ChannelHandler({
|
44
|
+
selectedChannel,
|
45
|
+
channels
|
46
|
+
});
|
47
|
+
|
48
|
+
render(
|
49
|
+
<ChannelProvider channelHandler={channelHandler}>
|
50
|
+
<SelectedChannel />
|
51
|
+
</ChannelProvider>
|
52
|
+
);
|
53
|
+
const selectedChannelElement = document.getElementById('selected-channel');
|
54
|
+
|
55
|
+
expect(selectedChannelElement.textContent).toBe(
|
56
|
+
selectedChannel.displayName
|
57
|
+
);
|
58
|
+
});
|
59
|
+
|
60
|
+
function sleep(ms) {
|
61
|
+
return new Promise((resolve) => setTimeout(resolve, ms));
|
62
|
+
}
|
63
|
+
|
64
|
+
test('Updating a channel', async () => {
|
65
|
+
const newChannel = createSelectedChannel(channels[1]);
|
66
|
+
|
67
|
+
const channelHandler = new ChannelHandler({
|
68
|
+
selectedChannel,
|
69
|
+
channels,
|
70
|
+
getPrimaryRoutePath: (path) => Promise.resolve(path)
|
71
|
+
});
|
72
|
+
|
73
|
+
render(
|
74
|
+
<ChannelProvider
|
75
|
+
channelHandler={channelHandler}
|
76
|
+
config={{ preserveRedirect: true }}
|
77
|
+
>
|
78
|
+
<SelectedChannel />
|
79
|
+
</ChannelProvider>
|
80
|
+
);
|
81
|
+
channelHandler.updateChannel({
|
82
|
+
config: { preserveRedirect: true },
|
83
|
+
newChannel
|
84
|
+
});
|
85
|
+
const selectedChannelElement = document.getElementById('selected-channel');
|
86
|
+
|
87
|
+
expect(selectedChannelElement.textContent).not.toBe(newChannel.name);
|
88
|
+
|
89
|
+
expect(selectedChannelElement.textContent).toBe(
|
90
|
+
selectedChannel.displayName
|
91
|
+
);
|
92
|
+
|
93
|
+
// NOTE
|
94
|
+
// We need to sleep briefly here, otherwise the call to
|
95
|
+
// window.location.assign is not detected(!) in .toHaveBeenCalled()
|
96
|
+
await sleep(10);
|
97
|
+
|
98
|
+
// Updating a channel should trigger a redirect
|
99
|
+
expect(window.location.assign).toHaveBeenCalled();
|
100
|
+
|
101
|
+
const newUrl = new URL(window.location.assign.mock.calls[0][0]);
|
102
|
+
expect(newUrl.searchParams.get('channel')).toBe(newChannel.name);
|
103
|
+
expect(newUrl.searchParams.get('channelCountry')).toBe(
|
104
|
+
newChannel.country.code
|
105
|
+
);
|
106
|
+
expect(newUrl.searchParams.get('culture')).toBe(
|
107
|
+
newChannel.language.culture
|
108
|
+
);
|
109
|
+
});
|
110
|
+
});
|
@@ -2,6 +2,7 @@ import throwErrorInDev from '../../helpers/throwErrorInDev';
|
|
2
2
|
export const TEMP_CART_ID = 'TEMP_CART_ID';
|
3
3
|
export const getAddToCartOptimisticResponse = (product, quantity = 1, cartId, client, cartQuery) => {
|
4
4
|
const defaultOptimisticCart = {
|
5
|
+
__optimistic: true,
|
5
6
|
id: TEMP_CART_ID,
|
6
7
|
totalQuantity: quantity,
|
7
8
|
__typename: 'Cart',
|
@@ -38,7 +39,7 @@ export const getAddToCartOptimisticResponse = (product, quantity = 1, cartId, cl
|
|
38
39
|
const newTotalQuantity = cart.totalQuantity + quantity;
|
39
40
|
const newItemQuantity = cart.items[index].quantity + quantity;
|
40
41
|
// Already in cart, increase/decrease quantity
|
41
|
-
const optimisticCart = Object.assign(Object.assign({}, cart), { totalQuantity: newTotalQuantity, items: [
|
42
|
+
const optimisticCart = Object.assign(Object.assign({}, cart), { __optimistic: true, totalQuantity: newTotalQuantity, items: [
|
42
43
|
...cart.items.slice(0, index),
|
43
44
|
...(newItemQuantity > 0
|
44
45
|
? [
|
@@ -50,7 +51,7 @@ export const getAddToCartOptimisticResponse = (product, quantity = 1, cartId, cl
|
|
50
51
|
return optimisticCart;
|
51
52
|
}
|
52
53
|
else {
|
53
|
-
const optimisticCart = Object.assign(Object.assign({}, cart), { totalQuantity: cart.totalQuantity + quantity });
|
54
|
+
const optimisticCart = Object.assign(Object.assign({}, cart), { __optimistic: true, totalQuantity: cart.totalQuantity + quantity });
|
54
55
|
return optimisticCart;
|
55
56
|
}
|
56
57
|
}
|
@@ -69,7 +70,7 @@ export const getDecrementQuantityOptimisticResponse = ({ itemId, client, cartId,
|
|
69
70
|
variables: { cartId }
|
70
71
|
});
|
71
72
|
const items = cart.items.map((item) => item.id === itemId ? Object.assign(Object.assign({}, item), { quantity: item.quantity - 1 }) : item);
|
72
|
-
const optimisticCart = Object.assign(Object.assign({}, cart), { items });
|
73
|
+
const optimisticCart = Object.assign(Object.assign({}, cart), { items, __optimistic: true });
|
73
74
|
return optimisticCart;
|
74
75
|
};
|
75
76
|
export const getIncrementQuantityOptimisticResponse = ({ itemId, client, cartId, cartQuery }) => {
|
@@ -79,7 +80,7 @@ export const getIncrementQuantityOptimisticResponse = ({ itemId, client, cartId,
|
|
79
80
|
variables: { cartId }
|
80
81
|
});
|
81
82
|
const items = cart.items.map((item) => item.id === itemId ? Object.assign(Object.assign({}, item), { quantity: item.quantity + 1 }) : item);
|
82
|
-
const optimisticCart = Object.assign(Object.assign({}, cart), { items });
|
83
|
+
const optimisticCart = Object.assign(Object.assign({}, cart), { items, __optimistic: true });
|
83
84
|
return optimisticCart;
|
84
85
|
};
|
85
86
|
export const getRemoveFromCartOptimisticResponse = ({ itemId, client, cartId, setCartId, cartQuery }) => {
|
@@ -92,7 +93,7 @@ export const getRemoveFromCartOptimisticResponse = ({ itemId, client, cartId, se
|
|
92
93
|
if (items.length === 0) {
|
93
94
|
setCartId(null);
|
94
95
|
}
|
95
|
-
const optimisticCart = Object.assign(Object.assign({}, cart), { items });
|
96
|
+
const optimisticCart = Object.assign(Object.assign({}, cart), { items, __optimistic: true });
|
96
97
|
return optimisticCart;
|
97
98
|
};
|
98
99
|
export const getSetQuantityOptimisticResponse = ({ itemId, quantity, client, cartId, cartQuery }) => {
|
@@ -102,7 +103,7 @@ export const getSetQuantityOptimisticResponse = ({ itemId, quantity, client, car
|
|
102
103
|
variables: { cartId }
|
103
104
|
});
|
104
105
|
const items = cart.items.map((item) => item.id === itemId ? Object.assign(Object.assign({}, item), { quantity }) : item);
|
105
|
-
const optimisticCart = Object.assign(Object.assign({}, cart), { items });
|
106
|
+
const optimisticCart = Object.assign(Object.assign({}, cart), { items, __optimistic: true });
|
106
107
|
return optimisticCart;
|
107
108
|
};
|
108
109
|
//# sourceMappingURL=cartMutationUtils.js.map
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"cartMutationUtils.js","sourceRoot":"","sources":["cartMutationUtils.ts"],"names":[],"mappings":"AAKA,OAAO,eAAe,MAAM,+BAA+B,CAAC;AAS5D,MAAM,CAAC,MAAM,YAAY,GAAG,cAAc,CAAC;AAE3C,MAAM,CAAC,MAAM,8BAA8B,GAAG,CAC5C,OAAgB,EAChB,
|
1
|
+
{"version":3,"file":"cartMutationUtils.js","sourceRoot":"","sources":["cartMutationUtils.ts"],"names":[],"mappings":"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"}
|
@@ -1,45 +1,55 @@
|
|
1
1
|
import { useQuery } from '@apollo/react-hooks';
|
2
|
-
import { useContext, useEffect } from 'react';
|
2
|
+
import { useContext, useEffect, useRef } from 'react';
|
3
3
|
import throwErrorInDev from '../../helpers/throwErrorInDev';
|
4
4
|
import { CartIdContext } from '../Cart/CartIdContext';
|
5
5
|
import debounce from 'lodash.debounce';
|
6
6
|
import { useTracker } from '../../analytics/Analytics';
|
7
7
|
import { trackCartEvent } from '../../analytics/tracking';
|
8
|
-
|
8
|
+
// We only want a single tracker to be attached even if we use `useCart` in multiple places in our app
|
9
|
+
let trackerAttached = false;
|
10
|
+
function useSingleCartTracker(result) {
|
9
11
|
var _a;
|
12
|
+
const track = useTracker();
|
13
|
+
useEffect(() => {
|
14
|
+
var _a, _b;
|
15
|
+
if (!trackerAttached) {
|
16
|
+
trackerAttached = true;
|
17
|
+
if (result.loading) {
|
18
|
+
}
|
19
|
+
else if ((_a = result.data) === null || _a === void 0 ? void 0 : _a.cart) {
|
20
|
+
if (result.data.cart.__optimistic) {
|
21
|
+
}
|
22
|
+
else {
|
23
|
+
track(trackCartEvent({ cart: (_b = result.data) === null || _b === void 0 ? void 0 : _b.cart }));
|
24
|
+
}
|
25
|
+
}
|
26
|
+
return () => {
|
27
|
+
trackerAttached = false;
|
28
|
+
};
|
29
|
+
}
|
30
|
+
}, [result.loading, (_a = result.data) === null || _a === void 0 ? void 0 : _a.cart, track]);
|
31
|
+
}
|
32
|
+
export function useCart(cartQuery) {
|
10
33
|
const { cartId } = useContext(CartIdContext);
|
11
34
|
const result = useQuery(cartQuery, {
|
12
35
|
variables: { cartId },
|
13
36
|
skip: __IN_SERVER__
|
14
37
|
});
|
15
|
-
|
16
|
-
useEffect(() => {
|
17
|
-
var _a;
|
18
|
-
if (result.loading) {
|
19
|
-
return;
|
20
|
-
}
|
21
|
-
else {
|
22
|
-
track(trackCartEvent({
|
23
|
-
cart: (_a = result.data) === null || _a === void 0 ? void 0 : _a.cart
|
24
|
-
}));
|
25
|
-
}
|
26
|
-
}, [result.loading, (_a = result.data) === null || _a === void 0 ? void 0 : _a.cart, track]);
|
38
|
+
useSingleCartTracker(result);
|
27
39
|
return { result, cart: result.data && result.data.cart };
|
28
40
|
}
|
29
41
|
const useLocalStorageCart = (refetch) => {
|
30
|
-
|
42
|
+
const debounceRefetch = useRef(null);
|
31
43
|
useEffect(() => {
|
32
44
|
const listener = (e) => {
|
33
45
|
const localStorageCart = localStorage.getItem('cartChange');
|
34
46
|
if (e.storageArea === localStorage &&
|
35
47
|
e.key === 'cartChange' &&
|
36
48
|
localStorageCart) {
|
37
|
-
if (debounceRefetch)
|
38
|
-
debounceRefetch.cancel();
|
39
|
-
debounceRefetch = debounce(() =>
|
40
|
-
|
41
|
-
}, 1500);
|
42
|
-
debounceRefetch();
|
49
|
+
if (debounceRefetch.current)
|
50
|
+
debounceRefetch.current.cancel();
|
51
|
+
debounceRefetch.current = debounce(() => refetch(), 1500);
|
52
|
+
debounceRefetch.current();
|
43
53
|
localStorage.removeItem('cartChange');
|
44
54
|
}
|
45
55
|
};
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"CartProvider.js","sourceRoot":"","sources":["CartProvider.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AAE/C,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;
|
1
|
+
{"version":3,"file":"CartProvider.js","sourceRoot":"","sources":["CartProvider.tsx"],"names":[],"mappings":"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"}
|
@@ -5,12 +5,13 @@ function StructuredBreadcrumbData({ parents, breadcrumbText }) {
|
|
5
5
|
const { selectedChannel } = useContext(ChannelContext);
|
6
6
|
let mappedParents = [];
|
7
7
|
if (parents && parents.length > 0) {
|
8
|
-
mappedParents = parents
|
9
|
-
var _a;
|
8
|
+
mappedParents = parents
|
9
|
+
.filter((parent) => { var _a; return (_a = parent.object) === null || _a === void 0 ? void 0 : _a.breadcrumbText; })
|
10
|
+
.map((parent, index) => {
|
10
11
|
return {
|
11
12
|
'@type': 'ListItem',
|
12
13
|
position: parents.length - index,
|
13
|
-
name:
|
14
|
+
name: parent.object.breadcrumbText.toString(),
|
14
15
|
item: `${selectedChannel.url}${parent.path}`
|
15
16
|
};
|
16
17
|
});
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"StructuredBreadcrumbData.js","sourceRoot":"","sources":["StructuredBreadcrumbData.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,EAAE,UAAU,EAAE,MAAM,OAAO,CAAC;AAE1C,OAAO,cAAc,MAAM,mBAAmB,CAAC;AAC/C,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAElD,SAAS,wBAAwB,CAAC,EAChC,OAAO,EACP,cAAc,EAIf;IACC,MAAM,EAAE,eAAe,EAAE,GAAG,UAAU,CAAC,cAAc,CAAC,CAAC;IACvD,IAAI,aAAa,GAAe,EAAE,CAAC;IACnC,IAAI,OAAO,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE;QACjC,aAAa,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE
|
1
|
+
{"version":3,"file":"StructuredBreadcrumbData.js","sourceRoot":"","sources":["StructuredBreadcrumbData.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,EAAE,UAAU,EAAE,MAAM,OAAO,CAAC;AAE1C,OAAO,cAAc,MAAM,mBAAmB,CAAC;AAC/C,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAElD,SAAS,wBAAwB,CAAC,EAChC,OAAO,EACP,cAAc,EAIf;IACC,MAAM,EAAE,eAAe,EAAE,GAAG,UAAU,CAAC,cAAc,CAAC,CAAC;IACvD,IAAI,aAAa,GAAe,EAAE,CAAC;IACnC,IAAI,OAAO,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE;QACjC,aAAa,GAAG,OAAO;aACpB,MAAM,CAAC,CAAC,MAAM,EAAE,EAAE,WAAC,OAAA,MAAA,MAAM,CAAC,MAAM,0CAAE,cAAc,CAAA,EAAA,CAAC;aACjD,GAAG,CAAC,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE;YACrB,OAAO;gBACL,OAAO,EAAE,UAAU;gBACnB,QAAQ,EAAE,OAAO,CAAC,MAAM,GAAG,KAAK;gBAChC,IAAI,EAAE,MAAM,CAAC,MAAM,CAAC,cAAc,CAAC,QAAQ,EAAE;gBAC7C,IAAI,EAAE,GAAG,eAAe,CAAC,GAAG,GAAG,MAAM,CAAC,IAAI,EAAE;aAC7C,CAAC;QACJ,CAAC,CAAC,CAAC;QACL,aAAa,CAAC,OAAO,EAAE,CAAC;QAExB,MAAM,IAAI,GAAgC;YACxC,UAAU,EAAE,oBAAoB;YAChC,OAAO,EAAE,gBAAgB;YACzB,eAAe,EAAE;gBACf,GAAG,aAAa;gBAChB;oBACE,OAAO,EAAE,UAAU;oBACnB,QAAQ,EAAE,OAAO,CAAC,MAAM,GAAG,CAAC;oBAC5B,IAAI,EAAE,cAAc,CAAC,QAAQ,EAAE;iBAChC;aACF;SACF,CAAC;QACF,OAAO,oBAAC,cAAc,IAAC,IAAI,EAAE,IAAI,GAAI,CAAC;KACvC;;QAAM,OAAO,IAAI,CAAC;AACrB,CAAC;AAED,OAAO,EAAE,wBAAwB,EAAE,CAAC"}
|
@@ -11,28 +11,48 @@ var __rest = (this && this.__rest) || function (s, e) {
|
|
11
11
|
};
|
12
12
|
import React, { useEffect, useMemo } from 'react';
|
13
13
|
import { useMutation, useQuery } from 'react-apollo';
|
14
|
+
import { emptyProductLists, productListMapToArray, PRODUCT_LISTS_KEY } from '.';
|
14
15
|
import useAuth from '../../components/AuthContext/useAuth';
|
15
16
|
import { useThunkReducer } from '../useThunkReducer';
|
16
|
-
import { loginAction, refreshAction } from './action-creators';
|
17
|
+
import { createListAction, deleteListAction, loginAction, refreshAction } from './action-creators';
|
17
18
|
import { normalizeServerList } from './list-transforms';
|
18
19
|
import { init, reducer } from './product-list-reducer';
|
19
20
|
export const ProductListContext = React.createContext(undefined);
|
20
|
-
// TODO: Provider could take id in order to scope all CRUD to that list id
|
21
21
|
export const ProductListProvider = function ProductListProvider(_a) {
|
22
22
|
var { queries, initialState = {} } = _a, rest = __rest(_a, ["queries", "initialState"]);
|
23
23
|
const { loggedIn } = useAuth();
|
24
24
|
const requestIdRef = React.useRef(null);
|
25
|
-
const { data: serverList } = useQuery(queries.
|
26
|
-
|
27
|
-
skip: !loggedIn,
|
25
|
+
const { data: serverList, client } = useQuery(queries.all, {
|
26
|
+
skip: !loggedIn
|
28
27
|
});
|
28
|
+
const lists = serverList
|
29
|
+
? new Map(serverList.customerProductLists.map(
|
30
|
+
// The default list (name === null) must have listId null
|
31
|
+
(productList) => [
|
32
|
+
productList.name === null ? null : productList.id,
|
33
|
+
normalizeServerList(productList)
|
34
|
+
]))
|
35
|
+
: emptyProductLists();
|
29
36
|
const defaultInitialState = Object.assign({ loggedIn,
|
30
|
-
requestIdRef,
|
37
|
+
requestIdRef,
|
38
|
+
lists }, initialState);
|
31
39
|
const [state, dispatch] = useThunkReducer(reducer, defaultInitialState, (initialState) => init(initialState));
|
32
40
|
const usingLocalList = !state.loggedIn;
|
33
|
-
usePersistLocalList({
|
41
|
+
usePersistLocalList({ lists: state.lists });
|
42
|
+
// When localstorage updates, sync it to reducer state
|
34
43
|
useLocalStorageListener({ refresh });
|
44
|
+
// loginMutation is a mutation to merge product lists
|
35
45
|
const [loginMutation] = useMutation(queries.login);
|
46
|
+
// To be used to fetch all lists of user after login
|
47
|
+
const fetchAll = () => client.query({ query: queries.all });
|
48
|
+
const [createMutation] = useMutation(queries.createList);
|
49
|
+
const [deleteListMutation] = useMutation(queries.deleteList);
|
50
|
+
function deleteList(listId) {
|
51
|
+
dispatch(deleteListAction({ listId, deleteListMutation }));
|
52
|
+
}
|
53
|
+
function createList(name) {
|
54
|
+
dispatch(createListAction({ name, createMutation }));
|
55
|
+
}
|
36
56
|
function refresh() {
|
37
57
|
dispatch(refreshAction());
|
38
58
|
}
|
@@ -40,14 +60,16 @@ export const ProductListProvider = function ProductListProvider(_a) {
|
|
40
60
|
if (loggedIn === state.loggedIn)
|
41
61
|
return;
|
42
62
|
loggedIn
|
43
|
-
? dispatch(loginAction({ loginMutation }))
|
44
|
-
: dispatch({ type: 'LOGOUT' });
|
63
|
+
? dispatch(loginAction({ loginMutation, fetchAll })) // Merge logged out lists to account
|
64
|
+
: dispatch({ type: 'LOGOUT' }); // Clear lists
|
45
65
|
}, [dispatch, loggedIn, loginMutation, state.loggedIn]);
|
46
66
|
const value = useMemo(() => ({
|
67
|
+
createList,
|
68
|
+
deleteList,
|
47
69
|
state,
|
48
70
|
dispatch,
|
49
71
|
queries,
|
50
|
-
usingLocalList
|
72
|
+
usingLocalList
|
51
73
|
}), [dispatch, queries, state, usingLocalList]);
|
52
74
|
// We spread props here so during testing we can override value
|
53
75
|
return React.createElement(ProductListContext.Provider, Object.assign({ value: value }, rest));
|
@@ -55,15 +77,16 @@ export const ProductListProvider = function ProductListProvider(_a) {
|
|
55
77
|
/**
|
56
78
|
* Persist local list to localStorage on every change
|
57
79
|
*/
|
58
|
-
function usePersistLocalList({
|
80
|
+
function usePersistLocalList({ lists }) {
|
81
|
+
const productListArray = productListMapToArray(lists);
|
59
82
|
useEffect(() => {
|
60
|
-
localStorage.setItem(
|
61
|
-
}, [
|
83
|
+
localStorage.setItem(PRODUCT_LISTS_KEY, JSON.stringify(productListArray));
|
84
|
+
}, [lists]);
|
62
85
|
}
|
63
86
|
function useLocalStorageListener({ refresh }) {
|
64
87
|
useEffect(() => {
|
65
88
|
const listener = (e) => {
|
66
|
-
if (e.storageArea === localStorage && e.key ===
|
89
|
+
if (e.storageArea === localStorage && e.key === PRODUCT_LISTS_KEY) {
|
67
90
|
refresh();
|
68
91
|
}
|
69
92
|
};
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"ProductListContext.js","sourceRoot":"","sources":["ProductListContext.tsx"],"names":[],"mappings":";;;;;;;;;;;AAAA,OAAO,KAAK,EAAE,EAAW,SAAS,EAAE,OAAO,EAAE,MAAM,OAAO,CAAC;AAC3D,OAAO,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAC;
|
1
|
+
{"version":3,"file":"ProductListContext.js","sourceRoot":"","sources":["ProductListContext.tsx"],"names":[],"mappings":"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"}
|
@@ -1,13 +1,23 @@
|
|
1
1
|
import React from 'react';
|
2
2
|
import { MutationFunction } from 'react-apollo';
|
3
|
-
import { AddToListMutation, ProductListItemOptions, ProductListState, RemoveFromListMutation, UpdateListInput, UpdateListOptions } from '.';
|
3
|
+
import { AddToListMutation, ProductListItemOptions, ProductListState, ProductListId, RemoveFromListMutation, UpdateListInput, UpdateListOptions } from '.';
|
4
4
|
import { Mutation } from '../../types';
|
5
5
|
import { Action } from './product-list-reducer';
|
6
|
-
export declare function loginAction({ loginMutation }: {
|
7
|
-
loginMutation: MutationFunction<Mutation
|
6
|
+
export declare function loginAction({ loginMutation, fetchAll }: {
|
7
|
+
loginMutation: MutationFunction<Pick<Mutation, 'addToCustomerProductList'>>;
|
8
|
+
fetchAll: any;
|
8
9
|
}): (dispatch: React.Dispatch<Action>, getState: () => ProductListState) => void;
|
9
10
|
export declare function refreshAction(): (dispatch: React.Dispatch<Action>) => void;
|
10
|
-
export declare function
|
11
|
+
export declare function createListAction({ createMutation, name }: {
|
12
|
+
createMutation: MutationFunction<Pick<Mutation, 'createCustomerProductList'>>;
|
13
|
+
name: string;
|
14
|
+
}): (dispatch: React.Dispatch<Action>) => void;
|
15
|
+
export declare function deleteListAction({ listId, deleteListMutation }: {
|
16
|
+
listId: ProductListId;
|
17
|
+
deleteListMutation: MutationFunction<Pick<Mutation, 'deleteCustomerProductList'>>;
|
18
|
+
}): (dispatch: React.Dispatch<Action>) => void;
|
19
|
+
export declare function updateAction({ listId, updateAPI, removeMutation, addMutation, options, articleNumber, variantToReplace, variantArticleNumber }: {
|
20
|
+
listId: ProductListId;
|
11
21
|
updateAPI: boolean;
|
12
22
|
removeMutation: RemoveFromListMutation;
|
13
23
|
addMutation: AddToListMutation;
|
@@ -16,16 +26,19 @@ export declare function updateAction({ updateAPI, removeMutation, addMutation, o
|
|
16
26
|
variantArticleNumber: string;
|
17
27
|
articleNumber: string;
|
18
28
|
}): (dispatch: React.Dispatch<Action>, getState: () => ProductListState) => void;
|
19
|
-
export declare function removeAction({ updateAPI, articleNumber, variantArticleNumber, removeMutation }: UpdateListInput & {
|
29
|
+
export declare function removeAction({ listId, updateAPI, articleNumber, variantArticleNumber, removeMutation }: UpdateListInput & {
|
30
|
+
listId: ProductListId;
|
20
31
|
removeMutation: RemoveFromListMutation;
|
21
32
|
updateAPI: boolean;
|
22
33
|
articleNumber: string;
|
23
34
|
}): (dispatch: React.Dispatch<Action>, getState: () => ProductListState) => void;
|
24
|
-
export declare function clearAction({ updateAPI, removeMutation }: {
|
35
|
+
export declare function clearAction({ listId, updateAPI, removeMutation }: {
|
36
|
+
listId: ProductListId;
|
25
37
|
updateAPI: boolean;
|
26
38
|
removeMutation: RemoveFromListMutation;
|
27
39
|
}): (dispatch: React.Dispatch<Action>, getState: () => ProductListState) => void;
|
28
|
-
export declare function addAction({ articleNumber, variantArticleNumber, addMutation, options, updateAPI }: UpdateListInput & {
|
40
|
+
export declare function addAction({ listId, articleNumber, variantArticleNumber, addMutation, options, updateAPI }: UpdateListInput & {
|
41
|
+
listId: ProductListId;
|
29
42
|
addMutation: AddToListMutation;
|
30
43
|
options: ProductListItemOptions;
|
31
44
|
updateAPI: boolean;
|