@jetshop/core 5.10.0 → 5.11.0
Sign up to get free protection for your applications and to get access to all the features.
- 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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"}
|