@websolutespa/bom-mixer-checkout 1.9.2 → 1.9.3

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 (58) hide show
  1. package/CHANGELOG.md +8 -0
  2. package/dist/cjs/index.js +145 -38
  3. package/dist/cjs/index.js.map +1 -1
  4. package/dist/esm/checkout/checkout-basket.js +3 -0
  5. package/dist/esm/checkout/checkout-basket.js.map +1 -1
  6. package/dist/esm/checkout/checkout-delivery.js +1 -0
  7. package/dist/esm/checkout/checkout-delivery.js.map +1 -1
  8. package/dist/esm/checkout/checkout-discount.js +1 -0
  9. package/dist/esm/checkout/checkout-discount.js.map +1 -1
  10. package/dist/esm/checkout/checkout-info.js +1 -0
  11. package/dist/esm/checkout/checkout-info.js.map +1 -1
  12. package/dist/esm/checkout/checkout-payment.js +1 -0
  13. package/dist/esm/checkout/checkout-payment.js.map +1 -1
  14. package/dist/esm/checkout/checkout-review.js +1 -0
  15. package/dist/esm/checkout/checkout-review.js.map +1 -1
  16. package/dist/esm/checkout/checkout-user-info.js +1 -0
  17. package/dist/esm/checkout/checkout-user-info.js.map +1 -1
  18. package/dist/esm/checkout/checkout-wizard.js +9 -2
  19. package/dist/esm/checkout/checkout-wizard.js.map +1 -1
  20. package/dist/esm/hooks/useCart/useCart.js +19 -2
  21. package/dist/esm/hooks/useCart/useCart.js.map +1 -1
  22. package/dist/esm/hooks/useCheckout/useCheckout.js +18 -3
  23. package/dist/esm/hooks/useCheckout/useCheckout.js.map +1 -1
  24. package/dist/esm/hooks/useTenant/useTenant.js +70 -0
  25. package/dist/esm/hooks/useTenant/useTenant.js.map +1 -0
  26. package/dist/esm/index.js +1 -0
  27. package/dist/esm/index.js.map +1 -1
  28. package/dist/esm/models/checkout/checkout.service.js +11 -7
  29. package/dist/esm/models/checkout/checkout.service.js.map +1 -1
  30. package/dist/esm/order/order-summary.js +27 -24
  31. package/dist/esm/order/order-summary.js.map +1 -1
  32. package/dist/types/checkout/checkout-wizard.d.ts.map +1 -1
  33. package/dist/types/hooks/index.d.ts +1 -0
  34. package/dist/types/hooks/index.d.ts.map +1 -1
  35. package/dist/types/hooks/useCart/useCart.d.ts +4 -0
  36. package/dist/types/hooks/useCart/useCart.d.ts.map +1 -1
  37. package/dist/types/hooks/useCheckout/useCheckout.d.ts +4 -0
  38. package/dist/types/hooks/useCheckout/useCheckout.d.ts.map +1 -1
  39. package/dist/types/hooks/useTenant/useTenant.d.ts +34 -0
  40. package/dist/types/hooks/useTenant/useTenant.d.ts.map +1 -0
  41. package/dist/types/models/checkout/checkout.d.ts +2 -0
  42. package/dist/types/models/checkout/checkout.d.ts.map +1 -1
  43. package/dist/types/models/checkout/checkout.service.d.ts.map +1 -1
  44. package/dist/types/models/tenant/tenant.d.ts +8 -0
  45. package/dist/types/models/tenant/tenant.d.ts.map +1 -0
  46. package/dist/types/order/order-summary.d.ts.map +1 -1
  47. package/package.json +1 -1
  48. package/src/checkout/checkout-wizard.tsx +9 -3
  49. package/src/hooks/index.ts +1 -0
  50. package/src/hooks/useCart/useCart.test.tsx +21 -7
  51. package/src/hooks/useCart/useCart.tsx +21 -3
  52. package/src/hooks/useCheckout/useCheckout.test.tsx +1 -1
  53. package/src/hooks/useCheckout/useCheckout.tsx +30 -6
  54. package/src/hooks/useTenant/useTenant.tsx +94 -0
  55. package/src/models/checkout/checkout.service.ts +11 -8
  56. package/src/models/checkout/checkout.ts +2 -0
  57. package/src/models/tenant/tenant.ts +8 -0
  58. package/src/order/order-summary.tsx +10 -8
package/CHANGELOG.md CHANGED
@@ -1,5 +1,13 @@
1
1
  # @websolutespa/bom-mixer-checkout
2
2
 
3
+ ## 1.9.3
4
+
5
+ ### Patch Changes
6
+
7
+ - Added: Tenant
8
+ - Updated dependencies
9
+ - @websolutespa/bom-mixer-ui@1.10.4
10
+
3
11
  ## 1.9.2
4
12
 
5
13
  ### Patch Changes
package/dist/cjs/index.js CHANGED
@@ -4,15 +4,16 @@ var jsxRuntime = require('react/jsx-runtime');
4
4
  var bomMixerHooks = require('@websolutespa/bom-mixer-hooks');
5
5
  var bomMixerIcons = require('@websolutespa/bom-mixer-icons');
6
6
  var bomMixerUi = require('@websolutespa/bom-mixer-ui');
7
+ var bomCore = require('@websolutespa/bom-core');
7
8
  var react = require('react');
8
9
  var zustand = require('zustand');
9
10
  var middleware = require('zustand/middleware');
10
11
  var Link = require('next/link');
11
12
  var bomMixerForms = require('@websolutespa/bom-mixer-forms');
12
13
  var bomMixerAuth = require('@websolutespa/bom-mixer-auth');
13
- var bomCore = require('@websolutespa/bom-core');
14
- var styled = require('styled-components');
15
14
  var bomMixerStore = require('@websolutespa/bom-mixer-store');
15
+ var router = require('next/router');
16
+ var styled = require('styled-components');
16
17
  var bomMixerModels = require('@websolutespa/bom-mixer-models');
17
18
 
18
19
  function _interopDefault (e) { return e && e.__esModule ? e : { default: e }; }
@@ -76,7 +77,70 @@ typeof SuppressedError === "function" ? SuppressedError : function (error, suppr
76
77
  return e.name = "SuppressedError", e.error = error, e.suppressed = suppressed, e;
77
78
  };
78
79
 
80
+ const createTenantStore = _a => {
81
+ var {
82
+ storage
83
+ } = _a,
84
+ initialProps = __rest(_a, ["storage"]);
85
+ const DEFAULT_PROPS = {
86
+ hydrated: false
87
+ };
88
+ const useStore = zustand.createStore()(middleware.persist((set, get) => Object.assign(Object.assign(Object.assign({}, DEFAULT_PROPS), initialProps), {
89
+ actions: {
90
+ setTenant: tenant => set(state => ({
91
+ tenant
92
+ }))
93
+ }
94
+ }), {
95
+ name: `${initialProps.name || 'website'}-tenant`,
96
+ storage: middleware.createJSONStorage(() => storage || localStorage),
97
+ /*
98
+ getStorage: () => {
99
+ // console.log('useTenant.getStorage');
100
+ return storage || localStorage;
101
+ },
102
+ */
103
+ onRehydrateStorage: () => () => {
104
+ useStore.setState({
105
+ hydrated: true
106
+ });
107
+ // console.log('onRehydrateStorage', useStore, useStore.getState());
108
+ },
109
+ merge: (persistedState, currentState) => {
110
+ if (persistedState.tenant && typeof persistedState.tenant === 'object') {
111
+ currentState.tenant = Object.assign({}, persistedState.tenant);
112
+ }
113
+ currentState.hydrated = true;
114
+ return currentState;
115
+ }
116
+ }));
117
+ return useStore;
118
+ };
119
+ const TenantContext = /*#__PURE__*/react.createContext(null);
120
+ function TenantProvider(_a) {
121
+ var {
122
+ children
123
+ } = _a,
124
+ props = __rest(_a, ["children"]);
125
+ const storeRef = react.useRef();
126
+ if (!storeRef.current) {
127
+ storeRef.current = createTenantStore(props);
128
+ }
129
+ return jsxRuntime.jsx(TenantContext.Provider, {
130
+ value: storeRef.current,
131
+ children: children
132
+ });
133
+ }
134
+ function useTenant(selector) {
135
+ let store = react.useContext(TenantContext);
136
+ if (!store) {
137
+ store = createTenantStore({});
138
+ }
139
+ return zustand.useStore(store, selector);
140
+ }
141
+
79
142
  const createCartStore = _a => {
143
+ var _b;
80
144
  var {
81
145
  storage
82
146
  } = _a,
@@ -148,7 +212,7 @@ const createCartStore = _a => {
148
212
  })
149
213
  }
150
214
  }), {
151
- name: 'cart',
215
+ name: `${initialProps.name || 'website'}-cart-${((_b = initialProps.tenant) === null || _b === void 0 ? void 0 : _b.id) || ''}`,
152
216
  storage: middleware.createJSONStorage(() => storage || localStorage),
153
217
  /*
154
218
  getStorage: () => {
@@ -166,6 +230,9 @@ const createCartStore = _a => {
166
230
  if (persistedState.items && Array.isArray(persistedState.items)) {
167
231
  currentState.items = [...persistedState.items];
168
232
  }
233
+ if (persistedState.tenant && bomCore.isObject(persistedState.tenant)) {
234
+ currentState.tenant = Object.assign({}, persistedState.tenant);
235
+ }
169
236
  currentState.hydrated = true;
170
237
  return currentState;
171
238
  }
@@ -182,6 +249,17 @@ function CartProvider(_a) {
182
249
  if (!storeRef.current) {
183
250
  storeRef.current = createCartStore(props);
184
251
  }
252
+ const [tenant, setTenant] = react.useState();
253
+ const storeTenant = useTenant(state => state.tenant);
254
+ react.useEffect(() => {
255
+ if (tenant !== storeTenant) {
256
+ setTenant(storeTenant);
257
+ storeRef.current = createCartStore(Object.assign(Object.assign({}, props), {
258
+ tenant: storeTenant
259
+ }));
260
+ console.log('CartProvider setTenant', storeTenant);
261
+ }
262
+ }, [props, storeTenant, tenant]);
185
263
  return jsxRuntime.jsx(CartContext.Provider, {
186
264
  value: storeRef.current,
187
265
  children: children
@@ -384,6 +462,7 @@ const CartDrawer = props => {
384
462
  };
385
463
 
386
464
  const createCheckoutStore = _a => {
465
+ var _b;
387
466
  var {
388
467
  storage
389
468
  } = _a,
@@ -396,12 +475,14 @@ const createCheckoutStore = _a => {
396
475
  actions: {
397
476
  setCheckout: checkout => set(state => {
398
477
  return {
399
- checkout
478
+ checkout: Object.assign(Object.assign({}, checkout), {
479
+ tenant: state.tenant
480
+ })
400
481
  };
401
482
  })
402
483
  }
403
484
  }), {
404
- name: 'checkout',
485
+ name: `${initialProps.name || 'website'}-checkout-${((_b = initialProps.tenant) === null || _b === void 0 ? void 0 : _b.id) || ''}`,
405
486
  storage: middleware.createJSONStorage(() => storage || localStorage),
406
487
  /*
407
488
  getStorage: () => {
@@ -435,6 +516,17 @@ function CheckoutProvider(_a) {
435
516
  if (!storeRef.current) {
436
517
  storeRef.current = createCheckoutStore(props);
437
518
  }
519
+ const [tenant, setTenant] = react.useState();
520
+ const storeTenant = useTenant(state => state.tenant);
521
+ react.useEffect(() => {
522
+ if (tenant !== storeTenant) {
523
+ setTenant(storeTenant);
524
+ storeRef.current = createCheckoutStore(Object.assign(Object.assign({}, props), {
525
+ tenant: storeTenant
526
+ }));
527
+ console.log('CheckoutProvider setTenant', storeTenant);
528
+ }
529
+ }, [props, storeTenant, tenant]);
438
530
  return jsxRuntime.jsx(CheckoutContext.Provider, {
439
531
  value: storeRef.current,
440
532
  children: children
@@ -2614,29 +2706,32 @@ const OrderSummary = _ref => {
2614
2706
  textAlign: "right",
2615
2707
  children: currency(order.subTotal)
2616
2708
  })]
2617
- }), order.discounts.map((item, i) => jsxRuntime.jsxs(bomMixerUi.Flex.Row, {
2618
- gap: "1rem",
2619
- children: [jsxRuntime.jsx(bomMixerUi.Text, {
2620
- flexGrow: "1",
2621
- children: jsxRuntime.jsx(bomMixerUi.Badge, {
2622
- children: item.discount.id
2623
- })
2624
- }), jsxRuntime.jsx(bomMixerUi.Text, {
2625
- flexBasis: "110px",
2626
- textAlign: "right",
2627
- children: "\u00A0"
2628
- }), item.discount.abstract && jsxRuntime.jsx(bomMixerUi.Text, {
2629
- flexBasis: "120px",
2630
- textAlign: "center",
2631
- dangerouslySetInnerHTML: {
2632
- __html: item.discount.abstract
2633
- }
2634
- }), jsxRuntime.jsx(bomMixerUi.Text, {
2635
- flexBasis: "90px",
2636
- textAlign: "right",
2637
- children: currency(item.price)
2638
- })]
2639
- }, i)), order.taxes > 0 && jsxRuntime.jsxs(bomMixerUi.Flex.Row, {
2709
+ }), order.discounts && order.discounts.map((item, i) => {
2710
+ var _a;
2711
+ return jsxRuntime.jsxs(bomMixerUi.Flex.Row, {
2712
+ gap: "1rem",
2713
+ children: [jsxRuntime.jsx(bomMixerUi.Text, {
2714
+ flexGrow: "1",
2715
+ children: jsxRuntime.jsx(bomMixerUi.Badge, {
2716
+ children: item.discount.id
2717
+ })
2718
+ }), jsxRuntime.jsx(bomMixerUi.Text, {
2719
+ flexBasis: "110px",
2720
+ textAlign: "right",
2721
+ children: "\u00A0"
2722
+ }), ((_a = item.discount) === null || _a === void 0 ? void 0 : _a.abstract) && jsxRuntime.jsx(bomMixerUi.Text, {
2723
+ flexBasis: "120px",
2724
+ textAlign: "center",
2725
+ dangerouslySetInnerHTML: {
2726
+ __html: item.discount.abstract
2727
+ }
2728
+ }), jsxRuntime.jsx(bomMixerUi.Text, {
2729
+ flexBasis: "90px",
2730
+ textAlign: "right",
2731
+ children: currency(item.price)
2732
+ })]
2733
+ }, i);
2734
+ }), order.taxes > 0 && jsxRuntime.jsxs(bomMixerUi.Flex.Row, {
2640
2735
  gap: "1rem",
2641
2736
  children: [jsxRuntime.jsx(bomMixerUi.Text, {
2642
2737
  flexGrow: "1",
@@ -2654,7 +2749,7 @@ const OrderSummary = _ref => {
2654
2749
  textAlign: "right",
2655
2750
  children: currency(order.taxes)
2656
2751
  })]
2657
- }), jsxRuntime.jsxs(bomMixerUi.Flex.Row, {
2752
+ }), order.delivery && jsxRuntime.jsxs(bomMixerUi.Flex.Row, {
2658
2753
  gap: "1rem",
2659
2754
  children: [jsxRuntime.jsx(bomMixerUi.Text, {
2660
2755
  flexGrow: "1",
@@ -2832,6 +2927,7 @@ const CheckoutWizard = _a => {
2832
2927
  onCheckout
2833
2928
  } = _a;
2834
2929
  __rest(_a, ["onCheckout"]);
2930
+ const router$1 = router.useRouter();
2835
2931
  const api = bomMixerHooks.useApi();
2836
2932
  const checkout = useCheckout(state => state.checkout);
2837
2933
  // const { setCheckout } = useCheckout((state) => state.actions);
@@ -2881,8 +2977,12 @@ const CheckoutWizard = _a => {
2881
2977
  const response = yield api.post('/checkout/submit', Object.assign(Object.assign({}, checkout), {
2882
2978
  payment
2883
2979
  }));
2884
- // console.log('onPayment.response', response);
2885
- window.location.href = response.redirectUrl;
2980
+ console.log('onPayment.response', response);
2981
+ if (bomMixerStore.storeStrategy === bomMixerStore.StoreStrategy.Mock) {
2982
+ router$1.push(response.redirectUrl);
2983
+ } else {
2984
+ window.location.href = response.redirectUrl;
2985
+ }
2886
2986
  } catch (error) {
2887
2987
  console.error('onPayment.error', error);
2888
2988
  }
@@ -3246,10 +3346,14 @@ function checkoutSubmitHandler(_ref) {
3246
3346
  response.status(200).json(html);
3247
3347
  }
3248
3348
  */
3249
- const shippingAddress = yield getOrCreateAddress(checkout.shippingAddress, market, locale);
3250
- console.log('shippingAddress', shippingAddress === null || shippingAddress === void 0 ? void 0 : shippingAddress.id);
3251
- const billingAddress = yield getOrCreateAddress(checkout.billingAddress, market, locale);
3252
- console.log('billingAddress', billingAddress === null || billingAddress === void 0 ? void 0 : billingAddress.id);
3349
+ let shippingAddress = undefined;
3350
+ let billingAddress = undefined;
3351
+ if (bomMixerStore.storeStrategy !== bomMixerStore.StoreStrategy.Mock) {
3352
+ shippingAddress = yield getOrCreateAddress(checkout.shippingAddress, market, locale);
3353
+ // console.log('shippingAddress', shippingAddress?.id);
3354
+ billingAddress = yield getOrCreateAddress(checkout.billingAddress, market, locale);
3355
+ // console.log('billingAddress', billingAddress?.id);
3356
+ }
3253
3357
  /*
3254
3358
  const user: IUser | undefined = await getOrCreateEndUser(checkout.user, billingAddress || shippingAddress, market, locale);
3255
3359
  console.log('user', user?.id);
@@ -3274,11 +3378,12 @@ function checkoutSubmitHandler(_ref) {
3274
3378
  payment: checkout.payment ? checkout.payment.id : undefined,
3275
3379
  shippingAddress: shippingAddress ? shippingAddress.id : undefined,
3276
3380
  retailer: checkout.retailer ? checkout.retailer.id : undefined,
3277
- user: checkout.user ? checkout.user.id : undefined
3381
+ user: checkout.user ? checkout.user.id : undefined,
3382
+ tenant: checkout.tenant ? checkout.tenant.id : undefined
3278
3383
  });
3279
- console.log('action', action);
3280
3384
  const knownRoutes = yield bomMixerModels.getRoutesForSchemas(['checkout_result'], market, locale);
3281
3385
  // !!! todo return payment redirectUrl
3386
+ // console.log('action', action, knownRoutes);
3282
3387
  if (bomMixerStore.storeStrategy !== bomMixerStore.StoreStrategy.Mock) {
3283
3388
  const result = yield bomMixerStore.remoteApiPost(`/order?market=${market}&locale=${locale}`, action);
3284
3389
  const order = result.doc;
@@ -3290,7 +3395,6 @@ function checkoutSubmitHandler(_ref) {
3290
3395
  };
3291
3396
  response.status(200).json(data);
3292
3397
  } else {
3293
- response.status(200).json('html');
3294
3398
  const redirectUrl = `${knownRoutes.checkout_result}?orderId=1&status=OK`;
3295
3399
  const data = {
3296
3400
  redirectUrl
@@ -3798,6 +3902,8 @@ exports.OrderItem = OrderItem;
3798
3902
  exports.OrderRegister = OrderRegister;
3799
3903
  exports.OrderSummary = OrderSummary;
3800
3904
  exports.OrderSummaryItem = OrderSummaryItem;
3905
+ exports.TenantContext = TenantContext;
3906
+ exports.TenantProvider = TenantProvider;
3801
3907
  exports.checkoutDeliveryHandler = checkoutDeliveryHandler;
3802
3908
  exports.checkoutDiscountHandler = checkoutDiscountHandler;
3803
3909
  exports.checkoutInfoHandler = checkoutInfoHandler;
@@ -3829,4 +3935,5 @@ exports.setDiscountCode = setDiscountCode;
3829
3935
  exports.updateCheckout = updateCheckout;
3830
3936
  exports.useCart = useCart;
3831
3937
  exports.useCheckout = useCheckout;
3938
+ exports.useTenant = useTenant;
3832
3939
  //# sourceMappingURL=index.js.map