@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.
Files changed (69) hide show
  1. package/ChannelHandler/ChannelHandler.d.ts +9 -13
  2. package/ChannelHandler/ChannelHandler.js +16 -63
  3. package/ChannelHandler/ChannelHandler.js.map +1 -1
  4. package/ChannelHandler/channelUtils.d.ts +13 -0
  5. package/ChannelHandler/channelUtils.js +26 -15
  6. package/ChannelHandler/channelUtils.js.map +1 -1
  7. package/ChannelHandler/redirectUtils.d.ts +3 -0
  8. package/ChannelHandler/redirectUtils.js +48 -0
  9. package/ChannelHandler/redirectUtils.js.map +1 -0
  10. package/ChannelHandler/redirectUtils.test.js +8 -0
  11. package/analytics/AnalyticsProvider.js +1 -1
  12. package/analytics/AnalyticsProvider.js.map +1 -1
  13. package/boot/SharedTree.js +1 -1
  14. package/boot/SharedTree.js.map +1 -1
  15. package/boot/apollo.d.ts +5 -3
  16. package/boot/apollo.js +9 -13
  17. package/boot/apollo.js.map +1 -1
  18. package/boot/client/startClient.js +5 -10
  19. package/boot/client/startClient.js.map +1 -1
  20. package/boot/server/createRenderer.js +8 -7
  21. package/boot/server/createRenderer.js.map +1 -1
  22. package/boot/server/index.js +2 -2
  23. package/boot/server/index.js.map +1 -1
  24. package/boot/server/persistedQueries/__tests__/getPersistedQueriesForRequest.test.js +53 -39
  25. package/boot/server/persistedQueries/getPersistedQueriesForRequest.js +2 -2
  26. package/boot/server/persistedQueries/getPersistedQueriesForRequest.js.map +1 -1
  27. package/components/Auth/CustomerUpdateForm.js +7 -7
  28. package/components/Auth/CustomerUpdateForm.js.map +1 -1
  29. package/components/ChannelContext/ChannelProvider.d.ts +1 -3
  30. package/components/ChannelContext/ChannelProvider.js +6 -13
  31. package/components/ChannelContext/ChannelProvider.js.map +1 -1
  32. package/components/ChannelContext/ChannelProvider.test.js +110 -0
  33. package/components/Mutation/cartMutationUtils.js +7 -6
  34. package/components/Mutation/cartMutationUtils.js.map +1 -1
  35. package/components/Query/CartProvider.js +31 -21
  36. package/components/Query/CartProvider.js.map +1 -1
  37. package/components/StructuredData/StructuredBreadcrumbData.js +4 -3
  38. package/components/StructuredData/StructuredBreadcrumbData.js.map +1 -1
  39. package/hooks/ProductList/ProductListContext.js +37 -14
  40. package/hooks/ProductList/ProductListContext.js.map +1 -1
  41. package/hooks/ProductList/action-creators.d.ts +20 -7
  42. package/hooks/ProductList/action-creators.js +125 -31
  43. package/hooks/ProductList/action-creators.js.map +1 -1
  44. package/hooks/ProductList/index.d.ts +34 -8
  45. package/hooks/ProductList/index.js +19 -0
  46. package/hooks/ProductList/index.js.map +1 -1
  47. package/hooks/ProductList/list-transforms.d.ts +2 -2
  48. package/hooks/ProductList/list-transforms.js +22 -22
  49. package/hooks/ProductList/list-transforms.js.map +1 -1
  50. package/hooks/ProductList/list-transforms.test.js +103 -100
  51. package/hooks/ProductList/product-list-reducer.d.ts +37 -14
  52. package/hooks/ProductList/product-list-reducer.js +106 -43
  53. package/hooks/ProductList/product-list-reducer.js.map +1 -1
  54. package/hooks/ProductList/product-list-reducer.test.js +144 -82
  55. package/hooks/ProductList/useProductList.d.ts +2 -2
  56. package/hooks/ProductList/useProductList.js +12 -5
  57. package/hooks/ProductList/useProductList.js.map +1 -1
  58. package/hooks/ProductList/useProductListItems.d.ts +1 -1
  59. package/hooks/ProductList/useProductListItems.js +8 -6
  60. package/hooks/ProductList/useProductListItems.js.map +1 -1
  61. package/package.json +1 -1
  62. package/resolvers/index.d.ts +3 -0
  63. package/resolvers/index.js +3 -0
  64. package/resolvers/index.js.map +1 -1
  65. package/sentry/client.js +1 -1
  66. package/sentry/client.js.map +1 -1
  67. package/time.d.ts +1 -0
  68. package/time.js +6 -0
  69. package/time.js.map +1 -0
@@ -5,8 +5,8 @@ import {
5
5
  normalizeServerList
6
6
  } from './list-transforms';
7
7
 
8
- const MOCK_LIST = {
9
- '6952315': {
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
- '502935480': {
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(MOCK_LIST);
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
- baseProduct: {
281
- options: null,
282
- variants: {
283
- 'variant-one': {
284
- options,
285
- parentArticleNumber: 'baseProduct'
286
- },
287
- 'variant-two': {
288
- options,
289
- parentArticleNumber: 'baseProduct'
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
- baseProduct: {
305
- options: options,
306
- variants: {
307
- 'variant-one': {
308
- options,
309
- parentArticleNumber: 'baseProduct'
310
- },
311
- 'variant-two': {
312
- options,
313
- parentArticleNumber: 'baseProduct'
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
- customerProductList: {
400
- items: [
401
- {
402
- quantity: 1,
403
- description: 'hello',
404
- product: {
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
- quantity: 1,
411
- description: 'hello',
412
- product: {
413
- articleNumber: 'with-variants'
414
- },
415
- variant: {
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
- quantity: 1,
421
- description: 'hello',
422
- product: {
423
- articleNumber: 'with-many-variants'
424
- },
425
- variant: {
426
- articleNumber: 'variant-one'
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
- quantity: 1,
431
- description: 'hello',
432
- product: {
433
- articleNumber: 'with-many-variants'
434
- },
435
- variant: {
436
- articleNumber: 'variant-two'
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
- quantity: 1,
441
- description: 'hello',
442
- product: {
443
- articleNumber: 'with-base-and-variants'
444
- },
445
- variant: null
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
- quantity: 1,
449
- description: 'hello',
450
- product: {
451
- articleNumber: 'with-base-and-variants'
452
- },
453
- variant: {
454
- articleNumber: 'variant-one'
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(result['with-many-variants'].variants['variant-one']).toBeDefined();
479
- expect(result['with-many-variants'].variants['variant-two']).toBeDefined();
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
- /// <reference types="react" />
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
- list: any;
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: 'CLEAR';
42
+ type: 'CLEAR_ITEMS';
43
+ payload: {
44
+ listId: ProductListId;
45
+ };
45
46
  } | {
46
47
  type: 'LOGOUT';
47
48
  } | {
48
49
  type: 'LOGIN';
49
- payload: NormalizedProductList;
50
+ payload: {
51
+ listId: ProductListId;
52
+ list: NormalizedProductList;
53
+ };
50
54
  } | {
51
55
  type: 'REPLACE';
52
- payload: NormalizedProductList;
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
- draft.list = action.payload;
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.list = {};
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
- draft.list = action.payload;
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
- list: JSON.parse(window.localStorage.getItem('productList')) ||
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
- draft.list[articleNumber] = {
69
- options: ((_a = draft.list[articleNumber]) === null || _a === void 0 ? void 0 : _a.options) || null,
70
- variants: produce(((_b = draft.list[articleNumber]) === null || _b === void 0 ? void 0 : _b.variants) || {}, draft => {
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
- draft.list[articleNumber] = {
83
- variants: ((_a = draft.list[articleNumber]) === null || _a === void 0 ? void 0 : _a.variants) || null,
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
- delete draft.list[articleNumber].variants[variantArticleNumber];
92
- if (Object.keys(draft.list[articleNumber].variants).length === 0 &&
93
- draft.list[articleNumber].options === null) {
94
- delete draft.list[articleNumber];
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
- if ((_a = draft.list[articleNumber]) === null || _a === void 0 ? void 0 : _a.variants) {
102
- draft.list[articleNumber].options = null;
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 draft.list[articleNumber];
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 variants = draft.list[articleNumber].variants;
175
+ const items = draft.lists.get(listId).items;
176
+ const variants = items[articleNumber].variants;
115
177
  delete variants[variantToReplace];
116
- draft.list[articleNumber].variants = Object.assign(Object.assign({}, variants), { [variantArticleNumber]: {
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
- draft.list[articleNumber] = {
187
+ const items = draft.lists.get(listId).items;
188
+ items[articleNumber] = {
126
189
  options: null,
127
- variants: Object.assign(Object.assign({}, (_a = draft.list[articleNumber]) === null || _a === void 0 ? void 0 : _a.variants), { [variantArticleNumber]: {
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":"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"}
1
+ {"version":3,"file":"product-list-reducer.js","sourceRoot":"","sources":["product-list-reducer.ts"],"names":[],"mappings":"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"}