@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.
- package/CHANGELOG.md +8 -0
- package/dist/cjs/index.js +145 -38
- package/dist/cjs/index.js.map +1 -1
- package/dist/esm/checkout/checkout-basket.js +3 -0
- package/dist/esm/checkout/checkout-basket.js.map +1 -1
- package/dist/esm/checkout/checkout-delivery.js +1 -0
- package/dist/esm/checkout/checkout-delivery.js.map +1 -1
- package/dist/esm/checkout/checkout-discount.js +1 -0
- package/dist/esm/checkout/checkout-discount.js.map +1 -1
- package/dist/esm/checkout/checkout-info.js +1 -0
- package/dist/esm/checkout/checkout-info.js.map +1 -1
- package/dist/esm/checkout/checkout-payment.js +1 -0
- package/dist/esm/checkout/checkout-payment.js.map +1 -1
- package/dist/esm/checkout/checkout-review.js +1 -0
- package/dist/esm/checkout/checkout-review.js.map +1 -1
- package/dist/esm/checkout/checkout-user-info.js +1 -0
- package/dist/esm/checkout/checkout-user-info.js.map +1 -1
- package/dist/esm/checkout/checkout-wizard.js +9 -2
- package/dist/esm/checkout/checkout-wizard.js.map +1 -1
- package/dist/esm/hooks/useCart/useCart.js +19 -2
- package/dist/esm/hooks/useCart/useCart.js.map +1 -1
- package/dist/esm/hooks/useCheckout/useCheckout.js +18 -3
- package/dist/esm/hooks/useCheckout/useCheckout.js.map +1 -1
- package/dist/esm/hooks/useTenant/useTenant.js +70 -0
- package/dist/esm/hooks/useTenant/useTenant.js.map +1 -0
- package/dist/esm/index.js +1 -0
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/models/checkout/checkout.service.js +11 -7
- package/dist/esm/models/checkout/checkout.service.js.map +1 -1
- package/dist/esm/order/order-summary.js +27 -24
- package/dist/esm/order/order-summary.js.map +1 -1
- package/dist/types/checkout/checkout-wizard.d.ts.map +1 -1
- package/dist/types/hooks/index.d.ts +1 -0
- package/dist/types/hooks/index.d.ts.map +1 -1
- package/dist/types/hooks/useCart/useCart.d.ts +4 -0
- package/dist/types/hooks/useCart/useCart.d.ts.map +1 -1
- package/dist/types/hooks/useCheckout/useCheckout.d.ts +4 -0
- package/dist/types/hooks/useCheckout/useCheckout.d.ts.map +1 -1
- package/dist/types/hooks/useTenant/useTenant.d.ts +34 -0
- package/dist/types/hooks/useTenant/useTenant.d.ts.map +1 -0
- package/dist/types/models/checkout/checkout.d.ts +2 -0
- package/dist/types/models/checkout/checkout.d.ts.map +1 -1
- package/dist/types/models/checkout/checkout.service.d.ts.map +1 -1
- package/dist/types/models/tenant/tenant.d.ts +8 -0
- package/dist/types/models/tenant/tenant.d.ts.map +1 -0
- package/dist/types/order/order-summary.d.ts.map +1 -1
- package/package.json +1 -1
- package/src/checkout/checkout-wizard.tsx +9 -3
- package/src/hooks/index.ts +1 -0
- package/src/hooks/useCart/useCart.test.tsx +21 -7
- package/src/hooks/useCart/useCart.tsx +21 -3
- package/src/hooks/useCheckout/useCheckout.test.tsx +1 -1
- package/src/hooks/useCheckout/useCheckout.tsx +30 -6
- package/src/hooks/useTenant/useTenant.tsx +94 -0
- package/src/models/checkout/checkout.service.ts +11 -8
- package/src/models/checkout/checkout.ts +2 -0
- package/src/models/tenant/tenant.ts +8 -0
- package/src/order/order-summary.tsx +10 -8
package/CHANGELOG.md
CHANGED
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) =>
|
|
2618
|
-
|
|
2619
|
-
|
|
2620
|
-
|
|
2621
|
-
children: jsxRuntime.jsx(bomMixerUi.
|
|
2622
|
-
|
|
2623
|
-
|
|
2624
|
-
|
|
2625
|
-
|
|
2626
|
-
|
|
2627
|
-
|
|
2628
|
-
|
|
2629
|
-
|
|
2630
|
-
|
|
2631
|
-
|
|
2632
|
-
|
|
2633
|
-
|
|
2634
|
-
|
|
2635
|
-
|
|
2636
|
-
|
|
2637
|
-
|
|
2638
|
-
|
|
2639
|
-
|
|
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
|
-
|
|
2885
|
-
|
|
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
|
-
|
|
3250
|
-
|
|
3251
|
-
|
|
3252
|
-
|
|
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
|