addio-ecomm-sdk 1.3.77 → 1.3.78

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 (106) hide show
  1. package/.vscode/settings.json +34 -34
  2. package/README.md +79 -79
  3. package/dist/index.d.ts +203 -203
  4. package/dist/index.js +1237 -1237
  5. package/dist/lib/constants/components/CreditCardInput.d.ts +11 -11
  6. package/dist/lib/constants/components/CreditCardInput.js +65 -65
  7. package/dist/lib/constants/components/Snackbar.d.ts +11 -11
  8. package/dist/lib/constants/components/Snackbar.js +29 -29
  9. package/dist/lib/constants/contexts/CartContext/CartContextProvider.d.ts +7 -7
  10. package/dist/lib/constants/contexts/CartContext/CartContextProvider.js +640 -640
  11. package/dist/lib/constants/contexts/CartContext/index.d.ts +79 -79
  12. package/dist/lib/constants/contexts/CartContext/index.js +47 -47
  13. package/dist/lib/constants/contexts/DataContext/DataContextProvider.d.ts +15 -15
  14. package/dist/lib/constants/contexts/DataContext/DataContextProvider.js +173 -173
  15. package/dist/lib/constants/contexts/DataContext/index.d.ts +47 -47
  16. package/dist/lib/constants/contexts/DataContext/index.js +27 -27
  17. package/dist/lib/constants/contexts/LogContext/LogContextProvider.d.ts +6 -6
  18. package/dist/lib/constants/contexts/LogContext/LogContextProvider.js +40 -40
  19. package/dist/lib/constants/contexts/LogContext/index.d.ts +7 -7
  20. package/dist/lib/constants/contexts/LogContext/index.js +7 -7
  21. package/dist/lib/constants/contexts/ModalContext/ModalContextProvider.d.ts +7 -7
  22. package/dist/lib/constants/contexts/ModalContext/ModalContextProvider.js +61 -61
  23. package/dist/lib/constants/contexts/ModalContext/index.d.ts +14 -14
  24. package/dist/lib/constants/contexts/ModalContext/index.js +16 -16
  25. package/dist/lib/constants/contexts/SDKContext/SDKProvider.d.ts +8 -8
  26. package/dist/lib/constants/contexts/SDKContext/SDKProvider.js +23 -23
  27. package/dist/lib/constants/contexts/SDKContext/index.d.ts +4 -4
  28. package/dist/lib/constants/contexts/SDKContext/index.js +4 -4
  29. package/dist/lib/constants/contexts/SnackbarContext/SnackbarContext.d.ts +4 -4
  30. package/dist/lib/constants/contexts/SnackbarContext/SnackbarContext.js +6 -6
  31. package/dist/lib/constants/contexts/SnackbarContext/SnackbarContextProvider.d.ts +12 -12
  32. package/dist/lib/constants/contexts/SnackbarContext/SnackbarContextProvider.js +38 -38
  33. package/dist/lib/constants/contexts/SnackbarContext/interfaces/ISnackbarContext.d.ts +19 -19
  34. package/dist/lib/constants/contexts/SnackbarContext/interfaces/ISnackbarContext.js +21 -21
  35. package/dist/lib/constants/contexts/StockNotifContext/StockNotifContextProvider.d.ts +7 -7
  36. package/dist/lib/constants/contexts/StockNotifContext/StockNotifContextProvider.js +112 -112
  37. package/dist/lib/constants/contexts/StockNotifContext/index.d.ts +10 -10
  38. package/dist/lib/constants/contexts/StockNotifContext/index.js +10 -10
  39. package/dist/lib/constants/contexts/UserContext/UserContextProvider.d.ts +5 -5
  40. package/dist/lib/constants/contexts/UserContext/UserContextProvider.js +313 -313
  41. package/dist/lib/constants/contexts/UserContext/index.d.ts +54 -54
  42. package/dist/lib/constants/contexts/UserContext/index.js +28 -28
  43. package/dist/lib/constants/contexts/WishlistContext/WishlistContextProvider.d.ts +6 -6
  44. package/dist/lib/constants/contexts/WishlistContext/WishlistContextProvider.js +231 -231
  45. package/dist/lib/constants/contexts/WishlistContext/index.d.ts +12 -12
  46. package/dist/lib/constants/contexts/WishlistContext/index.js +12 -12
  47. package/dist/lib/constants/hooks/useCart.d.ts +2 -2
  48. package/dist/lib/constants/hooks/useCart.js +11 -11
  49. package/dist/lib/constants/hooks/useData.d.ts +2 -2
  50. package/dist/lib/constants/hooks/useData.js +11 -11
  51. package/dist/lib/constants/hooks/useLogs.d.ts +2 -2
  52. package/dist/lib/constants/hooks/useLogs.js +11 -11
  53. package/dist/lib/constants/hooks/useModal.d.ts +2 -2
  54. package/dist/lib/constants/hooks/useModal.js +11 -11
  55. package/dist/lib/constants/hooks/useSDK.d.ts +2 -2
  56. package/dist/lib/constants/hooks/useSDK.js +11 -11
  57. package/dist/lib/constants/hooks/useSnackbar.d.ts +2 -2
  58. package/dist/lib/constants/hooks/useSnackbar.js +11 -11
  59. package/dist/lib/constants/hooks/useStockNotif.d.ts +2 -2
  60. package/dist/lib/constants/hooks/useStockNotif.js +11 -11
  61. package/dist/lib/constants/hooks/useUser.d.ts +2 -2
  62. package/dist/lib/constants/hooks/useUser.js +11 -11
  63. package/dist/lib/constants/hooks/useWishlist.d.ts +2 -2
  64. package/dist/lib/constants/hooks/useWishlist.js +11 -11
  65. package/dist/lib/models/image/index.d.ts +6 -6
  66. package/dist/lib/models/image/index.js +10 -10
  67. package/dist/lib/models/stockNotification/index.d.ts +13 -13
  68. package/dist/lib/models/stockNotification/index.js +70 -70
  69. package/dist/lib/models/wishlist/index.d.ts +14 -14
  70. package/dist/lib/models/wishlist/index.js +86 -86
  71. package/dist/utils/StripeErrors.d.ts +24 -24
  72. package/dist/utils/StripeErrors.js +55 -55
  73. package/dist/utils/algolia.d.ts +3 -3
  74. package/dist/utils/algolia.js +35 -35
  75. package/dist/utils/analytics.d.ts +71 -71
  76. package/dist/utils/analytics.js +246 -246
  77. package/dist/utils/cart.d.ts +3 -3
  78. package/dist/utils/cart.js +65 -65
  79. package/dist/utils/contentful.d.ts +10 -10
  80. package/dist/utils/contentful.js +63 -63
  81. package/dist/utils/functions.d.ts +21 -21
  82. package/dist/utils/functions.js +183 -183
  83. package/dist/utils/getSDK.d.ts +4 -4
  84. package/dist/utils/getSDK.js +19 -19
  85. package/dist/utils/initStoreData.d.ts +3 -3
  86. package/dist/utils/initStoreData.js +17 -17
  87. package/dist/utils/interfaces/IClientCMSData.d.ts +132 -132
  88. package/dist/utils/interfaces/IClientCMSData.js +2 -2
  89. package/dist/utils/interfaces/IEndpointResult.d.ts +10 -10
  90. package/dist/utils/interfaces/IEndpointResult.js +2 -2
  91. package/dist/utils/interfaces/IFacebookUserProfile.d.ts +10 -10
  92. package/dist/utils/interfaces/IFacebookUserProfile.js +2 -2
  93. package/dist/utils/interfaces/IFilter.d.ts +23 -23
  94. package/dist/utils/interfaces/IFilter.js +2 -2
  95. package/dist/utils/interfaces/IGoogleUserProfile.d.ts +7 -7
  96. package/dist/utils/interfaces/IGoogleUserProfile.js +2 -2
  97. package/dist/utils/interfaces/ISDKConfig.d.ts +7 -7
  98. package/dist/utils/interfaces/ISDKConfig.js +2 -2
  99. package/dist/utils/interfaces/ISpaceData.d.ts +18 -18
  100. package/dist/utils/interfaces/ISpaceData.js +2 -2
  101. package/dist/utils/larivieremeunier.d.ts +3 -3
  102. package/dist/utils/larivieremeunier.js +156 -156
  103. package/dist/utils/technosupply.d.ts +3 -3
  104. package/dist/utils/technosupply.js +155 -155
  105. package/package.json +61 -61
  106. package/publish.sh +132 -132
@@ -1,641 +1,641 @@
1
- "use strict";
2
- var __importDefault = (this && this.__importDefault) || function (mod) {
3
- return (mod && mod.__esModule) ? mod : { "default": mod };
4
- };
5
- Object.defineProperty(exports, "__esModule", { value: true });
6
- const jsx_runtime_1 = require("react/jsx-runtime");
7
- const react_1 = require("react");
8
- const Cart_1 = require("addio-admin-sdk/dist/Interfaces/Cart");
9
- const ISnackbarContext_1 = require("../SnackbarContext/interfaces/ISnackbarContext");
10
- const _1 = __importDefault(require("."));
11
- const useSnackbar_1 = __importDefault(require("../../hooks/useSnackbar"));
12
- const useSDK_1 = __importDefault(require("../../hooks/useSDK"));
13
- const useData_1 = __importDefault(require("../../hooks/useData"));
14
- const useUser_1 = __importDefault(require("../../hooks/useUser"));
15
- const functions_1 = require("../../../../utils/functions");
16
- const functions_2 = require("../../../../utils/functions");
17
- const cart_1 = require("addio-admin-sdk/dist/utils/cart");
18
- const discount_1 = require("addio-admin-sdk/dist/utils/discount");
19
- const g2_1 = require("addio-admin-sdk/dist/rules/GR/utils/g2");
20
- const CartContextProvider = ({ locale, children }) => {
21
- const sdk = (0, useSDK_1.default)();
22
- const { currency } = (0, useData_1.default)();
23
- const { isUserLoggedIn, loaded: userLoaded } = (0, useUser_1.default)();
24
- const { setSnackbar } = (0, useSnackbar_1.default)();
25
- const [cartData, setCartData] = (0, react_1.useState)();
26
- const [cartErrors, setCartErrors] = (0, react_1.useState)([]);
27
- const [loading, setLoading] = (0, react_1.useState)(false);
28
- const [cartSliderOpen, setCartSliderOpen] = (0, react_1.useState)(false);
29
- const [isGuest, setIsGuest] = (0, react_1.useState)();
30
- const api = !!sdk ? sdk.getAPIInfos() : null;
31
- const initCart = async () => {
32
- if (!!!api)
33
- return;
34
- const cartIDInLocalStorage = localStorage.getItem(`${api.org}__cart`);
35
- if (!!cartIDInLocalStorage) {
36
- try {
37
- const newCart = await getCartFromDatabase(cartIDInLocalStorage);
38
- if (!!newCart && !!!newCart.clerk_id) {
39
- if (newCart.status < Cart_1.CartStatusEnum.CHECKOUT_PAYMENT_SUCCESS) {
40
- return newCart;
41
- }
42
- else {
43
- localStorage.removeItem(`${api.org}__cart`);
44
- }
45
- }
46
- }
47
- catch (_) {
48
- return undefined;
49
- }
50
- }
51
- return undefined;
52
- };
53
- const updateEmail = async (newCart, email, saveToDatabase = true) => {
54
- let cart = !!newCart ? newCart : !!cartData ? cartData : (0, Cart_1.getDefaultCart)(Cart_1.CartTypeEnum.WEB);
55
- if (!!saveToDatabase) {
56
- cart = await saveCart({ user_email: email });
57
- }
58
- else {
59
- if (!!cart) {
60
- cart = Object.assign(Object.assign({}, cart), { user_email: email });
61
- }
62
- }
63
- return cart;
64
- };
65
- const updateDefaultCustomer = async (newCart, email, id, proInfo, saveToDatabase = true) => {
66
- let cart = !!newCart ? newCart : !!cartData ? cartData : (0, Cart_1.getDefaultCart)(Cart_1.CartTypeEnum.WEB);
67
- const newCustomerInfo = {
68
- customer_id: id,
69
- user_email: email,
70
- customer_info: Object.assign({ customer_default_email: email }, (proInfo || {}))
71
- };
72
- if (!!saveToDatabase) {
73
- await saveCart(newCustomerInfo);
74
- }
75
- else {
76
- cart = Object.assign(Object.assign({}, (!!cart ? cart : (0, Cart_1.getDefaultCart)(Cart_1.CartTypeEnum.WEB))), newCustomerInfo);
77
- }
78
- return cart;
79
- };
80
- const _handleInventoryError = async (shouldSave) => {
81
- setSnackbar({
82
- title: (0, functions_1.getStringByLang)({
83
- en: 'This item is unavailable, or you haved reached the maximum amount you can add to your cart.',
84
- fr: 'Cet item est indisponible, ou vous avez atteint la quantité maximale déjà au panier.'
85
- }, locale),
86
- type: ISnackbarContext_1.SnackbarTypeEnum.ERROR,
87
- isShown: true,
88
- isCart: true
89
- });
90
- if (!!shouldSave)
91
- await saveCart(undefined);
92
- };
93
- const addItem = async (newCart, items, retro = true, useParentName = false, saveToDatabase = true, defaultAdd = false, isServiceUpsellOfSku = false, customPriceList) => {
94
- if (!!!api || !!!sdk)
95
- throw new Error('SDK not initialised');
96
- let cart = !!newCart ? newCart : !!cartData ? cartData : (0, Cart_1.getDefaultCart)(Cart_1.CartTypeEnum.WEB);
97
- if (!!isGuest && typeof isGuest === 'string' && !!cart.user_email) {
98
- cart = Object.assign(Object.assign({}, cart), { user_email: isGuest });
99
- }
100
- const addedValues = await (0, cart_1.addCartItems)(cart, Array.isArray(items) ? items : [items], sdk.products.getOneInventoryItem, api.org !== 'gr', _handleInventoryError, defaultAdd, isServiceUpsellOfSku, customPriceList);
101
- cart = addedValues.cartData;
102
- if (!!saveToDatabase) {
103
- cart = await saveCart(cart);
104
- }
105
- if (!!retro && !!items && (Array.isArray(items) ? !!items.length : true)) {
106
- const i = Array.isArray(items) ? items[0] : items;
107
- const productName = useParentName ? i.parent_name : i.name;
108
- if (!!addedValues.updated) {
109
- setSnackbar({
110
- title: (0, functions_1.getStringByLang)({
111
- en: `${!!productName ? (0, functions_1.translate)(locale || 'en', productName) : 'The item'} has been successfuly updated in your cart!`,
112
- fr: `${!!productName ? (0, functions_1.translate)(locale || 'fr', productName) : `L'item`} a bien été mis à jour dans votre panier!`
113
- }, locale),
114
- type: ISnackbarContext_1.SnackbarTypeEnum.SUCCESS,
115
- isShown: true,
116
- isCart: true
117
- });
118
- }
119
- else if (!!addedValues.added) {
120
- setSnackbar({
121
- title: (0, functions_1.getStringByLang)({
122
- en: `${!!productName ? (0, functions_1.translate)(locale || 'en', productName) : 'The item'} has been successfuly added to your cart!`,
123
- fr: `${!!productName ? (0, functions_1.translate)(locale || 'fr', productName) : `L'item`} a bien été ajouté à votre panier!`
124
- }, locale),
125
- type: ISnackbarContext_1.SnackbarTypeEnum.SUCCESS,
126
- isShown: true,
127
- isCart: true
128
- });
129
- }
130
- if (!!!addedValues.maxQtyItems) {
131
- setCartSliderOpen(true);
132
- }
133
- }
134
- return cart;
135
- };
136
- const updateItem = async (newCart, items, saveToDatabase = true) => {
137
- if (!!!api || !!!sdk)
138
- throw new Error('SDK not initialised');
139
- let updatedItemsCart = !!newCart ? newCart : !!cartData ? cartData : (0, Cart_1.getDefaultCart)(Cart_1.CartTypeEnum.WEB);
140
- const itemsToUpdate = Array.isArray(items) ? items : [items];
141
- const updatedValues = await (0, cart_1.updateCartItems)(updatedItemsCart, itemsToUpdate, sdk.products.getOneInventoryItem, api.org !== 'gr', _handleInventoryError);
142
- if (!!saveToDatabase) {
143
- updatedItemsCart = await saveCart({ items: updatedValues.updatedCart.items });
144
- }
145
- return updatedItemsCart;
146
- };
147
- const deleteItem = async (newCart, sku, saveToDatabase = true, onlyIfUpsellOf) => {
148
- let cart = !!newCart ? newCart : !!cartData ? cartData : (0, Cart_1.getDefaultCart)(Cart_1.CartTypeEnum.WEB);
149
- cart = (0, cart_1.deleteCartItem)(cart, Array.isArray(sku) ? sku : [sku], onlyIfUpsellOf);
150
- if (!!saveToDatabase) {
151
- cart = await saveCart({ items: cart.items });
152
- }
153
- return cart;
154
- };
155
- const verifyCart = async () => {
156
- if (!!!api || !!!cartData)
157
- return false;
158
- if (cartData.status >= Cart_1.CartStatusEnum.CHECKOUT_PAYMENT_SUCCESS)
159
- throw new Error(`Can't process a paid or higher status cart.`);
160
- if (!!cartData.id) {
161
- try {
162
- const request = await fetch(`${api.api}/cart/${cartData.id}/verify`, {
163
- method: 'GET',
164
- headers: {
165
- Authorization: `Bearer ${api.token}`,
166
- 'Content-Type': 'application/json',
167
- 'x-gng-ecomm-token': api.userToken
168
- }
169
- });
170
- const responseData = (await request.json());
171
- if (responseData.status != 200) {
172
- throw 'Erreur lors de la requête des quotes.' + responseData.error;
173
- }
174
- const response = responseData.data;
175
- setCartData(response.cart);
176
- return response.actionsDone;
177
- }
178
- catch (error) {
179
- console.log('error in verifyCart: ', error);
180
- }
181
- }
182
- return false;
183
- };
184
- const uploadFileToOrder = async (newCart, file, propsName, saveToDatabase = true) => {
185
- if (!!!api)
186
- return;
187
- let cart = !!newCart ? newCart : !!cartData ? cartData : (0, Cart_1.getDefaultCart)(Cart_1.CartTypeEnum.WEB);
188
- if (!!!cart.id)
189
- return {
190
- cart: cart,
191
- data: undefined,
192
- error: "Couldn't convert cart data"
193
- };
194
- if (cart.status >= Cart_1.CartStatusEnum.CHECKOUT_PAYMENT_SUCCESS)
195
- throw new Error(`Can't process a paid or higher status cart.`);
196
- const base64 = await (0, functions_2.toBase64)(file);
197
- if (typeof base64 !== 'string') {
198
- return {
199
- cart: cart,
200
- data: undefined,
201
- error: "Couldn't convert file to base64"
202
- };
203
- }
204
- const request = await fetch(`${api.api}/cart/${cart.id}/uploadBase64`, {
205
- method: 'PUT',
206
- headers: {
207
- Authorization: `Bearer ${api.token}`,
208
- 'Content-Type': 'application/json',
209
- 'x-gng-ecomm-token': api.userToken
210
- },
211
- body: JSON.stringify({
212
- base64: base64
213
- })
214
- });
215
- const responseData = (await request.json());
216
- if (responseData.status != 200) {
217
- throw new Error("Impossible d'uploader le fichier" + responseData.error);
218
- }
219
- if (!!responseData.data) {
220
- if (!!saveToDatabase) {
221
- cart = await saveCart({
222
- shipping_payload: cart.shipping_payload
223
- ? Object.assign(Object.assign({}, cart.shipping_payload), { [propsName]: responseData.data }) : {
224
- [propsName]: responseData.data
225
- }
226
- });
227
- }
228
- else {
229
- cart = Object.assign(Object.assign({}, cart), { shipping_payload: cart.shipping_payload
230
- ? Object.assign(Object.assign({}, cart.shipping_payload), { [propsName]: responseData.data }) : {
231
- [propsName]: responseData.data
232
- } });
233
- }
234
- }
235
- return { cart: cart, data: responseData.data, error: undefined };
236
- };
237
- const emptyCart = async (removeCartIDFromLocalStorage = true) => {
238
- if (!!!api || !!!sdk)
239
- return false;
240
- if (!!removeCartIDFromLocalStorage) {
241
- if (process.env.NODE_ENV !== 'production')
242
- console.log('`${api.org}__cart`', `${api.org}__cart`);
243
- localStorage.removeItem(`${api.org}__cart`);
244
- setCartData(undefined);
245
- }
246
- else {
247
- const cartID = localStorage.getItem(`${api.org}__cart`);
248
- if (!!cartID) {
249
- try {
250
- const cartFromDB = await getCartFromDatabase(cartID);
251
- if (!!cartFromDB && !!!cartFromDB.clerk_id) {
252
- setCartData(cartFromDB);
253
- }
254
- }
255
- catch (err) { }
256
- }
257
- }
258
- return true;
259
- };
260
- const handlePayment = async (data = {}) => {
261
- if (!!!api || !!!sdk)
262
- return { error: { en: 'SDK not initialized', fr: 'SDK non initialisé' } };
263
- if (!!!cartData)
264
- throw new Error("Can't pay an empty/undefined cart");
265
- if (cartData.status >= Cart_1.CartStatusEnum.CHECKOUT_PAYMENT_SUCCESS)
266
- throw new Error(`Can't process a paid or higher status cart.`);
267
- const request = await fetch(`${api.api}/cart/${cartData.id}/payment`, {
268
- method: 'POST',
269
- headers: {
270
- Authorization: `Bearer ${api.token}`,
271
- 'Content-Type': 'application/json',
272
- 'x-gng-ecomm-token': api.userToken
273
- },
274
- body: JSON.stringify(Object.assign({ customer_email: cartData.user_email, customer_name: cartData.billing_address ? cartData.billing_address.expedition_recipient_name : 'Anonyme', cartTotal: Number((cartData.total * 100).toFixed(0)) }, data))
275
- });
276
- const responseData = await request.json();
277
- if (responseData.status != 200) {
278
- return { error: responseData.error };
279
- }
280
- if (!!responseData.token) {
281
- sdk.setUserToken(responseData.token);
282
- }
283
- return { accessToken: responseData.data };
284
- };
285
- const setPaidBy = async (paidByValue, customPriceList, chosenPayment) => {
286
- if (!!!cartData)
287
- return;
288
- let partial = { paid_by: paidByValue, id: cartData.id };
289
- if (!!customPriceList) {
290
- const customIncentiveInfo = (0, g2_1.getCustomIncentiveInfo)(customPriceList, cartData.discount_rules);
291
- if (!!customIncentiveInfo) {
292
- partial = Object.assign(Object.assign({}, partial), { discount_rules: customIncentiveInfo.updatedDiscountRules });
293
- }
294
- }
295
- if (!!chosenPayment && chosenPayment != paidByValue) {
296
- partial = Object.assign(Object.assign({}, partial), { shipping_payload: Object.assign(Object.assign({}, (cartData.shipping_payload || {})), { chosen_payment: chosenPayment }) });
297
- }
298
- try {
299
- await saveCart(partial, false, undefined, false, true);
300
- }
301
- catch (e) {
302
- console.log('error on saving cart with paid_by value: ', e);
303
- }
304
- };
305
- const saveOrder = async (payment_payload) => {
306
- if (!!!api)
307
- throw new Error('SDK not initialised');
308
- if (!!!cartData)
309
- throw new Error("Can't pay an empty/undefined cart");
310
- if (cartData.status >= Cart_1.CartStatusEnum.CHECKOUT_PAYMENT_SUCCESS)
311
- throw new Error(`Can't process a paid or higher status cart.`);
312
- try {
313
- const fetchData = await fetch(`${api.api}/cart/${cartData.id}/saveOrder`, {
314
- method: 'POST',
315
- headers: {
316
- authorization: `Bearer ${api.token}`,
317
- 'Content-Type': 'application/json',
318
- 'x-gng-ecomm-token': api.userToken
319
- },
320
- body: JSON.stringify({ payment_payload })
321
- });
322
- const response = (await fetchData.json());
323
- if (response.status !== 200) {
324
- return 'error';
325
- }
326
- return response.data;
327
- }
328
- catch (err) {
329
- return 'error';
330
- }
331
- };
332
- const removeDiscountRule = async (cart, code) => {
333
- try {
334
- await saveCart({
335
- subtotalWithoutPromotions: null,
336
- cart_promo_applied: null,
337
- cart_promos_applied: !!cart.cart_promos_applied
338
- ? cart.cart_promos_applied.filter((x) => x.promo_code !== code)
339
- : null
340
- });
341
- return true;
342
- }
343
- catch (e) {
344
- console.log('error on removing discountRule: ', e.toString());
345
- return false;
346
- }
347
- };
348
- const updateBillingAddress = async (newCart, expeditionInfo, saveToDatabase = true, setCAIfNoCountry) => {
349
- let cart = !!newCart ? newCart : !!cartData ? cartData : (0, Cart_1.getDefaultCart)(Cart_1.CartTypeEnum.WEB);
350
- let newExpeditionInfo = expeditionInfo;
351
- if (!!setCAIfNoCountry && !!expeditionInfo && !!!expeditionInfo.address.country) {
352
- newExpeditionInfo = Object.assign(Object.assign({}, expeditionInfo), { address: Object.assign(Object.assign({}, expeditionInfo.address), { country: 'CA' }) });
353
- }
354
- if (!!saveToDatabase) {
355
- cart = await saveCart({ billing_address: newExpeditionInfo });
356
- }
357
- else {
358
- cart = Object.assign(Object.assign({}, cart), { billing_address: newExpeditionInfo });
359
- }
360
- return cart;
361
- };
362
- const updateShippingAddress = async (newCart, isPickupAtStore, expeditionInfo, saveToDatabase = true, setCAIfNoCountry) => {
363
- let cart = !!newCart ? newCart : !!cartData ? cartData : (0, Cart_1.getDefaultCart)(Cart_1.CartTypeEnum.WEB);
364
- let newExpeditionInfo = expeditionInfo;
365
- if (!!setCAIfNoCountry && !!expeditionInfo && !!!expeditionInfo.address.country) {
366
- newExpeditionInfo = Object.assign(Object.assign({}, expeditionInfo), { address: Object.assign(Object.assign({}, expeditionInfo.address), { country: 'CA' }) });
367
- }
368
- if (!!saveToDatabase) {
369
- cart = await saveCart({
370
- is_pickup: isPickupAtStore,
371
- shipping_address: newExpeditionInfo,
372
- shipping_selected: undefined
373
- });
374
- }
375
- else {
376
- cart = Object.assign(Object.assign({}, cart), { is_pickup: isPickupAtStore, shipping_address: newExpeditionInfo, shipping_selected: undefined });
377
- }
378
- return cart;
379
- };
380
- const getIsSameBillingThenShipping = () => {
381
- if (!!!cartData)
382
- return false;
383
- if (!!!cartData.billing_address && !!!cartData.shipping_address)
384
- return false;
385
- return (!!cartData.billing_address &&
386
- !!cartData.shipping_address &&
387
- (0, functions_1.string_to_slug)(cartData.billing_address.address.postal_code) ===
388
- (0, functions_1.string_to_slug)(cartData.shipping_address.address.postal_code) &&
389
- (0, functions_1.string_to_slug)(cartData.billing_address.address.line1) === (0, functions_1.string_to_slug)(cartData.shipping_address.address.line1));
390
- };
391
- const setShippingPayload = async (newCart, payload, saveToDatabase = true) => {
392
- let cart = !!newCart ? newCart : !!cartData ? cartData : (0, Cart_1.getDefaultCart)(Cart_1.CartTypeEnum.WEB);
393
- if (!!saveToDatabase) {
394
- cart = await saveCart({ shipping_payload: payload });
395
- }
396
- else {
397
- cart = Object.assign(Object.assign({}, cart), { shipping_payload: payload });
398
- }
399
- return cart;
400
- };
401
- const getShippingQuotes = async () => {
402
- if (!!!api || !!!sdk)
403
- return;
404
- if (!!!cartData)
405
- throw new Error("Can't get shipping quotes for an empty/undefined cart");
406
- if (cartData.status >= Cart_1.CartStatusEnum.CHECKOUT_PAYMENT_SUCCESS)
407
- throw new Error(`Can't process a paid or higher status cart.`);
408
- const request = await fetch(`${api.api}/cart/getShippingQuotes`, {
409
- method: 'POST',
410
- headers: {
411
- Authorization: `Bearer ${api.token}`,
412
- 'x-gng-ecomm-token': api.userToken
413
- },
414
- body: cartData.id
415
- });
416
- const responseData = (await request.json());
417
- if (responseData.status != 200 || !!responseData.error) {
418
- throw 'Erreur lors de la requête des quotes.' + responseData.error;
419
- }
420
- if (responseData.token) {
421
- sdk.setUserToken(responseData.token);
422
- }
423
- return responseData.data.shippingQuotes;
424
- };
425
- const selectShippingQuote = async (quote) => {
426
- if (!!!api || !!!sdk)
427
- return;
428
- if (!!!cartData)
429
- throw new Error("Can't select shipping quote for an empty/undefined cart");
430
- const request = await fetch(`${api.api}/cart/${cartData.id}/setSelectedShippingMethod`, {
431
- method: 'POST',
432
- headers: {
433
- Authorization: `Bearer ${api.token}`,
434
- 'Content-Type': 'application/json',
435
- 'x-gng-ecomm-token': api.userToken
436
- },
437
- body: JSON.stringify(quote)
438
- });
439
- const responseData = await request.json();
440
- if (responseData.status != 200) {
441
- throw new Error('Impossible de sélectionner la shipping quote ' + responseData.error);
442
- }
443
- if (responseData.token) {
444
- sdk.setUserToken(responseData.token);
445
- }
446
- const updatedCart = responseData.data;
447
- setCartData(updatedCart);
448
- return updatedCart;
449
- };
450
- const setPromoCode = async (promo_code) => {
451
- try {
452
- await saveCart({}, true, promo_code);
453
- }
454
- catch (error) {
455
- if (process.env.NODE_ENV === 'development')
456
- console.log(`error on SDK while applying promo on cart`, error);
457
- }
458
- };
459
- const getCartFromDatabase = async (cardID) => {
460
- if (!!!api || !!!sdk)
461
- return;
462
- const request = await fetch(`${api.api}/cart/${cardID}`, {
463
- method: 'GET',
464
- headers: {
465
- Authorization: `Bearer ${api.token}`,
466
- 'Content-Type': 'application/json',
467
- 'x-gng-ecomm-token': api.userToken
468
- }
469
- });
470
- const responseData = await request.json();
471
- if (responseData.status !== 200) {
472
- throw new Error('Impossible de fetch le cart: ' + responseData.error);
473
- }
474
- if (responseData.token) {
475
- sdk.setUserToken(responseData.token);
476
- }
477
- return responseData.data;
478
- };
479
- const saveCart = async (cart, saveToDatabase = true, promo_code, onlyNewCart = false, partialOnly = false) => {
480
- let newCartData = Object.assign(Object.assign({}, (!!cartData && !!!onlyNewCart ? cartData : (0, Cart_1.getDefaultCart)(Cart_1.CartTypeEnum.WEB))), cart);
481
- if (!!!newCartData)
482
- throw new Error("Can't save an empty/undefined cart");
483
- if (newCartData.status >= Cart_1.CartStatusEnum.CHECKOUT_PAYMENT_SUCCESS)
484
- throw new Error(`Can't process a paid or higher status cart.`);
485
- if (!!api) {
486
- const response = await fetch(`${api.api}/cart`, {
487
- method: 'POST',
488
- headers: {
489
- Authorization: `Bearer ${api.token}`,
490
- 'Content-Type': 'application/json',
491
- 'x-gng-ecomm-token': api.userToken
492
- },
493
- body: JSON.stringify({ cartData: newCartData, currency, locale, promo_code, saveToDatabase, partialOnly })
494
- });
495
- const responseData = await response.json();
496
- if (responseData.status != 200 || !!responseData.error) {
497
- setCartErrors([
498
- typeof responseData.error === 'string'
499
- ? responseData.error
500
- : (0, functions_1.getStringByLang)(responseData.error, locale)
501
- ]);
502
- }
503
- else {
504
- if (!!responseData.data) {
505
- const cartIDInLocalStorage = localStorage.getItem(`${api.org}__cart`);
506
- if (!!responseData.data.id && (!!!cartIDInLocalStorage || cartIDInLocalStorage !== responseData.data.id)) {
507
- localStorage.setItem(`${api.org}__cart`, responseData.data.id);
508
- }
509
- newCartData = responseData.data;
510
- setCartData(newCartData);
511
- setCartErrors([]);
512
- }
513
- }
514
- }
515
- else {
516
- setCartData(newCartData);
517
- }
518
- return newCartData;
519
- };
520
- const getApplicablePromos = async (forceShipping) => {
521
- if (!!!api || !!!sdk)
522
- return;
523
- if (!!!cartData)
524
- throw new Error("Can't get promos if no cart data");
525
- const request = await fetch(`${api.api}/cart/${cartData.id}/getApplicablePromosWithShipping`, {
526
- method: 'GET',
527
- headers: {
528
- Authorization: `Bearer ${api.token}`,
529
- 'Content-Type': 'application/json',
530
- 'x-gng-ecomm-token': api.userToken
531
- }
532
- });
533
- const responseData = await request.json();
534
- if (responseData.status !== 200) {
535
- throw new Error('Impossible de fetch les promos associé: ' + responseData.error);
536
- }
537
- return responseData.data;
538
- };
539
- const canBePaidWithPA = async (userId) => {
540
- if (!!!api)
541
- return;
542
- if (!!!cartData)
543
- throw new Error("Can't check if cart is payable with PA if cartData is undefined.");
544
- if (!!!userId)
545
- throw new Error("Can't check if cart is payable with PA without userId");
546
- const request = await fetch(`${api.api}/cart/${cartData.id}/canBePaidWithPA`, {
547
- method: 'POST',
548
- headers: {
549
- Authorization: `Bearer ${api.token}`,
550
- 'Content-Type': 'application/json',
551
- 'x-gng-ecomm-token': api.userToken
552
- },
553
- body: JSON.stringify({ userId })
554
- });
555
- const responseData = await request.json();
556
- if (responseData.status !== 200) {
557
- throw new Error("Can't apply promise to purchase to cart: " + responseData.error);
558
- }
559
- return responseData.data;
560
- };
561
- const getPaymentIncentiveDiscountAmount = (skipCheckForRuleFields) => {
562
- if (!!!cartData)
563
- return;
564
- if (!!cartData.promo_after_taxes_amount)
565
- return cartData.promo_after_taxes_amount;
566
- let couldApplyIncentive = (0, discount_1.checkIfCouldApplyIncentivePromo)(cartData, skipCheckForRuleFields);
567
- if (!!!couldApplyIncentive)
568
- return;
569
- let incentiveCalculatedAmount = (0, discount_1.getAfterTaxesPromosTotalAmount)(cartData, true);
570
- return incentiveCalculatedAmount;
571
- };
572
- (0, react_1.useEffect)(() => {
573
- if (!!!locale || !!!cartData || cartData.locale === locale)
574
- return;
575
- saveCart({ locale });
576
- }, [locale]);
577
- (0, react_1.useEffect)(() => {
578
- if (!!!sdk || !userLoaded)
579
- return;
580
- const checkCartCustomerValid = async () => {
581
- if (!isUserLoggedIn && !!cartData) {
582
- const customerId = cartData.customer_id;
583
- const customerEmail = !!cartData.customer_info ? cartData.customer_info.customer_default_email : '';
584
- const customerDoc = !!cartData.customer_info ? cartData.customer_info.pro_proof_doc : '';
585
- if (!!customerId || !!customerEmail || !!customerDoc) {
586
- await emptyCart();
587
- }
588
- }
589
- };
590
- checkCartCustomerValid();
591
- }, [sdk, isUserLoggedIn, userLoaded, cartData]);
592
- (0, react_1.useEffect)(() => {
593
- if (!!!api)
594
- return;
595
- const getContent = async () => {
596
- const cartData = await initCart();
597
- if (!!!cartData)
598
- return;
599
- setCartData(cartData);
600
- };
601
- getContent();
602
- }, [sdk]);
603
- return ((0, jsx_runtime_1.jsx)(_1.default.Provider, Object.assign({ value: {
604
- loading,
605
- cartData,
606
- cartErrors,
607
- cartSliderOpen,
608
- isGuest,
609
- setIsGuest,
610
- setCartErrors,
611
- setCartData,
612
- saveCart,
613
- setCartLoading: setLoading,
614
- getCartFromDatabase,
615
- handlePayment,
616
- setCartSliderOpen,
617
- addItem,
618
- deleteItem,
619
- updateItem,
620
- verifyCart,
621
- uploadFileToOrder,
622
- updateEmail,
623
- updateDefaultCustomer,
624
- emptyCart,
625
- saveOrder,
626
- updateShippingAddress,
627
- updateBillingAddress,
628
- getIsSameBillingThenShipping,
629
- setShippingPayload,
630
- removeDiscountRule,
631
- getShippingQuotes,
632
- selectShippingQuote,
633
- setPromoCode,
634
- getApplicablePromos,
635
- canBePaidWithPA,
636
- getPaymentIncentiveDiscountAmount,
637
- setPaidBy
638
- } }, { children: children })));
639
- };
640
- exports.default = CartContextProvider;
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ const jsx_runtime_1 = require("react/jsx-runtime");
7
+ const react_1 = require("react");
8
+ const Cart_1 = require("addio-admin-sdk/dist/Interfaces/Cart");
9
+ const ISnackbarContext_1 = require("../SnackbarContext/interfaces/ISnackbarContext");
10
+ const _1 = __importDefault(require("."));
11
+ const useSnackbar_1 = __importDefault(require("../../hooks/useSnackbar"));
12
+ const useSDK_1 = __importDefault(require("../../hooks/useSDK"));
13
+ const useData_1 = __importDefault(require("../../hooks/useData"));
14
+ const useUser_1 = __importDefault(require("../../hooks/useUser"));
15
+ const functions_1 = require("../../../../utils/functions");
16
+ const functions_2 = require("../../../../utils/functions");
17
+ const cart_1 = require("addio-admin-sdk/dist/utils/cart");
18
+ const discount_1 = require("addio-admin-sdk/dist/utils/discount");
19
+ const g2_1 = require("addio-admin-sdk/dist/rules/GR/utils/g2");
20
+ const CartContextProvider = ({ locale, children }) => {
21
+ const sdk = (0, useSDK_1.default)();
22
+ const { currency } = (0, useData_1.default)();
23
+ const { isUserLoggedIn, loaded: userLoaded } = (0, useUser_1.default)();
24
+ const { setSnackbar } = (0, useSnackbar_1.default)();
25
+ const [cartData, setCartData] = (0, react_1.useState)();
26
+ const [cartErrors, setCartErrors] = (0, react_1.useState)([]);
27
+ const [loading, setLoading] = (0, react_1.useState)(false);
28
+ const [cartSliderOpen, setCartSliderOpen] = (0, react_1.useState)(false);
29
+ const [isGuest, setIsGuest] = (0, react_1.useState)();
30
+ const api = !!sdk ? sdk.getAPIInfos() : null;
31
+ const initCart = async () => {
32
+ if (!!!api)
33
+ return;
34
+ const cartIDInLocalStorage = localStorage.getItem(`${api.org}__cart`);
35
+ if (!!cartIDInLocalStorage) {
36
+ try {
37
+ const newCart = await getCartFromDatabase(cartIDInLocalStorage);
38
+ if (!!newCart && !!!newCart.clerk_id) {
39
+ if (newCart.status < Cart_1.CartStatusEnum.CHECKOUT_PAYMENT_SUCCESS) {
40
+ return newCart;
41
+ }
42
+ else {
43
+ localStorage.removeItem(`${api.org}__cart`);
44
+ }
45
+ }
46
+ }
47
+ catch (_) {
48
+ return undefined;
49
+ }
50
+ }
51
+ return undefined;
52
+ };
53
+ const updateEmail = async (newCart, email, saveToDatabase = true) => {
54
+ let cart = !!newCart ? newCart : !!cartData ? cartData : (0, Cart_1.getDefaultCart)(Cart_1.CartTypeEnum.WEB);
55
+ if (!!saveToDatabase) {
56
+ cart = await saveCart({ user_email: email });
57
+ }
58
+ else {
59
+ if (!!cart) {
60
+ cart = Object.assign(Object.assign({}, cart), { user_email: email });
61
+ }
62
+ }
63
+ return cart;
64
+ };
65
+ const updateDefaultCustomer = async (newCart, email, id, proInfo, saveToDatabase = true) => {
66
+ let cart = !!newCart ? newCart : !!cartData ? cartData : (0, Cart_1.getDefaultCart)(Cart_1.CartTypeEnum.WEB);
67
+ const newCustomerInfo = {
68
+ customer_id: id,
69
+ user_email: email,
70
+ customer_info: Object.assign({ customer_default_email: email }, (proInfo || {}))
71
+ };
72
+ if (!!saveToDatabase) {
73
+ await saveCart(newCustomerInfo);
74
+ }
75
+ else {
76
+ cart = Object.assign(Object.assign({}, (!!cart ? cart : (0, Cart_1.getDefaultCart)(Cart_1.CartTypeEnum.WEB))), newCustomerInfo);
77
+ }
78
+ return cart;
79
+ };
80
+ const _handleInventoryError = async (shouldSave) => {
81
+ setSnackbar({
82
+ title: (0, functions_1.getStringByLang)({
83
+ en: 'This item is unavailable, or you haved reached the maximum amount you can add to your cart.',
84
+ fr: 'Cet item est indisponible, ou vous avez atteint la quantité maximale déjà au panier.'
85
+ }, locale),
86
+ type: ISnackbarContext_1.SnackbarTypeEnum.ERROR,
87
+ isShown: true,
88
+ isCart: true
89
+ });
90
+ if (!!shouldSave)
91
+ await saveCart(undefined);
92
+ };
93
+ const addItem = async (newCart, items, retro = true, useParentName = false, saveToDatabase = true, defaultAdd = false, isServiceUpsellOfSku = false, customPriceList) => {
94
+ if (!!!api || !!!sdk)
95
+ throw new Error('SDK not initialised');
96
+ let cart = !!newCart ? newCart : !!cartData ? cartData : (0, Cart_1.getDefaultCart)(Cart_1.CartTypeEnum.WEB);
97
+ if (!!isGuest && typeof isGuest === 'string' && !!cart.user_email) {
98
+ cart = Object.assign(Object.assign({}, cart), { user_email: isGuest });
99
+ }
100
+ const addedValues = await (0, cart_1.addCartItems)(cart, Array.isArray(items) ? items : [items], sdk.products.getOneInventoryItem, api.org !== 'gr', _handleInventoryError, defaultAdd, isServiceUpsellOfSku, customPriceList);
101
+ cart = addedValues.cartData;
102
+ if (!!saveToDatabase) {
103
+ cart = await saveCart(cart);
104
+ }
105
+ if (!!retro && !!items && (Array.isArray(items) ? !!items.length : true)) {
106
+ const i = Array.isArray(items) ? items[0] : items;
107
+ const productName = useParentName ? i.parent_name : i.name;
108
+ if (!!addedValues.updated) {
109
+ setSnackbar({
110
+ title: (0, functions_1.getStringByLang)({
111
+ en: `${!!productName ? (0, functions_1.translate)(locale || 'en', productName) : 'The item'} has been successfuly updated in your cart!`,
112
+ fr: `${!!productName ? (0, functions_1.translate)(locale || 'fr', productName) : `L'item`} a bien été mis à jour dans votre panier!`
113
+ }, locale),
114
+ type: ISnackbarContext_1.SnackbarTypeEnum.SUCCESS,
115
+ isShown: true,
116
+ isCart: true
117
+ });
118
+ }
119
+ else if (!!addedValues.added) {
120
+ setSnackbar({
121
+ title: (0, functions_1.getStringByLang)({
122
+ en: `${!!productName ? (0, functions_1.translate)(locale || 'en', productName) : 'The item'} has been successfuly added to your cart!`,
123
+ fr: `${!!productName ? (0, functions_1.translate)(locale || 'fr', productName) : `L'item`} a bien été ajouté à votre panier!`
124
+ }, locale),
125
+ type: ISnackbarContext_1.SnackbarTypeEnum.SUCCESS,
126
+ isShown: true,
127
+ isCart: true
128
+ });
129
+ }
130
+ if (!!!addedValues.maxQtyItems) {
131
+ setCartSliderOpen(true);
132
+ }
133
+ }
134
+ return cart;
135
+ };
136
+ const updateItem = async (newCart, items, saveToDatabase = true) => {
137
+ if (!!!api || !!!sdk)
138
+ throw new Error('SDK not initialised');
139
+ let updatedItemsCart = !!newCart ? newCart : !!cartData ? cartData : (0, Cart_1.getDefaultCart)(Cart_1.CartTypeEnum.WEB);
140
+ const itemsToUpdate = Array.isArray(items) ? items : [items];
141
+ const updatedValues = await (0, cart_1.updateCartItems)(updatedItemsCart, itemsToUpdate, sdk.products.getOneInventoryItem, api.org !== 'gr', _handleInventoryError);
142
+ if (!!saveToDatabase) {
143
+ updatedItemsCart = await saveCart({ items: updatedValues.updatedCart.items });
144
+ }
145
+ return updatedItemsCart;
146
+ };
147
+ const deleteItem = async (newCart, sku, saveToDatabase = true, onlyIfUpsellOf) => {
148
+ let cart = !!newCart ? newCart : !!cartData ? cartData : (0, Cart_1.getDefaultCart)(Cart_1.CartTypeEnum.WEB);
149
+ cart = (0, cart_1.deleteCartItem)(cart, Array.isArray(sku) ? sku : [sku], onlyIfUpsellOf);
150
+ if (!!saveToDatabase) {
151
+ cart = await saveCart({ items: cart.items });
152
+ }
153
+ return cart;
154
+ };
155
+ const verifyCart = async () => {
156
+ if (!!!api || !!!cartData)
157
+ return false;
158
+ if (cartData.status >= Cart_1.CartStatusEnum.CHECKOUT_PAYMENT_SUCCESS)
159
+ throw new Error(`Can't process a paid or higher status cart.`);
160
+ if (!!cartData.id) {
161
+ try {
162
+ const request = await fetch(`${api.api}/cart/${cartData.id}/verify`, {
163
+ method: 'GET',
164
+ headers: {
165
+ Authorization: `Bearer ${api.token}`,
166
+ 'Content-Type': 'application/json',
167
+ 'x-gng-ecomm-token': api.userToken
168
+ }
169
+ });
170
+ const responseData = (await request.json());
171
+ if (responseData.status != 200) {
172
+ throw 'Erreur lors de la requête des quotes.' + responseData.error;
173
+ }
174
+ const response = responseData.data;
175
+ setCartData(response.cart);
176
+ return response.actionsDone;
177
+ }
178
+ catch (error) {
179
+ console.log('error in verifyCart: ', error);
180
+ }
181
+ }
182
+ return false;
183
+ };
184
+ const uploadFileToOrder = async (newCart, file, propsName, saveToDatabase = true) => {
185
+ if (!!!api)
186
+ return;
187
+ let cart = !!newCart ? newCart : !!cartData ? cartData : (0, Cart_1.getDefaultCart)(Cart_1.CartTypeEnum.WEB);
188
+ if (!!!cart.id)
189
+ return {
190
+ cart: cart,
191
+ data: undefined,
192
+ error: "Couldn't convert cart data"
193
+ };
194
+ if (cart.status >= Cart_1.CartStatusEnum.CHECKOUT_PAYMENT_SUCCESS)
195
+ throw new Error(`Can't process a paid or higher status cart.`);
196
+ const base64 = await (0, functions_2.toBase64)(file);
197
+ if (typeof base64 !== 'string') {
198
+ return {
199
+ cart: cart,
200
+ data: undefined,
201
+ error: "Couldn't convert file to base64"
202
+ };
203
+ }
204
+ const request = await fetch(`${api.api}/cart/${cart.id}/uploadBase64`, {
205
+ method: 'PUT',
206
+ headers: {
207
+ Authorization: `Bearer ${api.token}`,
208
+ 'Content-Type': 'application/json',
209
+ 'x-gng-ecomm-token': api.userToken
210
+ },
211
+ body: JSON.stringify({
212
+ base64: base64
213
+ })
214
+ });
215
+ const responseData = (await request.json());
216
+ if (responseData.status != 200) {
217
+ throw new Error("Impossible d'uploader le fichier" + responseData.error);
218
+ }
219
+ if (!!responseData.data) {
220
+ if (!!saveToDatabase) {
221
+ cart = await saveCart({
222
+ shipping_payload: cart.shipping_payload
223
+ ? Object.assign(Object.assign({}, cart.shipping_payload), { [propsName]: responseData.data }) : {
224
+ [propsName]: responseData.data
225
+ }
226
+ });
227
+ }
228
+ else {
229
+ cart = Object.assign(Object.assign({}, cart), { shipping_payload: cart.shipping_payload
230
+ ? Object.assign(Object.assign({}, cart.shipping_payload), { [propsName]: responseData.data }) : {
231
+ [propsName]: responseData.data
232
+ } });
233
+ }
234
+ }
235
+ return { cart: cart, data: responseData.data, error: undefined };
236
+ };
237
+ const emptyCart = async (removeCartIDFromLocalStorage = true) => {
238
+ if (!!!api || !!!sdk)
239
+ return false;
240
+ if (!!removeCartIDFromLocalStorage) {
241
+ if (process.env.NODE_ENV !== 'production')
242
+ console.log('`${api.org}__cart`', `${api.org}__cart`);
243
+ localStorage.removeItem(`${api.org}__cart`);
244
+ setCartData(undefined);
245
+ }
246
+ else {
247
+ const cartID = localStorage.getItem(`${api.org}__cart`);
248
+ if (!!cartID) {
249
+ try {
250
+ const cartFromDB = await getCartFromDatabase(cartID);
251
+ if (!!cartFromDB && !!!cartFromDB.clerk_id) {
252
+ setCartData(cartFromDB);
253
+ }
254
+ }
255
+ catch (err) { }
256
+ }
257
+ }
258
+ return true;
259
+ };
260
+ const handlePayment = async (data = {}) => {
261
+ if (!!!api || !!!sdk)
262
+ return { error: { en: 'SDK not initialized', fr: 'SDK non initialisé' } };
263
+ if (!!!cartData)
264
+ throw new Error("Can't pay an empty/undefined cart");
265
+ if (cartData.status >= Cart_1.CartStatusEnum.CHECKOUT_PAYMENT_SUCCESS)
266
+ throw new Error(`Can't process a paid or higher status cart.`);
267
+ const request = await fetch(`${api.api}/cart/${cartData.id}/payment`, {
268
+ method: 'POST',
269
+ headers: {
270
+ Authorization: `Bearer ${api.token}`,
271
+ 'Content-Type': 'application/json',
272
+ 'x-gng-ecomm-token': api.userToken
273
+ },
274
+ body: JSON.stringify(Object.assign({ customer_email: cartData.user_email, customer_name: cartData.billing_address ? cartData.billing_address.expedition_recipient_name : 'Anonyme', cartTotal: Number((cartData.total * 100).toFixed(0)) }, data))
275
+ });
276
+ const responseData = await request.json();
277
+ if (responseData.status != 200) {
278
+ return { error: responseData.error };
279
+ }
280
+ if (!!responseData.token) {
281
+ sdk.setUserToken(responseData.token);
282
+ }
283
+ return { accessToken: responseData.data };
284
+ };
285
+ const setPaidBy = async (paidByValue, customPriceList, chosenPayment) => {
286
+ if (!!!cartData)
287
+ return;
288
+ let partial = { paid_by: paidByValue, id: cartData.id };
289
+ if (!!customPriceList) {
290
+ const customIncentiveInfo = (0, g2_1.getCustomIncentiveInfo)(customPriceList, cartData.discount_rules);
291
+ if (!!customIncentiveInfo) {
292
+ partial = Object.assign(Object.assign({}, partial), { discount_rules: customIncentiveInfo.updatedDiscountRules });
293
+ }
294
+ }
295
+ if (!!chosenPayment && chosenPayment != paidByValue) {
296
+ partial = Object.assign(Object.assign({}, partial), { shipping_payload: Object.assign(Object.assign({}, (cartData.shipping_payload || {})), { chosen_payment: chosenPayment }) });
297
+ }
298
+ try {
299
+ await saveCart(partial, false, undefined, false, true);
300
+ }
301
+ catch (e) {
302
+ console.log('error on saving cart with paid_by value: ', e);
303
+ }
304
+ };
305
+ const saveOrder = async (payment_payload) => {
306
+ if (!!!api)
307
+ throw new Error('SDK not initialised');
308
+ if (!!!cartData)
309
+ throw new Error("Can't pay an empty/undefined cart");
310
+ if (cartData.status >= Cart_1.CartStatusEnum.CHECKOUT_PAYMENT_SUCCESS)
311
+ throw new Error(`Can't process a paid or higher status cart.`);
312
+ try {
313
+ const fetchData = await fetch(`${api.api}/cart/${cartData.id}/saveOrder`, {
314
+ method: 'POST',
315
+ headers: {
316
+ authorization: `Bearer ${api.token}`,
317
+ 'Content-Type': 'application/json',
318
+ 'x-gng-ecomm-token': api.userToken
319
+ },
320
+ body: JSON.stringify({ payment_payload })
321
+ });
322
+ const response = (await fetchData.json());
323
+ if (response.status !== 200) {
324
+ return 'error';
325
+ }
326
+ return response.data;
327
+ }
328
+ catch (err) {
329
+ return 'error';
330
+ }
331
+ };
332
+ const removeDiscountRule = async (cart, code) => {
333
+ try {
334
+ await saveCart({
335
+ subtotalWithoutPromotions: null,
336
+ cart_promo_applied: null,
337
+ cart_promos_applied: !!cart.cart_promos_applied
338
+ ? cart.cart_promos_applied.filter((x) => x.promo_code !== code)
339
+ : null
340
+ });
341
+ return true;
342
+ }
343
+ catch (e) {
344
+ console.log('error on removing discountRule: ', e.toString());
345
+ return false;
346
+ }
347
+ };
348
+ const updateBillingAddress = async (newCart, expeditionInfo, saveToDatabase = true, setCAIfNoCountry) => {
349
+ let cart = !!newCart ? newCart : !!cartData ? cartData : (0, Cart_1.getDefaultCart)(Cart_1.CartTypeEnum.WEB);
350
+ let newExpeditionInfo = expeditionInfo;
351
+ if (!!setCAIfNoCountry && !!expeditionInfo && !!!expeditionInfo.address.country) {
352
+ newExpeditionInfo = Object.assign(Object.assign({}, expeditionInfo), { address: Object.assign(Object.assign({}, expeditionInfo.address), { country: 'CA' }) });
353
+ }
354
+ if (!!saveToDatabase) {
355
+ cart = await saveCart({ billing_address: newExpeditionInfo });
356
+ }
357
+ else {
358
+ cart = Object.assign(Object.assign({}, cart), { billing_address: newExpeditionInfo });
359
+ }
360
+ return cart;
361
+ };
362
+ const updateShippingAddress = async (newCart, isPickupAtStore, expeditionInfo, saveToDatabase = true, setCAIfNoCountry) => {
363
+ let cart = !!newCart ? newCart : !!cartData ? cartData : (0, Cart_1.getDefaultCart)(Cart_1.CartTypeEnum.WEB);
364
+ let newExpeditionInfo = expeditionInfo;
365
+ if (!!setCAIfNoCountry && !!expeditionInfo && !!!expeditionInfo.address.country) {
366
+ newExpeditionInfo = Object.assign(Object.assign({}, expeditionInfo), { address: Object.assign(Object.assign({}, expeditionInfo.address), { country: 'CA' }) });
367
+ }
368
+ if (!!saveToDatabase) {
369
+ cart = await saveCart({
370
+ is_pickup: isPickupAtStore,
371
+ shipping_address: newExpeditionInfo,
372
+ shipping_selected: undefined
373
+ });
374
+ }
375
+ else {
376
+ cart = Object.assign(Object.assign({}, cart), { is_pickup: isPickupAtStore, shipping_address: newExpeditionInfo, shipping_selected: undefined });
377
+ }
378
+ return cart;
379
+ };
380
+ const getIsSameBillingThenShipping = () => {
381
+ if (!!!cartData)
382
+ return false;
383
+ if (!!!cartData.billing_address && !!!cartData.shipping_address)
384
+ return false;
385
+ return (!!cartData.billing_address &&
386
+ !!cartData.shipping_address &&
387
+ (0, functions_1.string_to_slug)(cartData.billing_address.address.postal_code) ===
388
+ (0, functions_1.string_to_slug)(cartData.shipping_address.address.postal_code) &&
389
+ (0, functions_1.string_to_slug)(cartData.billing_address.address.line1) === (0, functions_1.string_to_slug)(cartData.shipping_address.address.line1));
390
+ };
391
+ const setShippingPayload = async (newCart, payload, saveToDatabase = true) => {
392
+ let cart = !!newCart ? newCart : !!cartData ? cartData : (0, Cart_1.getDefaultCart)(Cart_1.CartTypeEnum.WEB);
393
+ if (!!saveToDatabase) {
394
+ cart = await saveCart({ shipping_payload: payload });
395
+ }
396
+ else {
397
+ cart = Object.assign(Object.assign({}, cart), { shipping_payload: payload });
398
+ }
399
+ return cart;
400
+ };
401
+ const getShippingQuotes = async () => {
402
+ if (!!!api || !!!sdk)
403
+ return;
404
+ if (!!!cartData)
405
+ throw new Error("Can't get shipping quotes for an empty/undefined cart");
406
+ if (cartData.status >= Cart_1.CartStatusEnum.CHECKOUT_PAYMENT_SUCCESS)
407
+ throw new Error(`Can't process a paid or higher status cart.`);
408
+ const request = await fetch(`${api.api}/cart/getShippingQuotes`, {
409
+ method: 'POST',
410
+ headers: {
411
+ Authorization: `Bearer ${api.token}`,
412
+ 'x-gng-ecomm-token': api.userToken
413
+ },
414
+ body: cartData.id
415
+ });
416
+ const responseData = (await request.json());
417
+ if (responseData.status != 200 || !!responseData.error) {
418
+ throw 'Erreur lors de la requête des quotes.' + responseData.error;
419
+ }
420
+ if (responseData.token) {
421
+ sdk.setUserToken(responseData.token);
422
+ }
423
+ return responseData.data.shippingQuotes;
424
+ };
425
+ const selectShippingQuote = async (quote) => {
426
+ if (!!!api || !!!sdk)
427
+ return;
428
+ if (!!!cartData)
429
+ throw new Error("Can't select shipping quote for an empty/undefined cart");
430
+ const request = await fetch(`${api.api}/cart/${cartData.id}/setSelectedShippingMethod`, {
431
+ method: 'POST',
432
+ headers: {
433
+ Authorization: `Bearer ${api.token}`,
434
+ 'Content-Type': 'application/json',
435
+ 'x-gng-ecomm-token': api.userToken
436
+ },
437
+ body: JSON.stringify(quote)
438
+ });
439
+ const responseData = await request.json();
440
+ if (responseData.status != 200) {
441
+ throw new Error('Impossible de sélectionner la shipping quote ' + responseData.error);
442
+ }
443
+ if (responseData.token) {
444
+ sdk.setUserToken(responseData.token);
445
+ }
446
+ const updatedCart = responseData.data;
447
+ setCartData(updatedCart);
448
+ return updatedCart;
449
+ };
450
+ const setPromoCode = async (promo_code) => {
451
+ try {
452
+ await saveCart({}, true, promo_code);
453
+ }
454
+ catch (error) {
455
+ if (process.env.NODE_ENV === 'development')
456
+ console.log(`error on SDK while applying promo on cart`, error);
457
+ }
458
+ };
459
+ const getCartFromDatabase = async (cardID) => {
460
+ if (!!!api || !!!sdk)
461
+ return;
462
+ const request = await fetch(`${api.api}/cart/${cardID}`, {
463
+ method: 'GET',
464
+ headers: {
465
+ Authorization: `Bearer ${api.token}`,
466
+ 'Content-Type': 'application/json',
467
+ 'x-gng-ecomm-token': api.userToken
468
+ }
469
+ });
470
+ const responseData = await request.json();
471
+ if (responseData.status !== 200) {
472
+ throw new Error('Impossible de fetch le cart: ' + responseData.error);
473
+ }
474
+ if (responseData.token) {
475
+ sdk.setUserToken(responseData.token);
476
+ }
477
+ return responseData.data;
478
+ };
479
+ const saveCart = async (cart, saveToDatabase = true, promo_code, onlyNewCart = false, partialOnly = false) => {
480
+ let newCartData = Object.assign(Object.assign({}, (!!cartData && !!!onlyNewCart ? cartData : (0, Cart_1.getDefaultCart)(Cart_1.CartTypeEnum.WEB))), cart);
481
+ if (!!!newCartData)
482
+ throw new Error("Can't save an empty/undefined cart");
483
+ if (newCartData.status >= Cart_1.CartStatusEnum.CHECKOUT_PAYMENT_SUCCESS)
484
+ throw new Error(`Can't process a paid or higher status cart.`);
485
+ if (!!api) {
486
+ const response = await fetch(`${api.api}/cart`, {
487
+ method: 'POST',
488
+ headers: {
489
+ Authorization: `Bearer ${api.token}`,
490
+ 'Content-Type': 'application/json',
491
+ 'x-gng-ecomm-token': api.userToken
492
+ },
493
+ body: JSON.stringify({ cartData: newCartData, currency, locale, promo_code, saveToDatabase, partialOnly })
494
+ });
495
+ const responseData = await response.json();
496
+ if (responseData.status != 200 || !!responseData.error) {
497
+ setCartErrors([
498
+ typeof responseData.error === 'string'
499
+ ? responseData.error
500
+ : (0, functions_1.getStringByLang)(responseData.error, locale)
501
+ ]);
502
+ }
503
+ else {
504
+ if (!!responseData.data) {
505
+ const cartIDInLocalStorage = localStorage.getItem(`${api.org}__cart`);
506
+ if (!!responseData.data.id && (!!!cartIDInLocalStorage || cartIDInLocalStorage !== responseData.data.id)) {
507
+ localStorage.setItem(`${api.org}__cart`, responseData.data.id);
508
+ }
509
+ newCartData = responseData.data;
510
+ setCartData(newCartData);
511
+ setCartErrors([]);
512
+ }
513
+ }
514
+ }
515
+ else {
516
+ setCartData(newCartData);
517
+ }
518
+ return newCartData;
519
+ };
520
+ const getApplicablePromos = async (forceShipping) => {
521
+ if (!!!api || !!!sdk)
522
+ return;
523
+ if (!!!cartData)
524
+ throw new Error("Can't get promos if no cart data");
525
+ const request = await fetch(`${api.api}/cart/${cartData.id}/getApplicablePromosWithShipping`, {
526
+ method: 'GET',
527
+ headers: {
528
+ Authorization: `Bearer ${api.token}`,
529
+ 'Content-Type': 'application/json',
530
+ 'x-gng-ecomm-token': api.userToken
531
+ }
532
+ });
533
+ const responseData = await request.json();
534
+ if (responseData.status !== 200) {
535
+ throw new Error('Impossible de fetch les promos associé: ' + responseData.error);
536
+ }
537
+ return responseData.data;
538
+ };
539
+ const canBePaidWithPA = async (userId) => {
540
+ if (!!!api)
541
+ return;
542
+ if (!!!cartData)
543
+ throw new Error("Can't check if cart is payable with PA if cartData is undefined.");
544
+ if (!!!userId)
545
+ throw new Error("Can't check if cart is payable with PA without userId");
546
+ const request = await fetch(`${api.api}/cart/${cartData.id}/canBePaidWithPA`, {
547
+ method: 'POST',
548
+ headers: {
549
+ Authorization: `Bearer ${api.token}`,
550
+ 'Content-Type': 'application/json',
551
+ 'x-gng-ecomm-token': api.userToken
552
+ },
553
+ body: JSON.stringify({ userId })
554
+ });
555
+ const responseData = await request.json();
556
+ if (responseData.status !== 200) {
557
+ throw new Error("Can't apply promise to purchase to cart: " + responseData.error);
558
+ }
559
+ return responseData.data;
560
+ };
561
+ const getPaymentIncentiveDiscountAmount = (skipCheckForRuleFields) => {
562
+ if (!!!cartData)
563
+ return;
564
+ if (!!cartData.promo_after_taxes_amount)
565
+ return cartData.promo_after_taxes_amount;
566
+ let couldApplyIncentive = (0, discount_1.checkIfCouldApplyIncentivePromo)(cartData, skipCheckForRuleFields);
567
+ if (!!!couldApplyIncentive)
568
+ return;
569
+ let incentiveCalculatedAmount = (0, discount_1.getAfterTaxesPromosTotalAmount)(cartData, true);
570
+ return incentiveCalculatedAmount;
571
+ };
572
+ (0, react_1.useEffect)(() => {
573
+ if (!!!locale || !!!cartData || cartData.locale === locale)
574
+ return;
575
+ saveCart({ locale });
576
+ }, [locale]);
577
+ (0, react_1.useEffect)(() => {
578
+ if (!!!sdk || !userLoaded)
579
+ return;
580
+ const checkCartCustomerValid = async () => {
581
+ if (!isUserLoggedIn && !!cartData) {
582
+ const customerId = cartData.customer_id;
583
+ const customerEmail = !!cartData.customer_info ? cartData.customer_info.customer_default_email : '';
584
+ const customerDoc = !!cartData.customer_info ? cartData.customer_info.pro_proof_doc : '';
585
+ if (!!customerId || !!customerEmail || !!customerDoc) {
586
+ await emptyCart();
587
+ }
588
+ }
589
+ };
590
+ checkCartCustomerValid();
591
+ }, [sdk, isUserLoggedIn, userLoaded, cartData]);
592
+ (0, react_1.useEffect)(() => {
593
+ if (!!!api)
594
+ return;
595
+ const getContent = async () => {
596
+ const cartData = await initCart();
597
+ if (!!!cartData)
598
+ return;
599
+ setCartData(cartData);
600
+ };
601
+ getContent();
602
+ }, [sdk]);
603
+ return ((0, jsx_runtime_1.jsx)(_1.default.Provider, Object.assign({ value: {
604
+ loading,
605
+ cartData,
606
+ cartErrors,
607
+ cartSliderOpen,
608
+ isGuest,
609
+ setIsGuest,
610
+ setCartErrors,
611
+ setCartData,
612
+ saveCart,
613
+ setCartLoading: setLoading,
614
+ getCartFromDatabase,
615
+ handlePayment,
616
+ setCartSliderOpen,
617
+ addItem,
618
+ deleteItem,
619
+ updateItem,
620
+ verifyCart,
621
+ uploadFileToOrder,
622
+ updateEmail,
623
+ updateDefaultCustomer,
624
+ emptyCart,
625
+ saveOrder,
626
+ updateShippingAddress,
627
+ updateBillingAddress,
628
+ getIsSameBillingThenShipping,
629
+ setShippingPayload,
630
+ removeDiscountRule,
631
+ getShippingQuotes,
632
+ selectShippingQuote,
633
+ setPromoCode,
634
+ getApplicablePromos,
635
+ canBePaidWithPA,
636
+ getPaymentIncentiveDiscountAmount,
637
+ setPaidBy
638
+ } }, { children: children })));
639
+ };
640
+ exports.default = CartContextProvider;
641
641
  //# sourceMappingURL=CartContextProvider.js.map