@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.
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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"}