@jetshop/core 5.9.0 → 5.11.2

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 (139) hide show
  1. package/ChannelHandler/ChannelHandler.d.ts +9 -13
  2. package/ChannelHandler/ChannelHandler.js +24 -66
  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 +2 -1
  12. package/analytics/AnalyticsProvider.js.map +1 -1
  13. package/analytics/integrations/ga4.js +10 -1
  14. package/analytics/integrations/ga4.js.map +1 -1
  15. package/analytics/integrations/gtag/gtag.d.ts +0 -1
  16. package/analytics/integrations/gtag/gtag.js +48 -28
  17. package/analytics/integrations/gtag/gtag.js.map +1 -1
  18. package/analytics/integrations/gtm/index.d.ts +2 -2
  19. package/analytics/integrations/gtm/index.js +40 -27
  20. package/analytics/integrations/gtm/index.js.map +1 -1
  21. package/analytics/integrations/unslugify.d.ts +1 -0
  22. package/analytics/integrations/unslugify.js +16 -0
  23. package/analytics/integrations/unslugify.js.map +1 -0
  24. package/analytics/trackerRegistry.d.ts +2 -0
  25. package/analytics/trackerRegistry.js.map +1 -1
  26. package/analytics/utils/breadcrumbsWithoutProduct.d.ts +1 -0
  27. package/analytics/utils/breadcrumbsWithoutProduct.js +9 -0
  28. package/analytics/utils/breadcrumbsWithoutProduct.js.map +1 -0
  29. package/boot/SharedTree.js +1 -1
  30. package/boot/SharedTree.js.map +1 -1
  31. package/boot/apollo.d.ts +5 -4
  32. package/boot/apollo.js +18 -18
  33. package/boot/apollo.js.map +1 -1
  34. package/boot/client/startClient.js +7 -16
  35. package/boot/client/startClient.js.map +1 -1
  36. package/boot/server/createRenderer.js +8 -7
  37. package/boot/server/createRenderer.js.map +1 -1
  38. package/boot/server/index.js +2 -2
  39. package/boot/server/index.js.map +1 -1
  40. package/boot/server/persistedQueries/__tests__/getPersistedQueriesForRequest.test.js +53 -39
  41. package/boot/server/persistedQueries/getPersistedQueriesForRequest.js +2 -2
  42. package/boot/server/persistedQueries/getPersistedQueriesForRequest.js.map +1 -1
  43. package/cart/AddToCartFormik.d.ts +2 -2
  44. package/cart/AddToCartFormik.js +11 -11
  45. package/cart/AddToCartFormik.js.map +1 -1
  46. package/cart/useAddToCart.d.ts +2 -2
  47. package/cart/useAddToCart.js +13 -12
  48. package/cart/useAddToCart.js.map +1 -1
  49. package/components/Auth/CustomerUpdateForm.js +7 -7
  50. package/components/Auth/CustomerUpdateForm.js.map +1 -1
  51. package/components/ChannelContext/ChannelProvider.d.ts +1 -3
  52. package/components/ChannelContext/ChannelProvider.js +6 -13
  53. package/components/ChannelContext/ChannelProvider.js.map +1 -1
  54. package/components/ChannelContext/ChannelProvider.test.js +112 -0
  55. package/components/DynamicRoute/ProductRoute.d.ts +1 -0
  56. package/components/DynamicRoute/ProductRoute.js +16 -6
  57. package/components/DynamicRoute/ProductRoute.js.map +1 -1
  58. package/components/DynamicRoute/RouteResolver.js +1 -1
  59. package/components/DynamicRoute/RouteResolver.js.map +1 -1
  60. package/components/Head.js +4 -4
  61. package/components/Head.js.map +1 -1
  62. package/components/Mutation/AddToCart/addToCartUtils.d.ts +1 -1
  63. package/components/Mutation/AddToCart/addToCartUtils.js +10 -3
  64. package/components/Mutation/AddToCart/addToCartUtils.js.map +1 -1
  65. package/components/Mutation/RemoveFromCart.d.ts +1 -1
  66. package/components/Mutation/RemoveFromCart.js +10 -1
  67. package/components/Mutation/RemoveFromCart.js.map +1 -1
  68. package/components/Mutation/cartMutationUtils.js +7 -6
  69. package/components/Mutation/cartMutationUtils.js.map +1 -1
  70. package/components/Mutation/useDecrementQuantity.js +8 -3
  71. package/components/Mutation/useDecrementQuantity.js.map +1 -1
  72. package/components/Mutation/useIncrementQuantity.js +8 -3
  73. package/components/Mutation/useIncrementQuantity.js.map +1 -1
  74. package/components/Mutation/useRemoveFromCart.js +10 -1
  75. package/components/Mutation/useRemoveFromCart.js.map +1 -1
  76. package/components/OpenGraph/OpenGraphProductData.js +3 -3
  77. package/components/OpenGraph/OpenGraphProductData.js.map +1 -1
  78. package/components/Query/CartProvider.js +32 -22
  79. package/components/Query/CartProvider.js.map +1 -1
  80. package/components/StructuredData/StructuredBreadcrumbData.d.ts +8 -3
  81. package/components/StructuredData/StructuredBreadcrumbData.js +42 -23
  82. package/components/StructuredData/StructuredBreadcrumbData.js.map +1 -1
  83. package/components/StructuredData/StructuredProductData.js +2 -2
  84. package/components/StructuredData/StructuredProductData.js.map +1 -1
  85. package/data/fragments/ProductListsFragments.gql +94 -0
  86. package/data/fragments/RouteMetaFragment.gql +18 -0
  87. package/data/mutations/productListMutations.gql +18 -0
  88. package/data/queries/ProductLists.gql +8 -0
  89. package/dependencies.d.ts +10 -1
  90. package/helpers/isRelativeUrl.d.ts +1 -0
  91. package/helpers/isRelativeUrl.js +5 -0
  92. package/helpers/isRelativeUrl.js.map +1 -0
  93. package/hooks/PackageProducts/usePackageProductItem.d.ts +2 -2
  94. package/hooks/ProductList/ProductListContext.js +49 -14
  95. package/hooks/ProductList/ProductListContext.js.map +1 -1
  96. package/hooks/ProductList/ProductLists.gql +0 -0
  97. package/hooks/ProductList/action-creators.d.ts +20 -7
  98. package/hooks/ProductList/action-creators.js +138 -44
  99. package/hooks/ProductList/action-creators.js.map +1 -1
  100. package/hooks/ProductList/index.d.ts +34 -8
  101. package/hooks/ProductList/index.js +19 -0
  102. package/hooks/ProductList/index.js.map +1 -1
  103. package/hooks/ProductList/list-transforms.d.ts +3 -2
  104. package/hooks/ProductList/list-transforms.js +22 -22
  105. package/hooks/ProductList/list-transforms.js.map +1 -1
  106. package/hooks/ProductList/list-transforms.test.js +103 -100
  107. package/hooks/ProductList/product-list-reducer.d.ts +37 -14
  108. package/hooks/ProductList/product-list-reducer.js +106 -43
  109. package/hooks/ProductList/product-list-reducer.js.map +1 -1
  110. package/hooks/ProductList/product-list-reducer.test.js +144 -82
  111. package/hooks/ProductList/useProductList.d.ts +2 -2
  112. package/hooks/ProductList/useProductList.js +12 -5
  113. package/hooks/ProductList/useProductList.js.map +1 -1
  114. package/hooks/ProductList/useProductListItems.d.ts +1 -1
  115. package/hooks/ProductList/useProductListItems.js +8 -6
  116. package/hooks/ProductList/useProductListItems.js.map +1 -1
  117. package/hooks/useAddMultipleToCart.js +11 -5
  118. package/hooks/useAddMultipleToCart.js.map +1 -1
  119. package/hooks/useProductVariants/useProductVariants.d.ts +1 -2
  120. package/hooks/useProductVariants/useProductVariants.js +1 -1
  121. package/hooks/useProductVariants/useProductVariants.js.map +1 -1
  122. package/hooks/useRoutePreload.js +2 -2
  123. package/hooks/useRoutePreload.js.map +1 -1
  124. package/package.json +5 -5
  125. package/resolvers/index.d.ts +3 -0
  126. package/resolvers/index.js +3 -0
  127. package/resolvers/index.js.map +1 -1
  128. package/sentry/client.js +9 -4
  129. package/sentry/client.js.map +1 -1
  130. package/sentry/common.d.ts +1 -0
  131. package/sentry/common.js +5 -0
  132. package/sentry/common.js.map +1 -0
  133. package/sentry/server.js +11 -2
  134. package/sentry/server.js.map +1 -1
  135. package/server/tracking/types.d.ts +1 -1
  136. package/time.d.ts +1 -0
  137. package/time.js +6 -0
  138. package/time.js.map +1 -0
  139. package/types.d.ts +1 -0
@@ -1,12 +1,12 @@
1
1
  import { FlattenedProductListItem, NormalizedProductList, ProductsQuery } from '.';
2
- import { CustomerProductListResult, Product } from '../../types';
2
+ import { CustomerProductList, Product } from '../../types';
3
3
  /**
4
4
  * Converts a product list returned from the API to our normalized structure
5
5
  * When a base product is selected, it will have a value for `options`.
6
6
  * When it has variants, it will have one or more keys for `variants`
7
7
  * Either variants or options may be null, but not both.
8
8
  */
9
- export declare function normalizeServerList(serverList: CustomerProductListResult): NormalizedProductList;
9
+ export declare function normalizeServerList(productList: CustomerProductList): NormalizedProductList;
10
10
  /**
11
11
  * Takes a flattened product list and result of a products query and returns
12
12
  * product details for each item in the flattened list. */
@@ -35,6 +35,7 @@ productQueryResult: ProductsQuery): {
35
35
  categories?: import("../../types").Category[];
36
36
  campaigns?: import("../../types").Category[];
37
37
  hasVariants: boolean;
38
+ hasVariantsWithDifferingPrices: boolean;
38
39
  variants?: import("../../types").ProductVariants;
39
40
  images?: import("../../types").ProductImage[];
40
41
  relatedProducts?: Product[];
@@ -6,39 +6,39 @@ import { validateProduct } from './validate-product';
6
6
  * When it has variants, it will have one or more keys for `variants`
7
7
  * Either variants or options may be null, but not both.
8
8
  */
9
- export function normalizeServerList(serverList) {
9
+ export function normalizeServerList(productList) {
10
10
  var _a, _b, _c, _d, _e;
11
- const list = {};
12
- if (!(serverList === null || serverList === void 0 ? void 0 : serverList.customerProductList))
13
- return list;
14
- const items = serverList.customerProductList.items;
15
- const newList = Object.assign({}, list);
11
+ const items = productList.items;
12
+ const newList = {
13
+ name: productList.name,
14
+ items: {}
15
+ };
16
16
  for (const item of items) {
17
17
  // skip if product is hidden
18
18
  if (!((_a = item === null || item === void 0 ? void 0 : item.product) === null || _a === void 0 ? void 0 : _a.articleNumber)) {
19
19
  continue;
20
20
  }
21
21
  if (item.variant) {
22
- newList[item.product.articleNumber] = {
23
- options: ((_b = newList[item.product.articleNumber]) === null || _b === void 0 ? void 0 : _b.options) || null,
24
- variants: produce(((_c = newList[item.product.articleNumber]) === null || _c === void 0 ? void 0 : _c.variants) || {}, (draft) => {
22
+ newList.items[item.product.articleNumber] = {
23
+ options: ((_b = newList.items[item.product.articleNumber]) === null || _b === void 0 ? void 0 : _b.options) || null,
24
+ variants: produce(((_c = newList.items[item.product.articleNumber]) === null || _c === void 0 ? void 0 : _c.variants) || {}, (draft) => {
25
25
  draft[item.variant.articleNumber] = {
26
26
  options: {
27
27
  quantity: item.quantity || 1,
28
- description: item.description,
28
+ description: item.description
29
29
  },
30
- parentArticleNumber: item.product.articleNumber,
30
+ parentArticleNumber: item.product.articleNumber
31
31
  };
32
- }),
32
+ })
33
33
  };
34
34
  }
35
35
  else {
36
- newList[item.product.articleNumber] = {
37
- variants: ((_d = newList[item.product.articleNumber]) === null || _d === void 0 ? void 0 : _d.variants) || null,
36
+ newList.items[item.product.articleNumber] = {
37
+ variants: ((_d = newList.items[item.product.articleNumber]) === null || _d === void 0 ? void 0 : _d.variants) || null,
38
38
  options: {
39
39
  quantity: (_e = item.quantity) !== null && _e !== void 0 ? _e : 1,
40
- description: item.description,
41
- },
40
+ description: item.description
41
+ }
42
42
  };
43
43
  }
44
44
  }
@@ -76,29 +76,29 @@ export function getVariantFromProductDetails(variant, product) {
76
76
  }
77
77
  export function flattenList(list) {
78
78
  const flattenedList = [];
79
- const baseProducts = list ? Object.keys(list) : [];
79
+ const baseProducts = list ? Object.keys(list.items) : [];
80
80
  for (const baseArticleNumber of baseProducts) {
81
- const variants = list[baseArticleNumber].variants;
81
+ const variants = list.items[baseArticleNumber].variants;
82
82
  if (variants) {
83
83
  const variantArticleNumbers = Object.keys(variants);
84
84
  for (const articleNumber of variantArticleNumbers) {
85
85
  flattenedList.push({
86
86
  articleNumber,
87
87
  parentArticleNumber: baseArticleNumber,
88
- options: variants[articleNumber].options,
88
+ options: variants[articleNumber].options
89
89
  });
90
90
  }
91
- if (list[baseArticleNumber].options) {
91
+ if (list.items[baseArticleNumber].options) {
92
92
  flattenedList.push({
93
93
  articleNumber: baseArticleNumber,
94
- options: list[baseArticleNumber].options,
94
+ options: list.items[baseArticleNumber].options
95
95
  });
96
96
  }
97
97
  }
98
98
  else {
99
99
  flattenedList.push({
100
100
  articleNumber: baseArticleNumber,
101
- options: list[baseArticleNumber].options,
101
+ options: list.items[baseArticleNumber].options
102
102
  });
103
103
  }
104
104
  }
@@ -1 +1 @@
1
- {"version":3,"file":"list-transforms.js","sourceRoot":"","sources":["list-transforms.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"list-transforms.js","sourceRoot":"","sources":["list-transforms.ts"],"names":[],"mappings":"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"}
@@ -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
  };