@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
@@ -5,8 +5,8 @@ import {
|
|
5
5
|
normalizeServerList
|
6
6
|
} from './list-transforms';
|
7
7
|
|
8
|
-
const
|
9
|
-
|
8
|
+
const MOCK_LIST_ITEMS = {
|
9
|
+
6952315: {
|
10
10
|
options: { quantity: 1 },
|
11
11
|
variants: {
|
12
12
|
'6952315-170-white': {
|
@@ -17,7 +17,7 @@ const MOCK_LIST = {
|
|
17
17
|
}
|
18
18
|
}
|
19
19
|
},
|
20
|
-
|
20
|
+
502935480: {
|
21
21
|
variants: null,
|
22
22
|
options: {
|
23
23
|
quantity: 1
|
@@ -161,8 +161,7 @@ const MOCK_PRODUCT_QUERY_RESULT = {
|
|
161
161
|
{
|
162
162
|
alt: '441728',
|
163
163
|
title: 'Belt Light',
|
164
|
-
url:
|
165
|
-
'https://www.demostore.se/pub_images/original/VARIANTIMAGE.jpg',
|
164
|
+
url: 'https://www.demostore.se/pub_images/original/VARIANTIMAGE.jpg',
|
166
165
|
__typename: 'ProductImage'
|
167
166
|
}
|
168
167
|
],
|
@@ -181,8 +180,7 @@ const MOCK_PRODUCT_QUERY_RESULT = {
|
|
181
180
|
{
|
182
181
|
alt: 'Belt Light',
|
183
182
|
title: 'Belt Light',
|
184
|
-
url:
|
185
|
-
'https://www.demostore.se/pub_images/original/441728.jpg',
|
183
|
+
url: 'https://www.demostore.se/pub_images/original/441728.jpg',
|
186
184
|
__typename: 'ProductImage'
|
187
185
|
}
|
188
186
|
],
|
@@ -201,8 +199,7 @@ const MOCK_PRODUCT_QUERY_RESULT = {
|
|
201
199
|
{
|
202
200
|
alt: 'Belt Light',
|
203
201
|
title: 'Belt Light',
|
204
|
-
url:
|
205
|
-
'https://www.demostore.se/pub_images/original/441728.jpg',
|
202
|
+
url: 'https://www.demostore.se/pub_images/original/441728.jpg',
|
206
203
|
__typename: 'ProductImage'
|
207
204
|
}
|
208
205
|
],
|
@@ -245,8 +242,7 @@ const MOCK_PRODUCT_QUERY_RESULT = {
|
|
245
242
|
badges: [
|
246
243
|
{
|
247
244
|
name: 'SALE Top Left',
|
248
|
-
url:
|
249
|
-
'https://www.demostore.se/M1/production/images/overlay/overlay8_en-GB.png',
|
245
|
+
url: 'https://www.demostore.se/M1/production/images/overlay/overlay8_en-GB.png',
|
250
246
|
location: 'TOP_LEFT',
|
251
247
|
style: '',
|
252
248
|
text: '',
|
@@ -268,7 +264,10 @@ const MOCK_PRODUCT_QUERY_RESULT = {
|
|
268
264
|
|
269
265
|
describe('flattenList', () => {
|
270
266
|
it('takes a normalized list and returns an array of items', () => {
|
271
|
-
const flattened = flattenList(
|
267
|
+
const flattened = flattenList({
|
268
|
+
name: 'My list',
|
269
|
+
items: MOCK_LIST_ITEMS
|
270
|
+
});
|
272
271
|
|
273
272
|
expect(flattened).toMatchSnapshot();
|
274
273
|
});
|
@@ -277,16 +276,19 @@ describe('flattenList', () => {
|
|
277
276
|
const options = { quantity: 1 };
|
278
277
|
|
279
278
|
const list = {
|
280
|
-
|
281
|
-
|
282
|
-
|
283
|
-
|
284
|
-
|
285
|
-
|
286
|
-
|
287
|
-
|
288
|
-
|
289
|
-
|
279
|
+
name: 'My list',
|
280
|
+
items: {
|
281
|
+
baseProduct: {
|
282
|
+
options: null,
|
283
|
+
variants: {
|
284
|
+
'variant-one': {
|
285
|
+
options,
|
286
|
+
parentArticleNumber: 'baseProduct'
|
287
|
+
},
|
288
|
+
'variant-two': {
|
289
|
+
options,
|
290
|
+
parentArticleNumber: 'baseProduct'
|
291
|
+
}
|
290
292
|
}
|
291
293
|
}
|
292
294
|
}
|
@@ -301,16 +303,19 @@ describe('flattenList', () => {
|
|
301
303
|
const options = { quantity: 1 };
|
302
304
|
|
303
305
|
const list = {
|
304
|
-
|
305
|
-
|
306
|
-
|
307
|
-
|
308
|
-
|
309
|
-
|
310
|
-
|
311
|
-
|
312
|
-
|
313
|
-
|
306
|
+
name: 'My funky list',
|
307
|
+
items: {
|
308
|
+
baseProduct: {
|
309
|
+
options: options,
|
310
|
+
variants: {
|
311
|
+
'variant-one': {
|
312
|
+
options,
|
313
|
+
parentArticleNumber: 'baseProduct'
|
314
|
+
},
|
315
|
+
'variant-two': {
|
316
|
+
options,
|
317
|
+
parentArticleNumber: 'baseProduct'
|
318
|
+
}
|
314
319
|
}
|
315
320
|
}
|
316
321
|
}
|
@@ -341,7 +346,7 @@ describe('getVariantFromProductDetails', () => {
|
|
341
346
|
|
342
347
|
expect(result).toBe(
|
343
348
|
MOCK_PRODUCT_WITH_VARIANTS.variants.values.find(
|
344
|
-
variant => variant.articleNumber === '441728-37'
|
349
|
+
(variant) => variant.articleNumber === '441728-37'
|
345
350
|
)
|
346
351
|
);
|
347
352
|
});
|
@@ -396,91 +401,89 @@ describe('normalizeServerList', () => {
|
|
396
401
|
let serverList;
|
397
402
|
beforeEach(() => {
|
398
403
|
serverList = {
|
399
|
-
|
400
|
-
|
401
|
-
|
402
|
-
|
403
|
-
|
404
|
-
|
405
|
-
articleNumber: 'without-variants'
|
406
|
-
},
|
407
|
-
variant: null
|
404
|
+
items: [
|
405
|
+
{
|
406
|
+
quantity: 1,
|
407
|
+
description: 'hello',
|
408
|
+
product: {
|
409
|
+
articleNumber: 'without-variants'
|
408
410
|
},
|
409
|
-
|
410
|
-
|
411
|
-
|
412
|
-
|
413
|
-
|
414
|
-
|
415
|
-
|
416
|
-
articleNumber: 'the-variant'
|
417
|
-
}
|
411
|
+
variant: null
|
412
|
+
},
|
413
|
+
{
|
414
|
+
quantity: 1,
|
415
|
+
description: 'hello',
|
416
|
+
product: {
|
417
|
+
articleNumber: 'with-variants'
|
418
418
|
},
|
419
|
-
{
|
420
|
-
|
421
|
-
|
422
|
-
|
423
|
-
|
424
|
-
|
425
|
-
|
426
|
-
|
427
|
-
|
419
|
+
variant: {
|
420
|
+
articleNumber: 'the-variant'
|
421
|
+
}
|
422
|
+
},
|
423
|
+
{
|
424
|
+
quantity: 1,
|
425
|
+
description: 'hello',
|
426
|
+
product: {
|
427
|
+
articleNumber: 'with-many-variants'
|
428
428
|
},
|
429
|
-
{
|
430
|
-
|
431
|
-
|
432
|
-
|
433
|
-
|
434
|
-
|
435
|
-
|
436
|
-
|
437
|
-
|
429
|
+
variant: {
|
430
|
+
articleNumber: 'variant-one'
|
431
|
+
}
|
432
|
+
},
|
433
|
+
{
|
434
|
+
quantity: 1,
|
435
|
+
description: 'hello',
|
436
|
+
product: {
|
437
|
+
articleNumber: 'with-many-variants'
|
438
438
|
},
|
439
|
-
{
|
440
|
-
|
441
|
-
|
442
|
-
|
443
|
-
|
444
|
-
|
445
|
-
|
439
|
+
variant: {
|
440
|
+
articleNumber: 'variant-two'
|
441
|
+
}
|
442
|
+
},
|
443
|
+
{
|
444
|
+
quantity: 1,
|
445
|
+
description: 'hello',
|
446
|
+
product: {
|
447
|
+
articleNumber: 'with-base-and-variants'
|
446
448
|
},
|
447
|
-
|
448
|
-
|
449
|
-
|
450
|
-
|
451
|
-
|
452
|
-
|
453
|
-
|
454
|
-
|
455
|
-
|
449
|
+
variant: null
|
450
|
+
},
|
451
|
+
{
|
452
|
+
quantity: 1,
|
453
|
+
description: 'hello',
|
454
|
+
product: {
|
455
|
+
articleNumber: 'with-base-and-variants'
|
456
|
+
},
|
457
|
+
variant: {
|
458
|
+
articleNumber: 'variant-one'
|
456
459
|
}
|
457
|
-
|
458
|
-
|
460
|
+
}
|
461
|
+
]
|
459
462
|
};
|
460
463
|
});
|
461
|
-
it('returns an empty object if an invalid list if passed in', () => {
|
462
|
-
const result = normalizeServerList({ not: 'a list' });
|
463
464
|
|
464
|
-
expect(result).toEqual({});
|
465
|
-
});
|
466
465
|
it('creates the expected shape', () => {
|
467
466
|
const result = normalizeServerList(serverList);
|
468
467
|
|
469
|
-
expect(result['without-variants'].variants).toBe(null);
|
470
|
-
expect(result['without-variants'].options.quantity).toBe(1);
|
468
|
+
expect(result.items['without-variants'].variants).toBe(null);
|
469
|
+
expect(result.items['without-variants'].options.quantity).toBe(1);
|
471
470
|
|
472
|
-
expect(result['with-variants'].options).toBe(null);
|
471
|
+
expect(result.items['with-variants'].options).toBe(null);
|
473
472
|
expect(
|
474
|
-
result['with-variants'].variants['the-variant'].options.quantity
|
473
|
+
result.items['with-variants'].variants['the-variant'].options.quantity
|
475
474
|
).toBe(1);
|
476
475
|
|
477
|
-
expect(result['with-many-variants'].options).toBe(null);
|
478
|
-
expect(
|
479
|
-
|
476
|
+
expect(result.items['with-many-variants'].options).toBe(null);
|
477
|
+
expect(
|
478
|
+
result.items['with-many-variants'].variants['variant-one']
|
479
|
+
).toBeDefined();
|
480
|
+
expect(
|
481
|
+
result.items['with-many-variants'].variants['variant-two']
|
482
|
+
).toBeDefined();
|
480
483
|
|
481
|
-
expect(result['with-base-and-variants'].options).toBeDefined();
|
484
|
+
expect(result.items['with-base-and-variants'].options).toBeDefined();
|
482
485
|
expect(
|
483
|
-
result['with-base-and-variants'].variants['variant-one']
|
486
|
+
result.items['with-base-and-variants'].variants['variant-one']
|
484
487
|
).toBeDefined();
|
485
488
|
});
|
486
489
|
});
|
@@ -1,20 +1,15 @@
|
|
1
|
-
|
2
|
-
import { ProductListState, ProductListItemOptions, UpdateListOptions, NormalizedProductList } from '.';
|
1
|
+
import { ProductListMap, ProductListState, ProductListItemOptions, ProductListId, UpdateListOptions, NormalizedProductList } from '.';
|
3
2
|
export declare function reducer(state: ProductListState, action: Action): ProductListState;
|
4
|
-
export declare function init(initialState: ProductListState): ProductListState
|
5
|
-
|
6
|
-
loggedIn: boolean;
|
7
|
-
requestIdRef: import("react").MutableRefObject<string>;
|
8
|
-
};
|
9
|
-
export declare function addVariantToList(state: ProductListState, articleNumber: string, { variantArticleNumber, options }: {
|
3
|
+
export declare function init(initialState: ProductListState): ProductListState;
|
4
|
+
export declare function addVariantToList(state: ProductListState, listId: ProductListId, articleNumber: string, { variantArticleNumber, options }: {
|
10
5
|
variantArticleNumber?: string;
|
11
6
|
options: ProductListItemOptions;
|
12
7
|
}): ProductListState;
|
13
|
-
export declare function addBaseProductToList(state: ProductListState, articleNumber: string, options: ProductListItemOptions): ProductListState;
|
14
|
-
export declare function removeFromList(state: ProductListState, articleNumber: string, { variantArticleNumber }: {
|
8
|
+
export declare function addBaseProductToList(state: ProductListState, listId: ProductListId, articleNumber: string, options: ProductListItemOptions): ProductListState;
|
9
|
+
export declare function removeFromList(state: ProductListState, listId: ProductListId, articleNumber: string, { variantArticleNumber }: {
|
15
10
|
variantArticleNumber?: string;
|
16
11
|
}): ProductListState;
|
17
|
-
export declare function replaceItemInList(state: ProductListState, articleNumber: string, { variantToReplace, variantArticleNumber, options }: {
|
12
|
+
export declare function replaceItemInList(state: ProductListState, listId: ProductListId, articleNumber: string, { variantToReplace, variantArticleNumber, options }: {
|
18
13
|
variantToReplace?: string;
|
19
14
|
variantArticleNumber: string;
|
20
15
|
options: ProductListItemOptions;
|
@@ -22,6 +17,7 @@ export declare function replaceItemInList(state: ProductListState, articleNumber
|
|
22
17
|
export declare type Action = {
|
23
18
|
type: 'UPDATE';
|
24
19
|
payload: {
|
20
|
+
listId: ProductListId;
|
25
21
|
articleNumber: string;
|
26
22
|
variantArticleNumber: string;
|
27
23
|
variantToReplace?: string;
|
@@ -30,6 +26,7 @@ export declare type Action = {
|
|
30
26
|
} | {
|
31
27
|
type: 'ADD';
|
32
28
|
payload: {
|
29
|
+
listId: ProductListId;
|
33
30
|
articleNumber: string;
|
34
31
|
variantArticleNumber?: string;
|
35
32
|
options: UpdateListOptions;
|
@@ -37,17 +34,43 @@ export declare type Action = {
|
|
37
34
|
} | {
|
38
35
|
type: 'REMOVE';
|
39
36
|
payload: {
|
37
|
+
listId: ProductListId;
|
40
38
|
articleNumber: string;
|
41
39
|
variantArticleNumber?: string;
|
42
40
|
};
|
43
41
|
} | {
|
44
|
-
type: '
|
42
|
+
type: 'CLEAR_ITEMS';
|
43
|
+
payload: {
|
44
|
+
listId: ProductListId;
|
45
|
+
};
|
45
46
|
} | {
|
46
47
|
type: 'LOGOUT';
|
47
48
|
} | {
|
48
49
|
type: 'LOGIN';
|
49
|
-
payload:
|
50
|
+
payload: {
|
51
|
+
listId: ProductListId;
|
52
|
+
list: NormalizedProductList;
|
53
|
+
};
|
50
54
|
} | {
|
51
55
|
type: 'REPLACE';
|
52
|
-
payload:
|
56
|
+
payload: {
|
57
|
+
listId: ProductListId;
|
58
|
+
list: NormalizedProductList;
|
59
|
+
};
|
60
|
+
} | {
|
61
|
+
type: 'CREATE_LIST';
|
62
|
+
payload: {
|
63
|
+
listId: ProductListId;
|
64
|
+
list: NormalizedProductList;
|
65
|
+
};
|
66
|
+
} | {
|
67
|
+
type: 'SET_LISTS';
|
68
|
+
payload: {
|
69
|
+
lists: ProductListMap;
|
70
|
+
};
|
71
|
+
} | {
|
72
|
+
type: 'DELETE_LIST';
|
73
|
+
payload: {
|
74
|
+
listId: ProductListId;
|
75
|
+
};
|
53
76
|
};
|
@@ -1,47 +1,85 @@
|
|
1
|
-
import produce from 'immer';
|
1
|
+
import produce, { enableMapSet } from 'immer';
|
2
|
+
// The Product lists are stored as a Map so need to enable Map support for Immer
|
3
|
+
enableMapSet();
|
4
|
+
import { emptyProductLists, PRODUCT_LISTS_KEY, productListArrayToMap } from '.';
|
2
5
|
export function reducer(state, action) {
|
3
6
|
switch (action.type) {
|
4
7
|
case 'LOGIN':
|
5
|
-
return produce(state, draft => {
|
8
|
+
return produce(state, (draft) => {
|
6
9
|
draft.loggedIn = true;
|
7
|
-
|
10
|
+
const { list, listId } = action.payload;
|
11
|
+
draft.lists.set(listId, list);
|
8
12
|
});
|
9
13
|
case 'LOGOUT': {
|
10
|
-
return produce(state, draft => {
|
14
|
+
return produce(state, (draft) => {
|
11
15
|
draft.loggedIn = false;
|
12
|
-
draft.
|
16
|
+
draft.lists = emptyProductLists();
|
13
17
|
});
|
14
18
|
}
|
15
19
|
case 'UPDATE': {
|
16
|
-
const { articleNumber, variantArticleNumber, options, variantToReplace } = action.payload;
|
17
|
-
return replaceItemInList(state, articleNumber, {
|
20
|
+
const { listId, articleNumber, variantArticleNumber, options, variantToReplace } = action.payload;
|
21
|
+
return replaceItemInList(state, listId, articleNumber, {
|
18
22
|
variantArticleNumber,
|
19
23
|
variantToReplace,
|
20
24
|
options
|
21
25
|
});
|
22
26
|
}
|
27
|
+
case 'SET_LISTS': {
|
28
|
+
return produce(state, (draft) => {
|
29
|
+
draft.lists = action.payload.lists;
|
30
|
+
});
|
31
|
+
}
|
32
|
+
// TODO
|
33
|
+
//case 'UPDATE_LIST': {
|
34
|
+
// return produce(state, (draft) => {
|
35
|
+
// const { listId, update } = action.payload
|
36
|
+
// const list = draft.lists.get(listId)
|
37
|
+
// list.name = update.name
|
38
|
+
// //...
|
39
|
+
// })
|
40
|
+
//}
|
23
41
|
case 'ADD': {
|
24
|
-
const { variantArticleNumber, articleNumber, options } = action.payload;
|
42
|
+
const { listId, variantArticleNumber, articleNumber, options } = action.payload;
|
25
43
|
if (variantArticleNumber) {
|
26
|
-
return addVariantToList(state, articleNumber, {
|
44
|
+
return addVariantToList(state, listId, articleNumber, {
|
27
45
|
variantArticleNumber,
|
28
46
|
options
|
29
47
|
});
|
30
48
|
}
|
31
49
|
else {
|
32
|
-
return addBaseProductToList(state, articleNumber, options);
|
50
|
+
return addBaseProductToList(state, listId, articleNumber, options);
|
33
51
|
}
|
34
52
|
}
|
35
53
|
case 'REMOVE': {
|
36
|
-
const { variantArticleNumber, articleNumber } = action.payload;
|
37
|
-
const list = removeFromList(state, articleNumber, {
|
54
|
+
const { listId, variantArticleNumber, articleNumber } = action.payload;
|
55
|
+
const list = removeFromList(state, listId, articleNumber, {
|
38
56
|
variantArticleNumber
|
39
57
|
});
|
40
58
|
return list;
|
41
59
|
}
|
42
60
|
case 'REPLACE': {
|
43
|
-
return produce(state, draft => {
|
44
|
-
|
61
|
+
return produce(state, (draft) => {
|
62
|
+
const { list, listId } = action.payload;
|
63
|
+
draft.lists.set(listId, list);
|
64
|
+
});
|
65
|
+
}
|
66
|
+
case 'CLEAR_ITEMS': {
|
67
|
+
return produce(state, (draft) => {
|
68
|
+
const { listId } = action.payload;
|
69
|
+
const list = draft.lists.get(listId);
|
70
|
+
list.items = {};
|
71
|
+
});
|
72
|
+
}
|
73
|
+
case 'CREATE_LIST': {
|
74
|
+
return produce(state, (draft) => {
|
75
|
+
const { list, listId } = action.payload;
|
76
|
+
draft.lists.set(listId, list);
|
77
|
+
});
|
78
|
+
}
|
79
|
+
case 'DELETE_LIST': {
|
80
|
+
return produce(state, (draft) => {
|
81
|
+
const { listId } = action.payload;
|
82
|
+
draft.lists.delete(listId);
|
45
83
|
});
|
46
84
|
}
|
47
85
|
default:
|
@@ -51,23 +89,43 @@ export function reducer(state, action) {
|
|
51
89
|
export function init(initialState) {
|
52
90
|
if (typeof window === 'undefined')
|
53
91
|
return initialState;
|
92
|
+
/**
|
93
|
+
* Migrate any legacy product list to the new format
|
94
|
+
*
|
95
|
+
* TODO Remove this code in next major release!
|
96
|
+
*/
|
97
|
+
const LEGACY_LIST_KEY = 'productList';
|
98
|
+
const legacyListData = JSON.parse(window.localStorage.getItem(LEGACY_LIST_KEY));
|
99
|
+
if (legacyListData) {
|
100
|
+
const defaultList = initialState.lists.get(null);
|
101
|
+
Object.assign(defaultList.items, legacyListData);
|
102
|
+
window.localStorage.removeItem(LEGACY_LIST_KEY);
|
103
|
+
return {
|
104
|
+
lists: initialState.lists,
|
105
|
+
loggedIn: initialState.loggedIn,
|
106
|
+
requestIdRef: initialState.requestIdRef
|
107
|
+
};
|
108
|
+
}
|
109
|
+
const localStorageProductLists = JSON.parse(window.localStorage.getItem(PRODUCT_LISTS_KEY));
|
110
|
+
const lists = (localStorageProductLists &&
|
111
|
+
productListArrayToMap(localStorageProductLists)) ||
|
112
|
+
initialState.lists;
|
54
113
|
const updatedState = {
|
55
|
-
|
56
|
-
initialState.list ||
|
57
|
-
null,
|
114
|
+
lists,
|
58
115
|
loggedIn: initialState.loggedIn,
|
59
116
|
requestIdRef: initialState.requestIdRef
|
60
117
|
};
|
61
118
|
return updatedState;
|
62
119
|
}
|
63
|
-
export function addVariantToList(state, articleNumber, { variantArticleNumber, options }) {
|
120
|
+
export function addVariantToList(state, listId, articleNumber, { variantArticleNumber, options }) {
|
64
121
|
// If the article number exists, update it
|
65
122
|
// Otherwise create a new entry
|
66
|
-
return produce(state, draft => {
|
123
|
+
return produce(state, (draft) => {
|
67
124
|
var _a, _b;
|
68
|
-
|
69
|
-
|
70
|
-
|
125
|
+
const items = draft.lists.get(listId).items;
|
126
|
+
items[articleNumber] = {
|
127
|
+
options: ((_a = items[articleNumber]) === null || _a === void 0 ? void 0 : _a.options) || null,
|
128
|
+
variants: produce(((_b = items[articleNumber]) === null || _b === void 0 ? void 0 : _b.variants) || {}, (draft) => {
|
71
129
|
draft[variantArticleNumber] = {
|
72
130
|
options,
|
73
131
|
parentArticleNumber: articleNumber
|
@@ -76,55 +134,60 @@ export function addVariantToList(state, articleNumber, { variantArticleNumber, o
|
|
76
134
|
};
|
77
135
|
});
|
78
136
|
}
|
79
|
-
export function addBaseProductToList(state, articleNumber, options) {
|
80
|
-
return produce(state, draft => {
|
137
|
+
export function addBaseProductToList(state, listId, articleNumber, options) {
|
138
|
+
return produce(state, (draft) => {
|
81
139
|
var _a;
|
82
|
-
|
83
|
-
|
140
|
+
const items = draft.lists.get(listId).items;
|
141
|
+
items[articleNumber] = {
|
142
|
+
variants: ((_a = items[articleNumber]) === null || _a === void 0 ? void 0 : _a.variants) || null,
|
84
143
|
options
|
85
144
|
};
|
86
145
|
});
|
87
146
|
}
|
88
|
-
export function removeFromList(state, articleNumber, { variantArticleNumber }) {
|
147
|
+
export function removeFromList(state, listId, articleNumber, { variantArticleNumber }) {
|
89
148
|
if (variantArticleNumber) {
|
90
|
-
return produce(state, draft => {
|
91
|
-
|
92
|
-
|
93
|
-
|
94
|
-
|
149
|
+
return produce(state, (draft) => {
|
150
|
+
const items = draft.lists.get(listId).items;
|
151
|
+
delete items[articleNumber].variants[variantArticleNumber];
|
152
|
+
if (Object.keys(items[articleNumber].variants).length === 0 &&
|
153
|
+
items[articleNumber].options === null) {
|
154
|
+
delete items[articleNumber];
|
95
155
|
}
|
96
156
|
});
|
97
157
|
}
|
98
158
|
else {
|
99
|
-
return produce(state, draft => {
|
159
|
+
return produce(state, (draft) => {
|
100
160
|
var _a;
|
101
|
-
|
102
|
-
|
161
|
+
const items = draft.lists.get(listId).items;
|
162
|
+
if ((_a = items[articleNumber]) === null || _a === void 0 ? void 0 : _a.variants) {
|
163
|
+
items[articleNumber].options = null;
|
103
164
|
}
|
104
165
|
else {
|
105
|
-
delete
|
166
|
+
delete items[articleNumber];
|
106
167
|
}
|
107
168
|
});
|
108
169
|
}
|
109
170
|
}
|
110
|
-
export function replaceItemInList(state, articleNumber, { variantToReplace, variantArticleNumber, options }) {
|
171
|
+
export function replaceItemInList(state, listId, articleNumber, { variantToReplace, variantArticleNumber, options }) {
|
111
172
|
if (variantToReplace) {
|
112
|
-
return produce(state, draft => {
|
173
|
+
return produce(state, (draft) => {
|
113
174
|
// Replacing is a delete + an add
|
114
|
-
const
|
175
|
+
const items = draft.lists.get(listId).items;
|
176
|
+
const variants = items[articleNumber].variants;
|
115
177
|
delete variants[variantToReplace];
|
116
|
-
|
178
|
+
items[articleNumber].variants = Object.assign(Object.assign({}, variants), { [variantArticleNumber]: {
|
117
179
|
options,
|
118
180
|
parentArticleNumber: articleNumber
|
119
181
|
} });
|
120
182
|
});
|
121
183
|
}
|
122
184
|
else {
|
123
|
-
return produce(state, draft => {
|
185
|
+
return produce(state, (draft) => {
|
124
186
|
var _a;
|
125
|
-
|
187
|
+
const items = draft.lists.get(listId).items;
|
188
|
+
items[articleNumber] = {
|
126
189
|
options: null,
|
127
|
-
variants: Object.assign(Object.assign({}, (_a =
|
190
|
+
variants: Object.assign(Object.assign({}, (_a = items[articleNumber]) === null || _a === void 0 ? void 0 : _a.variants), { [variantArticleNumber]: {
|
128
191
|
options,
|
129
192
|
parentArticleNumber: articleNumber
|
130
193
|
} })
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"product-list-reducer.js","sourceRoot":"","sources":["product-list-reducer.ts"],"names":[],"mappings":"AAAA,OAAO,OAAO,MAAM,OAAO,CAAC;
|
1
|
+
{"version":3,"file":"product-list-reducer.js","sourceRoot":"","sources":["product-list-reducer.ts"],"names":[],"mappings":"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"}
|