addio-ecomm-sdk 1.3.76 → 1.3.77

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 (149) 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 -1818
  5. package/dist/index.js.map +1 -1
  6. package/dist/lib/constants/components/CreditCardInput.d.ts +11 -11
  7. package/dist/lib/constants/components/CreditCardInput.js +65 -79
  8. package/dist/lib/constants/components/CreditCardInput.js.map +1 -1
  9. package/dist/lib/constants/components/Snackbar.d.ts +11 -11
  10. package/dist/lib/constants/components/Snackbar.js +29 -39
  11. package/dist/lib/constants/components/Snackbar.js.map +1 -1
  12. package/dist/lib/constants/contexts/CartContext/CartContextProvider.d.ts +7 -7
  13. package/dist/lib/constants/contexts/CartContext/CartContextProvider.js +640 -980
  14. package/dist/lib/constants/contexts/CartContext/CartContextProvider.js.map +1 -1
  15. package/dist/lib/constants/contexts/CartContext/index.d.ts +79 -79
  16. package/dist/lib/constants/contexts/CartContext/index.js +47 -127
  17. package/dist/lib/constants/contexts/CartContext/index.js.map +1 -1
  18. package/dist/lib/constants/contexts/DataContext/DataContextProvider.d.ts +15 -15
  19. package/dist/lib/constants/contexts/DataContext/DataContextProvider.js +173 -304
  20. package/dist/lib/constants/contexts/DataContext/DataContextProvider.js.map +1 -1
  21. package/dist/lib/constants/contexts/DataContext/index.d.ts +47 -47
  22. package/dist/lib/constants/contexts/DataContext/index.js +27 -67
  23. package/dist/lib/constants/contexts/DataContext/index.js.map +1 -1
  24. package/dist/lib/constants/contexts/LogContext/LogContextProvider.d.ts +6 -6
  25. package/dist/lib/constants/contexts/LogContext/LogContextProvider.js +40 -103
  26. package/dist/lib/constants/contexts/LogContext/LogContextProvider.js.map +1 -1
  27. package/dist/lib/constants/contexts/LogContext/index.d.ts +7 -7
  28. package/dist/lib/constants/contexts/LogContext/index.js +7 -45
  29. package/dist/lib/constants/contexts/LogContext/index.js.map +1 -1
  30. package/dist/lib/constants/contexts/ModalContext/ModalContextProvider.d.ts +7 -7
  31. package/dist/lib/constants/contexts/ModalContext/ModalContextProvider.js +61 -76
  32. package/dist/lib/constants/contexts/ModalContext/ModalContextProvider.js.map +1 -1
  33. package/dist/lib/constants/contexts/ModalContext/index.d.ts +14 -14
  34. package/dist/lib/constants/contexts/ModalContext/index.js +16 -18
  35. package/dist/lib/constants/contexts/ModalContext/index.js.map +1 -1
  36. package/dist/lib/constants/contexts/SDKContext/SDKProvider.d.ts +8 -8
  37. package/dist/lib/constants/contexts/SDKContext/SDKProvider.js +23 -79
  38. package/dist/lib/constants/contexts/SDKContext/SDKProvider.js.map +1 -1
  39. package/dist/lib/constants/contexts/SDKContext/index.d.ts +4 -4
  40. package/dist/lib/constants/contexts/SDKContext/index.js +4 -4
  41. package/dist/lib/constants/contexts/SDKContext/index.js.map +1 -1
  42. package/dist/lib/constants/contexts/SnackbarContext/SnackbarContext.d.ts +4 -4
  43. package/dist/lib/constants/contexts/SnackbarContext/SnackbarContext.js +6 -6
  44. package/dist/lib/constants/contexts/SnackbarContext/SnackbarContext.js.map +1 -1
  45. package/dist/lib/constants/contexts/SnackbarContext/SnackbarContextProvider.d.ts +12 -12
  46. package/dist/lib/constants/contexts/SnackbarContext/SnackbarContextProvider.js +38 -52
  47. package/dist/lib/constants/contexts/SnackbarContext/SnackbarContextProvider.js.map +1 -1
  48. package/dist/lib/constants/contexts/SnackbarContext/interfaces/ISnackbarContext.d.ts +19 -17
  49. package/dist/lib/constants/contexts/SnackbarContext/interfaces/ISnackbarContext.js +21 -21
  50. package/dist/lib/constants/contexts/SnackbarContext/interfaces/ISnackbarContext.js.map +1 -1
  51. package/dist/lib/constants/contexts/StockNotifContext/StockNotifContextProvider.d.ts +7 -7
  52. package/dist/lib/constants/contexts/StockNotifContext/StockNotifContextProvider.js +112 -179
  53. package/dist/lib/constants/contexts/StockNotifContext/StockNotifContextProvider.js.map +1 -1
  54. package/dist/lib/constants/contexts/StockNotifContext/index.d.ts +10 -10
  55. package/dist/lib/constants/contexts/StockNotifContext/index.js +10 -10
  56. package/dist/lib/constants/contexts/StockNotifContext/index.js.map +1 -1
  57. package/dist/lib/constants/contexts/UserContext/UserContextProvider.d.ts +5 -5
  58. package/dist/lib/constants/contexts/UserContext/UserContextProvider.js +313 -470
  59. package/dist/lib/constants/contexts/UserContext/UserContextProvider.js.map +1 -1
  60. package/dist/lib/constants/contexts/UserContext/index.d.ts +54 -54
  61. package/dist/lib/constants/contexts/UserContext/index.js +28 -82
  62. package/dist/lib/constants/contexts/UserContext/index.js.map +1 -1
  63. package/dist/lib/constants/contexts/WishlistContext/WishlistContextProvider.d.ts +6 -6
  64. package/dist/lib/constants/contexts/WishlistContext/WishlistContextProvider.js +231 -327
  65. package/dist/lib/constants/contexts/WishlistContext/WishlistContextProvider.js.map +1 -1
  66. package/dist/lib/constants/contexts/WishlistContext/index.d.ts +12 -12
  67. package/dist/lib/constants/contexts/WishlistContext/index.js +12 -12
  68. package/dist/lib/constants/contexts/WishlistContext/index.js.map +1 -1
  69. package/dist/lib/constants/hooks/useCart.d.ts +2 -2
  70. package/dist/lib/constants/hooks/useCart.js +11 -11
  71. package/dist/lib/constants/hooks/useCart.js.map +1 -1
  72. package/dist/lib/constants/hooks/useData.d.ts +2 -2
  73. package/dist/lib/constants/hooks/useData.js +11 -11
  74. package/dist/lib/constants/hooks/useData.js.map +1 -1
  75. package/dist/lib/constants/hooks/useLogs.d.ts +2 -2
  76. package/dist/lib/constants/hooks/useLogs.js +11 -11
  77. package/dist/lib/constants/hooks/useLogs.js.map +1 -1
  78. package/dist/lib/constants/hooks/useModal.d.ts +2 -2
  79. package/dist/lib/constants/hooks/useModal.js +11 -11
  80. package/dist/lib/constants/hooks/useModal.js.map +1 -1
  81. package/dist/lib/constants/hooks/useSDK.d.ts +2 -2
  82. package/dist/lib/constants/hooks/useSDK.js +11 -11
  83. package/dist/lib/constants/hooks/useSDK.js.map +1 -1
  84. package/dist/lib/constants/hooks/useSnackbar.d.ts +2 -2
  85. package/dist/lib/constants/hooks/useSnackbar.js +11 -11
  86. package/dist/lib/constants/hooks/useSnackbar.js.map +1 -1
  87. package/dist/lib/constants/hooks/useStockNotif.d.ts +2 -2
  88. package/dist/lib/constants/hooks/useStockNotif.js +11 -11
  89. package/dist/lib/constants/hooks/useStockNotif.js.map +1 -1
  90. package/dist/lib/constants/hooks/useUser.d.ts +2 -2
  91. package/dist/lib/constants/hooks/useUser.js +11 -11
  92. package/dist/lib/constants/hooks/useUser.js.map +1 -1
  93. package/dist/lib/constants/hooks/useWishlist.d.ts +2 -2
  94. package/dist/lib/constants/hooks/useWishlist.js +11 -11
  95. package/dist/lib/constants/hooks/useWishlist.js.map +1 -1
  96. package/dist/lib/models/image/index.d.ts +6 -6
  97. package/dist/lib/models/image/index.js +10 -15
  98. package/dist/lib/models/image/index.js.map +1 -1
  99. package/dist/lib/models/stockNotification/index.d.ts +13 -13
  100. package/dist/lib/models/stockNotification/index.js +70 -130
  101. package/dist/lib/models/stockNotification/index.js.map +1 -1
  102. package/dist/lib/models/wishlist/index.d.ts +14 -14
  103. package/dist/lib/models/wishlist/index.js +86 -155
  104. package/dist/lib/models/wishlist/index.js.map +1 -1
  105. package/dist/utils/StripeErrors.d.ts +24 -24
  106. package/dist/utils/StripeErrors.js +55 -55
  107. package/dist/utils/algolia.d.ts +3 -3
  108. package/dist/utils/algolia.js +35 -81
  109. package/dist/utils/algolia.js.map +1 -1
  110. package/dist/utils/analytics.d.ts +71 -71
  111. package/dist/utils/analytics.js +246 -257
  112. package/dist/utils/analytics.js.map +1 -1
  113. package/dist/utils/cart.d.ts +3 -3
  114. package/dist/utils/cart.js +65 -66
  115. package/dist/utils/cart.js.map +1 -1
  116. package/dist/utils/contentful.d.ts +10 -10
  117. package/dist/utils/contentful.js +63 -136
  118. package/dist/utils/contentful.js.map +1 -1
  119. package/dist/utils/functions.d.ts +21 -21
  120. package/dist/utils/functions.js +183 -200
  121. package/dist/utils/functions.js.map +1 -1
  122. package/dist/utils/getSDK.d.ts +4 -4
  123. package/dist/utils/getSDK.js +19 -77
  124. package/dist/utils/getSDK.js.map +1 -1
  125. package/dist/utils/initStoreData.d.ts +3 -3
  126. package/dist/utils/initStoreData.js +17 -62
  127. package/dist/utils/initStoreData.js.map +1 -1
  128. package/dist/utils/interfaces/IClientCMSData.d.ts +132 -132
  129. package/dist/utils/interfaces/IClientCMSData.js +2 -2
  130. package/dist/utils/interfaces/IEndpointResult.d.ts +10 -10
  131. package/dist/utils/interfaces/IEndpointResult.js +2 -2
  132. package/dist/utils/interfaces/IFacebookUserProfile.d.ts +10 -10
  133. package/dist/utils/interfaces/IFacebookUserProfile.js +2 -2
  134. package/dist/utils/interfaces/IFilter.d.ts +23 -23
  135. package/dist/utils/interfaces/IFilter.js +2 -2
  136. package/dist/utils/interfaces/IGoogleUserProfile.d.ts +7 -7
  137. package/dist/utils/interfaces/IGoogleUserProfile.js +2 -2
  138. package/dist/utils/interfaces/ISDKConfig.d.ts +7 -7
  139. package/dist/utils/interfaces/ISDKConfig.js +2 -2
  140. package/dist/utils/interfaces/ISpaceData.d.ts +18 -18
  141. package/dist/utils/interfaces/ISpaceData.js +2 -2
  142. package/dist/utils/larivieremeunier.d.ts +3 -3
  143. package/dist/utils/larivieremeunier.js +156 -156
  144. package/dist/utils/larivieremeunier.js.map +1 -1
  145. package/dist/utils/technosupply.d.ts +3 -3
  146. package/dist/utils/technosupply.js +155 -155
  147. package/dist/utils/technosupply.js.map +1 -1
  148. package/package.json +61 -61
  149. package/publish.sh +132 -132
@@ -1,981 +1,641 @@
1
- "use strict";
2
- var __assign = (this && this.__assign) || function () {
3
- __assign = Object.assign || function(t) {
4
- for (var s, i = 1, n = arguments.length; i < n; i++) {
5
- s = arguments[i];
6
- for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
7
- t[p] = s[p];
8
- }
9
- return t;
10
- };
11
- return __assign.apply(this, arguments);
12
- };
13
- var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
14
- function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
15
- return new (P || (P = Promise))(function (resolve, reject) {
16
- function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
17
- function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
18
- function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
19
- step((generator = generator.apply(thisArg, _arguments || [])).next());
20
- });
21
- };
22
- var __generator = (this && this.__generator) || function (thisArg, body) {
23
- var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
24
- return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
25
- function verb(n) { return function (v) { return step([n, v]); }; }
26
- function step(op) {
27
- if (f) throw new TypeError("Generator is already executing.");
28
- while (g && (g = 0, op[0] && (_ = 0)), _) try {
29
- if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
30
- if (y = 0, t) op = [op[0] & 2, t.value];
31
- switch (op[0]) {
32
- case 0: case 1: t = op; break;
33
- case 4: _.label++; return { value: op[1], done: false };
34
- case 5: _.label++; y = op[1]; op = [0]; continue;
35
- case 7: op = _.ops.pop(); _.trys.pop(); continue;
36
- default:
37
- if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
38
- if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
39
- if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
40
- if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
41
- if (t[2]) _.ops.pop();
42
- _.trys.pop(); continue;
43
- }
44
- op = body.call(thisArg, _);
45
- } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
46
- if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
47
- }
48
- };
49
- var __importDefault = (this && this.__importDefault) || function (mod) {
50
- return (mod && mod.__esModule) ? mod : { "default": mod };
51
- };
52
- Object.defineProperty(exports, "__esModule", { value: true });
53
- var jsx_runtime_1 = require("react/jsx-runtime");
54
- var react_1 = require("react");
55
- var Cart_1 = require("addio-admin-sdk/dist/Interfaces/Cart");
56
- var ISnackbarContext_1 = require("../SnackbarContext/interfaces/ISnackbarContext");
57
- var _1 = __importDefault(require("."));
58
- var useSnackbar_1 = __importDefault(require("../../hooks/useSnackbar"));
59
- var useSDK_1 = __importDefault(require("../../hooks/useSDK"));
60
- var useData_1 = __importDefault(require("../../hooks/useData"));
61
- var useUser_1 = __importDefault(require("../../hooks/useUser"));
62
- var functions_1 = require("../../../../utils/functions");
63
- var functions_2 = require("../../../../utils/functions");
64
- var cart_1 = require("addio-admin-sdk/dist/utils/cart");
65
- var discount_1 = require("addio-admin-sdk/dist/utils/discount");
66
- var g2_1 = require("addio-admin-sdk/dist/rules/GR/utils/g2");
67
- var CartContextProvider = function (_a) {
68
- var locale = _a.locale, children = _a.children;
69
- var sdk = (0, useSDK_1.default)();
70
- var currency = (0, useData_1.default)().currency;
71
- var _b = (0, useUser_1.default)(), isUserLoggedIn = _b.isUserLoggedIn, userLoaded = _b.loaded;
72
- var setSnackbar = (0, useSnackbar_1.default)().setSnackbar;
73
- var _c = (0, react_1.useState)(), cartData = _c[0], setCartData = _c[1];
74
- var _d = (0, react_1.useState)([]), cartErrors = _d[0], setCartErrors = _d[1];
75
- var _e = (0, react_1.useState)(false), loading = _e[0], setLoading = _e[1];
76
- var _f = (0, react_1.useState)(false), cartSliderOpen = _f[0], setCartSliderOpen = _f[1];
77
- var _g = (0, react_1.useState)(), isGuest = _g[0], setIsGuest = _g[1];
78
- var api = !!sdk ? sdk.getAPIInfos() : null;
79
- var initCart = function () { return __awaiter(void 0, void 0, void 0, function () {
80
- var cartIDInLocalStorage, newCart, _2;
81
- return __generator(this, function (_a) {
82
- switch (_a.label) {
83
- case 0:
84
- if (!!!api)
85
- return [2];
86
- cartIDInLocalStorage = localStorage.getItem("".concat(api.org, "__cart"));
87
- if (!!!cartIDInLocalStorage) return [3, 4];
88
- _a.label = 1;
89
- case 1:
90
- _a.trys.push([1, 3, , 4]);
91
- return [4, getCartFromDatabase(cartIDInLocalStorage)];
92
- case 2:
93
- newCart = _a.sent();
94
- if (!!newCart && !!!newCart.clerk_id) {
95
- if (newCart.status < Cart_1.CartStatusEnum.CHECKOUT_PAYMENT_SUCCESS) {
96
- return [2, newCart];
97
- }
98
- else {
99
- localStorage.removeItem("".concat(api.org, "__cart"));
100
- }
101
- }
102
- return [3, 4];
103
- case 3:
104
- _2 = _a.sent();
105
- return [2, undefined];
106
- case 4: return [2, undefined];
107
- }
108
- });
109
- }); };
110
- var updateEmail = function (newCart, email, saveToDatabase) {
111
- if (saveToDatabase === void 0) { saveToDatabase = true; }
112
- return __awaiter(void 0, void 0, void 0, function () {
113
- var cart;
114
- return __generator(this, function (_a) {
115
- switch (_a.label) {
116
- case 0:
117
- cart = !!newCart ? newCart : !!cartData ? cartData : (0, Cart_1.getDefaultCart)(Cart_1.CartTypeEnum.WEB);
118
- if (!!!saveToDatabase) return [3, 2];
119
- return [4, saveCart({ user_email: email })];
120
- case 1:
121
- cart = _a.sent();
122
- return [3, 3];
123
- case 2:
124
- if (!!cart) {
125
- cart = __assign(__assign({}, cart), { user_email: email });
126
- }
127
- _a.label = 3;
128
- case 3: return [2, cart];
129
- }
130
- });
131
- });
132
- };
133
- var updateDefaultCustomer = function (newCart, email, id, proInfo, saveToDatabase) {
134
- if (saveToDatabase === void 0) { saveToDatabase = true; }
135
- return __awaiter(void 0, void 0, void 0, function () {
136
- var cart, newCustomerInfo;
137
- return __generator(this, function (_a) {
138
- switch (_a.label) {
139
- case 0:
140
- cart = !!newCart ? newCart : !!cartData ? cartData : (0, Cart_1.getDefaultCart)(Cart_1.CartTypeEnum.WEB);
141
- newCustomerInfo = {
142
- customer_id: id,
143
- user_email: email,
144
- customer_info: __assign({ customer_default_email: email }, (proInfo || {}))
145
- };
146
- if (!!!saveToDatabase) return [3, 2];
147
- return [4, saveCart(newCustomerInfo)];
148
- case 1:
149
- _a.sent();
150
- return [3, 3];
151
- case 2:
152
- cart = __assign(__assign({}, (!!cart ? cart : (0, Cart_1.getDefaultCart)(Cart_1.CartTypeEnum.WEB))), newCustomerInfo);
153
- _a.label = 3;
154
- case 3: return [2, cart];
155
- }
156
- });
157
- });
158
- };
159
- var _handleInventoryError = function (shouldSave) { return __awaiter(void 0, void 0, void 0, function () {
160
- return __generator(this, function (_a) {
161
- switch (_a.label) {
162
- case 0:
163
- setSnackbar({
164
- title: (0, functions_1.getStringByLang)({
165
- en: 'This item is unavailable, or you haved reached the maximum amount you can add to your cart.',
166
- fr: 'Cet item est indisponible, ou vous avez atteint la quantité maximale déjà au panier.'
167
- }, locale),
168
- type: ISnackbarContext_1.SnackbarTypeEnum.ERROR,
169
- isShown: true,
170
- isCart: true
171
- });
172
- if (!!!shouldSave) return [3, 2];
173
- return [4, saveCart(undefined)];
174
- case 1:
175
- _a.sent();
176
- _a.label = 2;
177
- case 2: return [2];
178
- }
179
- });
180
- }); };
181
- var addItem = function (newCart, items, retro, useParentName, saveToDatabase, defaultAdd, isServiceUpsellOfSku, customPriceList) {
182
- if (retro === void 0) { retro = true; }
183
- if (useParentName === void 0) { useParentName = false; }
184
- if (saveToDatabase === void 0) { saveToDatabase = true; }
185
- if (defaultAdd === void 0) { defaultAdd = false; }
186
- if (isServiceUpsellOfSku === void 0) { isServiceUpsellOfSku = false; }
187
- return __awaiter(void 0, void 0, void 0, function () {
188
- var cart, addedValues, i, productName;
189
- return __generator(this, function (_a) {
190
- switch (_a.label) {
191
- case 0:
192
- if (!!!api || !!!sdk)
193
- throw new Error('SDK not initialised');
194
- cart = !!newCart ? newCart : !!cartData ? cartData : (0, Cart_1.getDefaultCart)(Cart_1.CartTypeEnum.WEB);
195
- if (!!isGuest && typeof isGuest === 'string' && !!cart.user_email) {
196
- cart = __assign(__assign({}, cart), { user_email: isGuest });
197
- }
198
- return [4, (0, cart_1.addCartItems)(cart, Array.isArray(items) ? items : [items], sdk.products.getOneInventoryItem, api.org !== 'gr', _handleInventoryError, defaultAdd, isServiceUpsellOfSku, customPriceList)];
199
- case 1:
200
- addedValues = _a.sent();
201
- cart = addedValues.cartData;
202
- if (!!!saveToDatabase) return [3, 3];
203
- return [4, saveCart(cart)];
204
- case 2:
205
- cart = _a.sent();
206
- _a.label = 3;
207
- case 3:
208
- if (!!retro && !!items && (Array.isArray(items) ? !!items.length : true)) {
209
- i = Array.isArray(items) ? items[0] : items;
210
- productName = useParentName ? i.parent_name : i.name;
211
- if (!!addedValues.updated) {
212
- setSnackbar({
213
- title: (0, functions_1.getStringByLang)({
214
- en: "".concat(!!productName ? (0, functions_1.translate)(locale || 'en', productName) : 'The item', " has been successfuly updated in your cart!"),
215
- fr: "".concat(!!productName ? (0, functions_1.translate)(locale || 'fr', productName) : "L'item", " a bien \u00E9t\u00E9 mis \u00E0 jour dans votre panier!")
216
- }, locale),
217
- type: ISnackbarContext_1.SnackbarTypeEnum.SUCCESS,
218
- isShown: true,
219
- isCart: true
220
- });
221
- }
222
- else if (!!addedValues.added) {
223
- setSnackbar({
224
- title: (0, functions_1.getStringByLang)({
225
- en: "".concat(!!productName ? (0, functions_1.translate)(locale || 'en', productName) : 'The item', " has been successfuly added to your cart!"),
226
- fr: "".concat(!!productName ? (0, functions_1.translate)(locale || 'fr', productName) : "L'item", " a bien \u00E9t\u00E9 ajout\u00E9 \u00E0 votre panier!")
227
- }, locale),
228
- type: ISnackbarContext_1.SnackbarTypeEnum.SUCCESS,
229
- isShown: true,
230
- isCart: true
231
- });
232
- }
233
- if (!!!addedValues.maxQtyItems) {
234
- setCartSliderOpen(true);
235
- }
236
- }
237
- return [2, cart];
238
- }
239
- });
240
- });
241
- };
242
- var updateItem = function (newCart, items, saveToDatabase) {
243
- if (saveToDatabase === void 0) { saveToDatabase = true; }
244
- return __awaiter(void 0, void 0, void 0, function () {
245
- var updatedItemsCart, itemsToUpdate, updatedValues;
246
- return __generator(this, function (_a) {
247
- switch (_a.label) {
248
- case 0:
249
- if (!!!api || !!!sdk)
250
- throw new Error('SDK not initialised');
251
- updatedItemsCart = !!newCart ? newCart : !!cartData ? cartData : (0, Cart_1.getDefaultCart)(Cart_1.CartTypeEnum.WEB);
252
- itemsToUpdate = Array.isArray(items) ? items : [items];
253
- return [4, (0, cart_1.updateCartItems)(updatedItemsCart, itemsToUpdate, sdk.products.getOneInventoryItem, api.org !== 'gr', _handleInventoryError)];
254
- case 1:
255
- updatedValues = _a.sent();
256
- if (!!!saveToDatabase) return [3, 3];
257
- return [4, saveCart({ items: updatedValues.updatedCart.items })];
258
- case 2:
259
- updatedItemsCart = _a.sent();
260
- _a.label = 3;
261
- case 3: return [2, updatedItemsCart];
262
- }
263
- });
264
- });
265
- };
266
- var deleteItem = function (newCart, sku, saveToDatabase, onlyIfUpsellOf) {
267
- if (saveToDatabase === void 0) { saveToDatabase = true; }
268
- return __awaiter(void 0, void 0, void 0, function () {
269
- var cart;
270
- return __generator(this, function (_a) {
271
- switch (_a.label) {
272
- case 0:
273
- cart = !!newCart ? newCart : !!cartData ? cartData : (0, Cart_1.getDefaultCart)(Cart_1.CartTypeEnum.WEB);
274
- cart = (0, cart_1.deleteCartItem)(cart, Array.isArray(sku) ? sku : [sku], onlyIfUpsellOf);
275
- if (!!!saveToDatabase) return [3, 2];
276
- return [4, saveCart({ items: cart.items })];
277
- case 1:
278
- cart = _a.sent();
279
- _a.label = 2;
280
- case 2: return [2, cart];
281
- }
282
- });
283
- });
284
- };
285
- var verifyCart = function () { return __awaiter(void 0, void 0, void 0, function () {
286
- var request, responseData, response, error_1;
287
- return __generator(this, function (_a) {
288
- switch (_a.label) {
289
- case 0:
290
- if (!!!api || !!!cartData)
291
- return [2, false];
292
- if (cartData.status >= Cart_1.CartStatusEnum.CHECKOUT_PAYMENT_SUCCESS)
293
- throw new Error("Can't process a paid or higher status cart.");
294
- if (!!!cartData.id) return [3, 5];
295
- _a.label = 1;
296
- case 1:
297
- _a.trys.push([1, 4, , 5]);
298
- return [4, fetch("".concat(api.api, "/cart/").concat(cartData.id, "/verify"), {
299
- method: 'GET',
300
- headers: {
301
- Authorization: "Bearer ".concat(api.token),
302
- 'Content-Type': 'application/json',
303
- 'x-gng-ecomm-token': api.userToken
304
- }
305
- })];
306
- case 2:
307
- request = _a.sent();
308
- return [4, request.json()];
309
- case 3:
310
- responseData = (_a.sent());
311
- if (responseData.status != 200) {
312
- throw 'Erreur lors de la requête des quotes.' + responseData.error;
313
- }
314
- response = responseData.data;
315
- setCartData(response.cart);
316
- return [2, response.actionsDone];
317
- case 4:
318
- error_1 = _a.sent();
319
- console.log('error in verifyCart: ', error_1);
320
- return [3, 5];
321
- case 5: return [2, false];
322
- }
323
- });
324
- }); };
325
- var uploadFileToOrder = function (newCart, file, propsName, saveToDatabase) {
326
- if (saveToDatabase === void 0) { saveToDatabase = true; }
327
- return __awaiter(void 0, void 0, void 0, function () {
328
- var cart, base64, request, responseData;
329
- var _a, _b, _c, _d;
330
- return __generator(this, function (_e) {
331
- switch (_e.label) {
332
- case 0:
333
- if (!!!api)
334
- return [2];
335
- cart = !!newCart ? newCart : !!cartData ? cartData : (0, Cart_1.getDefaultCart)(Cart_1.CartTypeEnum.WEB);
336
- if (!!!cart.id)
337
- return [2, {
338
- cart: cart,
339
- data: undefined,
340
- error: "Couldn't convert cart data"
341
- }];
342
- if (cart.status >= Cart_1.CartStatusEnum.CHECKOUT_PAYMENT_SUCCESS)
343
- throw new Error("Can't process a paid or higher status cart.");
344
- return [4, (0, functions_2.toBase64)(file)];
345
- case 1:
346
- base64 = _e.sent();
347
- if (typeof base64 !== 'string') {
348
- return [2, {
349
- cart: cart,
350
- data: undefined,
351
- error: "Couldn't convert file to base64"
352
- }];
353
- }
354
- return [4, fetch("".concat(api.api, "/cart/").concat(cart.id, "/uploadBase64"), {
355
- method: 'PUT',
356
- headers: {
357
- Authorization: "Bearer ".concat(api.token),
358
- 'Content-Type': 'application/json',
359
- 'x-gng-ecomm-token': api.userToken
360
- },
361
- body: JSON.stringify({
362
- base64: base64
363
- })
364
- })];
365
- case 2:
366
- request = _e.sent();
367
- return [4, request.json()];
368
- case 3:
369
- responseData = (_e.sent());
370
- if (responseData.status != 200) {
371
- throw new Error("Impossible d'uploader le fichier" + responseData.error);
372
- }
373
- if (!!!responseData.data) return [3, 6];
374
- if (!!!saveToDatabase) return [3, 5];
375
- return [4, saveCart({
376
- shipping_payload: cart.shipping_payload
377
- ? __assign(__assign({}, cart.shipping_payload), (_a = {}, _a[propsName] = responseData.data, _a)) : (_b = {},
378
- _b[propsName] = responseData.data,
379
- _b)
380
- })];
381
- case 4:
382
- cart = _e.sent();
383
- return [3, 6];
384
- case 5:
385
- cart = __assign(__assign({}, cart), { shipping_payload: cart.shipping_payload
386
- ? __assign(__assign({}, cart.shipping_payload), (_c = {}, _c[propsName] = responseData.data, _c)) : (_d = {},
387
- _d[propsName] = responseData.data,
388
- _d) });
389
- _e.label = 6;
390
- case 6: return [2, { cart: cart, data: responseData.data, error: undefined }];
391
- }
392
- });
393
- });
394
- };
395
- var emptyCart = function (removeCartIDFromLocalStorage) {
396
- if (removeCartIDFromLocalStorage === void 0) { removeCartIDFromLocalStorage = true; }
397
- return __awaiter(void 0, void 0, void 0, function () {
398
- var cartID, cartFromDB, err_1;
399
- return __generator(this, function (_a) {
400
- switch (_a.label) {
401
- case 0:
402
- if (!!!api || !!!sdk)
403
- return [2, false];
404
- if (!!!removeCartIDFromLocalStorage) return [3, 1];
405
- if (process.env.NODE_ENV !== 'production')
406
- console.log('`${api.org}__cart`', "".concat(api.org, "__cart"));
407
- localStorage.removeItem("".concat(api.org, "__cart"));
408
- setCartData(undefined);
409
- return [3, 5];
410
- case 1:
411
- cartID = localStorage.getItem("".concat(api.org, "__cart"));
412
- if (!!!cartID) return [3, 5];
413
- _a.label = 2;
414
- case 2:
415
- _a.trys.push([2, 4, , 5]);
416
- return [4, getCartFromDatabase(cartID)];
417
- case 3:
418
- cartFromDB = _a.sent();
419
- if (!!cartFromDB && !!!cartFromDB.clerk_id) {
420
- setCartData(cartFromDB);
421
- }
422
- return [3, 5];
423
- case 4:
424
- err_1 = _a.sent();
425
- return [3, 5];
426
- case 5: return [2, true];
427
- }
428
- });
429
- });
430
- };
431
- var handlePayment = function (data) {
432
- if (data === void 0) { data = {}; }
433
- return __awaiter(void 0, void 0, void 0, function () {
434
- var request, responseData;
435
- return __generator(this, function (_a) {
436
- switch (_a.label) {
437
- case 0:
438
- if (!!!api || !!!sdk)
439
- return [2, { error: { en: 'SDK not initialized', fr: 'SDK non initialisé' } }];
440
- if (!!!cartData)
441
- throw new Error("Can't pay an empty/undefined cart");
442
- if (cartData.status >= Cart_1.CartStatusEnum.CHECKOUT_PAYMENT_SUCCESS)
443
- throw new Error("Can't process a paid or higher status cart.");
444
- return [4, fetch("".concat(api.api, "/cart/").concat(cartData.id, "/payment"), {
445
- method: 'POST',
446
- headers: {
447
- Authorization: "Bearer ".concat(api.token),
448
- 'Content-Type': 'application/json',
449
- 'x-gng-ecomm-token': api.userToken
450
- },
451
- body: JSON.stringify(__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))
452
- })];
453
- case 1:
454
- request = _a.sent();
455
- return [4, request.json()];
456
- case 2:
457
- responseData = _a.sent();
458
- if (responseData.status != 200) {
459
- return [2, { error: responseData.error }];
460
- }
461
- if (!!responseData.token) {
462
- sdk.setUserToken(responseData.token);
463
- }
464
- return [2, { accessToken: responseData.data }];
465
- }
466
- });
467
- });
468
- };
469
- var setPaidBy = function (paidByValue, customPriceList, chosenPayment) { return __awaiter(void 0, void 0, void 0, function () {
470
- var partial, customIncentiveInfo, e_1;
471
- return __generator(this, function (_a) {
472
- switch (_a.label) {
473
- case 0:
474
- if (!!!cartData)
475
- return [2];
476
- partial = { paid_by: paidByValue, id: cartData.id };
477
- if (!!customPriceList) {
478
- customIncentiveInfo = (0, g2_1.getCustomIncentiveInfo)(customPriceList, cartData.discount_rules);
479
- if (!!customIncentiveInfo) {
480
- partial = __assign(__assign({}, partial), { discount_rules: customIncentiveInfo.updatedDiscountRules });
481
- }
482
- }
483
- if (!!chosenPayment && chosenPayment != paidByValue) {
484
- partial = __assign(__assign({}, partial), { shipping_payload: __assign(__assign({}, (cartData.shipping_payload || {})), { chosen_payment: chosenPayment }) });
485
- }
486
- _a.label = 1;
487
- case 1:
488
- _a.trys.push([1, 3, , 4]);
489
- return [4, saveCart(partial, false, undefined, false, true)];
490
- case 2:
491
- _a.sent();
492
- return [3, 4];
493
- case 3:
494
- e_1 = _a.sent();
495
- console.log('error on saving cart with paid_by value: ', e_1);
496
- return [3, 4];
497
- case 4: return [2];
498
- }
499
- });
500
- }); };
501
- var saveOrder = function (payment_payload) { return __awaiter(void 0, void 0, void 0, function () {
502
- var fetchData, response, err_2;
503
- return __generator(this, function (_a) {
504
- switch (_a.label) {
505
- case 0:
506
- if (!!!api)
507
- throw new Error('SDK not initialised');
508
- if (!!!cartData)
509
- throw new Error("Can't pay an empty/undefined cart");
510
- if (cartData.status >= Cart_1.CartStatusEnum.CHECKOUT_PAYMENT_SUCCESS)
511
- throw new Error("Can't process a paid or higher status cart.");
512
- _a.label = 1;
513
- case 1:
514
- _a.trys.push([1, 4, , 5]);
515
- return [4, fetch("".concat(api.api, "/cart/").concat(cartData.id, "/saveOrder"), {
516
- method: 'POST',
517
- headers: {
518
- authorization: "Bearer ".concat(api.token),
519
- 'Content-Type': 'application/json',
520
- 'x-gng-ecomm-token': api.userToken
521
- },
522
- body: JSON.stringify({ payment_payload: payment_payload })
523
- })];
524
- case 2:
525
- fetchData = _a.sent();
526
- return [4, fetchData.json()];
527
- case 3:
528
- response = (_a.sent());
529
- if (response.status !== 200) {
530
- return [2, 'error'];
531
- }
532
- return [2, response.data];
533
- case 4:
534
- err_2 = _a.sent();
535
- return [2, 'error'];
536
- case 5: return [2];
537
- }
538
- });
539
- }); };
540
- var removeDiscountRule = function (cart, code) { return __awaiter(void 0, void 0, void 0, function () {
541
- var e_2;
542
- return __generator(this, function (_a) {
543
- switch (_a.label) {
544
- case 0:
545
- _a.trys.push([0, 2, , 3]);
546
- return [4, saveCart({
547
- subtotalWithoutPromotions: null,
548
- cart_promo_applied: null,
549
- cart_promos_applied: !!cart.cart_promos_applied
550
- ? cart.cart_promos_applied.filter(function (x) { return x.promo_code !== code; })
551
- : null
552
- })];
553
- case 1:
554
- _a.sent();
555
- return [2, true];
556
- case 2:
557
- e_2 = _a.sent();
558
- console.log('error on removing discountRule: ', e_2.toString());
559
- return [2, false];
560
- case 3: return [2];
561
- }
562
- });
563
- }); };
564
- var updateBillingAddress = function (newCart, expeditionInfo, saveToDatabase, setCAIfNoCountry) {
565
- if (saveToDatabase === void 0) { saveToDatabase = true; }
566
- return __awaiter(void 0, void 0, void 0, function () {
567
- var cart, newExpeditionInfo;
568
- return __generator(this, function (_a) {
569
- switch (_a.label) {
570
- case 0:
571
- cart = !!newCart ? newCart : !!cartData ? cartData : (0, Cart_1.getDefaultCart)(Cart_1.CartTypeEnum.WEB);
572
- newExpeditionInfo = expeditionInfo;
573
- if (!!setCAIfNoCountry && !!expeditionInfo && !!!expeditionInfo.address.country) {
574
- newExpeditionInfo = __assign(__assign({}, expeditionInfo), { address: __assign(__assign({}, expeditionInfo.address), { country: 'CA' }) });
575
- }
576
- if (!!!saveToDatabase) return [3, 2];
577
- return [4, saveCart({ billing_address: newExpeditionInfo })];
578
- case 1:
579
- cart = _a.sent();
580
- return [3, 3];
581
- case 2:
582
- cart = __assign(__assign({}, cart), { billing_address: newExpeditionInfo });
583
- _a.label = 3;
584
- case 3: return [2, cart];
585
- }
586
- });
587
- });
588
- };
589
- var updateShippingAddress = function (newCart, isPickupAtStore, expeditionInfo, saveToDatabase, setCAIfNoCountry) {
590
- if (saveToDatabase === void 0) { saveToDatabase = true; }
591
- return __awaiter(void 0, void 0, void 0, function () {
592
- var cart, newExpeditionInfo;
593
- return __generator(this, function (_a) {
594
- switch (_a.label) {
595
- case 0:
596
- cart = !!newCart ? newCart : !!cartData ? cartData : (0, Cart_1.getDefaultCart)(Cart_1.CartTypeEnum.WEB);
597
- newExpeditionInfo = expeditionInfo;
598
- if (!!setCAIfNoCountry && !!expeditionInfo && !!!expeditionInfo.address.country) {
599
- newExpeditionInfo = __assign(__assign({}, expeditionInfo), { address: __assign(__assign({}, expeditionInfo.address), { country: 'CA' }) });
600
- }
601
- if (!!!saveToDatabase) return [3, 2];
602
- return [4, saveCart({
603
- is_pickup: isPickupAtStore,
604
- shipping_address: newExpeditionInfo,
605
- shipping_selected: undefined
606
- })];
607
- case 1:
608
- cart = _a.sent();
609
- return [3, 3];
610
- case 2:
611
- cart = __assign(__assign({}, cart), { is_pickup: isPickupAtStore, shipping_address: newExpeditionInfo, shipping_selected: undefined });
612
- _a.label = 3;
613
- case 3: return [2, cart];
614
- }
615
- });
616
- });
617
- };
618
- var getIsSameBillingThenShipping = function () {
619
- if (!!!cartData)
620
- return false;
621
- if (!!!cartData.billing_address && !!!cartData.shipping_address)
622
- return false;
623
- return (!!cartData.billing_address &&
624
- !!cartData.shipping_address &&
625
- (0, functions_1.string_to_slug)(cartData.billing_address.address.postal_code) ===
626
- (0, functions_1.string_to_slug)(cartData.shipping_address.address.postal_code) &&
627
- (0, functions_1.string_to_slug)(cartData.billing_address.address.line1) === (0, functions_1.string_to_slug)(cartData.shipping_address.address.line1));
628
- };
629
- var setShippingPayload = function (newCart, payload, saveToDatabase) {
630
- if (saveToDatabase === void 0) { saveToDatabase = true; }
631
- return __awaiter(void 0, void 0, void 0, function () {
632
- var cart;
633
- return __generator(this, function (_a) {
634
- switch (_a.label) {
635
- case 0:
636
- cart = !!newCart ? newCart : !!cartData ? cartData : (0, Cart_1.getDefaultCart)(Cart_1.CartTypeEnum.WEB);
637
- if (!!!saveToDatabase) return [3, 2];
638
- return [4, saveCart({ shipping_payload: payload })];
639
- case 1:
640
- cart = _a.sent();
641
- return [3, 3];
642
- case 2:
643
- cart = __assign(__assign({}, cart), { shipping_payload: payload });
644
- _a.label = 3;
645
- case 3: return [2, cart];
646
- }
647
- });
648
- });
649
- };
650
- var getShippingQuotes = function () { return __awaiter(void 0, void 0, void 0, function () {
651
- var request, responseData;
652
- return __generator(this, function (_a) {
653
- switch (_a.label) {
654
- case 0:
655
- if (!!!api || !!!sdk)
656
- return [2];
657
- if (!!!cartData)
658
- throw new Error("Can't get shipping quotes for an empty/undefined cart");
659
- if (cartData.status >= Cart_1.CartStatusEnum.CHECKOUT_PAYMENT_SUCCESS)
660
- throw new Error("Can't process a paid or higher status cart.");
661
- return [4, fetch("".concat(api.api, "/cart/getShippingQuotes"), {
662
- method: 'POST',
663
- headers: {
664
- Authorization: "Bearer ".concat(api.token),
665
- 'x-gng-ecomm-token': api.userToken
666
- },
667
- body: cartData.id
668
- })];
669
- case 1:
670
- request = _a.sent();
671
- return [4, request.json()];
672
- case 2:
673
- responseData = (_a.sent());
674
- if (responseData.status != 200 || !!responseData.error) {
675
- throw 'Erreur lors de la requête des quotes.' + responseData.error;
676
- }
677
- if (responseData.token) {
678
- sdk.setUserToken(responseData.token);
679
- }
680
- return [2, responseData.data.shippingQuotes];
681
- }
682
- });
683
- }); };
684
- var selectShippingQuote = function (quote) { return __awaiter(void 0, void 0, void 0, function () {
685
- var request, responseData, updatedCart;
686
- return __generator(this, function (_a) {
687
- switch (_a.label) {
688
- case 0:
689
- if (!!!api || !!!sdk)
690
- return [2];
691
- if (!!!cartData)
692
- throw new Error("Can't select shipping quote for an empty/undefined cart");
693
- return [4, fetch("".concat(api.api, "/cart/").concat(cartData.id, "/setSelectedShippingMethod"), {
694
- method: 'POST',
695
- headers: {
696
- Authorization: "Bearer ".concat(api.token),
697
- 'Content-Type': 'application/json',
698
- 'x-gng-ecomm-token': api.userToken
699
- },
700
- body: JSON.stringify(quote)
701
- })];
702
- case 1:
703
- request = _a.sent();
704
- return [4, request.json()];
705
- case 2:
706
- responseData = _a.sent();
707
- if (responseData.status != 200) {
708
- throw new Error('Impossible de sélectionner la shipping quote ' + responseData.error);
709
- }
710
- if (responseData.token) {
711
- sdk.setUserToken(responseData.token);
712
- }
713
- updatedCart = responseData.data;
714
- setCartData(updatedCart);
715
- return [2, updatedCart];
716
- }
717
- });
718
- }); };
719
- var setPromoCode = function (promo_code) { return __awaiter(void 0, void 0, void 0, function () {
720
- var error_2;
721
- return __generator(this, function (_a) {
722
- switch (_a.label) {
723
- case 0:
724
- _a.trys.push([0, 2, , 3]);
725
- return [4, saveCart({}, true, promo_code)];
726
- case 1:
727
- _a.sent();
728
- return [3, 3];
729
- case 2:
730
- error_2 = _a.sent();
731
- if (process.env.NODE_ENV === 'development')
732
- console.log("error on SDK while applying promo on cart", error_2);
733
- return [3, 3];
734
- case 3: return [2];
735
- }
736
- });
737
- }); };
738
- var getCartFromDatabase = function (cardID) { return __awaiter(void 0, void 0, void 0, function () {
739
- var request, responseData;
740
- return __generator(this, function (_a) {
741
- switch (_a.label) {
742
- case 0:
743
- if (!!!api || !!!sdk)
744
- return [2];
745
- return [4, fetch("".concat(api.api, "/cart/").concat(cardID), {
746
- method: 'GET',
747
- headers: {
748
- Authorization: "Bearer ".concat(api.token),
749
- 'Content-Type': 'application/json',
750
- 'x-gng-ecomm-token': api.userToken
751
- }
752
- })];
753
- case 1:
754
- request = _a.sent();
755
- return [4, request.json()];
756
- case 2:
757
- responseData = _a.sent();
758
- if (responseData.status !== 200) {
759
- throw new Error('Impossible de fetch le cart: ' + responseData.error);
760
- }
761
- if (responseData.token) {
762
- sdk.setUserToken(responseData.token);
763
- }
764
- return [2, responseData.data];
765
- }
766
- });
767
- }); };
768
- var saveCart = function (cart, saveToDatabase, promo_code, onlyNewCart, partialOnly) {
769
- if (saveToDatabase === void 0) { saveToDatabase = true; }
770
- if (onlyNewCart === void 0) { onlyNewCart = false; }
771
- if (partialOnly === void 0) { partialOnly = false; }
772
- return __awaiter(void 0, void 0, void 0, function () {
773
- var newCartData, response, responseData, cartIDInLocalStorage;
774
- return __generator(this, function (_a) {
775
- switch (_a.label) {
776
- case 0:
777
- newCartData = __assign(__assign({}, (!!cartData && !!!onlyNewCart ? cartData : (0, Cart_1.getDefaultCart)(Cart_1.CartTypeEnum.WEB))), cart);
778
- if (!!!newCartData)
779
- throw new Error("Can't save an empty/undefined cart");
780
- if (newCartData.status >= Cart_1.CartStatusEnum.CHECKOUT_PAYMENT_SUCCESS)
781
- throw new Error("Can't process a paid or higher status cart.");
782
- if (!!!api) return [3, 3];
783
- return [4, fetch("".concat(api.api, "/cart"), {
784
- method: 'POST',
785
- headers: {
786
- Authorization: "Bearer ".concat(api.token),
787
- 'Content-Type': 'application/json',
788
- 'x-gng-ecomm-token': api.userToken
789
- },
790
- body: JSON.stringify({ cartData: newCartData, currency: currency, locale: locale, promo_code: promo_code, saveToDatabase: saveToDatabase, partialOnly: partialOnly })
791
- })];
792
- case 1:
793
- response = _a.sent();
794
- return [4, response.json()];
795
- case 2:
796
- responseData = _a.sent();
797
- if (responseData.status != 200 || !!responseData.error) {
798
- setCartErrors([
799
- typeof responseData.error === 'string'
800
- ? responseData.error
801
- : (0, functions_1.getStringByLang)(responseData.error, locale)
802
- ]);
803
- }
804
- else {
805
- if (!!responseData.data) {
806
- cartIDInLocalStorage = localStorage.getItem("".concat(api.org, "__cart"));
807
- if (!!responseData.data.id && (!!!cartIDInLocalStorage || cartIDInLocalStorage !== responseData.data.id)) {
808
- localStorage.setItem("".concat(api.org, "__cart"), responseData.data.id);
809
- }
810
- newCartData = responseData.data;
811
- setCartData(newCartData);
812
- setCartErrors([]);
813
- }
814
- }
815
- return [3, 4];
816
- case 3:
817
- setCartData(newCartData);
818
- _a.label = 4;
819
- case 4: return [2, newCartData];
820
- }
821
- });
822
- });
823
- };
824
- var getApplicablePromos = function (forceShipping) { return __awaiter(void 0, void 0, void 0, function () {
825
- var request, responseData;
826
- return __generator(this, function (_a) {
827
- switch (_a.label) {
828
- case 0:
829
- if (!!!api || !!!sdk)
830
- return [2];
831
- if (!!!cartData)
832
- throw new Error("Can't get promos if no cart data");
833
- return [4, fetch("".concat(api.api, "/cart/").concat(cartData.id, "/getApplicablePromosWithShipping"), {
834
- method: 'GET',
835
- headers: {
836
- Authorization: "Bearer ".concat(api.token),
837
- 'Content-Type': 'application/json',
838
- 'x-gng-ecomm-token': api.userToken
839
- }
840
- })];
841
- case 1:
842
- request = _a.sent();
843
- return [4, request.json()];
844
- case 2:
845
- responseData = _a.sent();
846
- if (responseData.status !== 200) {
847
- throw new Error('Impossible de fetch les promos associé: ' + responseData.error);
848
- }
849
- return [2, responseData.data];
850
- }
851
- });
852
- }); };
853
- var canBePaidWithPA = function (userId) { return __awaiter(void 0, void 0, void 0, function () {
854
- var request, responseData;
855
- return __generator(this, function (_a) {
856
- switch (_a.label) {
857
- case 0:
858
- if (!!!api)
859
- return [2];
860
- if (!!!cartData)
861
- throw new Error("Can't check if cart is payable with PA if cartData is undefined.");
862
- if (!!!userId)
863
- throw new Error("Can't check if cart is payable with PA without userId");
864
- return [4, fetch("".concat(api.api, "/cart/").concat(cartData.id, "/canBePaidWithPA"), {
865
- method: 'POST',
866
- headers: {
867
- Authorization: "Bearer ".concat(api.token),
868
- 'Content-Type': 'application/json',
869
- 'x-gng-ecomm-token': api.userToken
870
- },
871
- body: JSON.stringify({ userId: userId })
872
- })];
873
- case 1:
874
- request = _a.sent();
875
- return [4, request.json()];
876
- case 2:
877
- responseData = _a.sent();
878
- if (responseData.status !== 200) {
879
- throw new Error("Can't apply promise to purchase to cart: " + responseData.error);
880
- }
881
- return [2, responseData.data];
882
- }
883
- });
884
- }); };
885
- var getPaymentIncentiveDiscountAmount = function (skipCheckForRuleFields) {
886
- if (!!!cartData)
887
- return;
888
- if (!!cartData.promo_after_taxes_amount)
889
- return cartData.promo_after_taxes_amount;
890
- var couldApplyIncentive = (0, discount_1.checkIfCouldApplyIncentivePromo)(cartData, skipCheckForRuleFields);
891
- if (!!!couldApplyIncentive)
892
- return;
893
- var incentiveCalculatedAmount = (0, discount_1.getAfterTaxesPromosTotalAmount)(cartData, true);
894
- return incentiveCalculatedAmount;
895
- };
896
- (0, react_1.useEffect)(function () {
897
- if (!!!locale || !!!cartData || cartData.locale === locale)
898
- return;
899
- saveCart({ locale: locale });
900
- }, [locale]);
901
- (0, react_1.useEffect)(function () {
902
- if (!!!sdk || !userLoaded)
903
- return;
904
- var checkCartCustomerValid = function () { return __awaiter(void 0, void 0, void 0, function () {
905
- var customerId, customerEmail, customerDoc;
906
- return __generator(this, function (_a) {
907
- switch (_a.label) {
908
- case 0:
909
- if (!(!isUserLoggedIn && !!cartData)) return [3, 2];
910
- customerId = cartData.customer_id;
911
- customerEmail = !!cartData.customer_info ? cartData.customer_info.customer_default_email : '';
912
- customerDoc = !!cartData.customer_info ? cartData.customer_info.pro_proof_doc : '';
913
- if (!(!!customerId || !!customerEmail || !!customerDoc)) return [3, 2];
914
- return [4, emptyCart()];
915
- case 1:
916
- _a.sent();
917
- _a.label = 2;
918
- case 2: return [2];
919
- }
920
- });
921
- }); };
922
- checkCartCustomerValid();
923
- }, [sdk, isUserLoggedIn, userLoaded, cartData]);
924
- (0, react_1.useEffect)(function () {
925
- if (!!!api)
926
- return;
927
- var getContent = function () { return __awaiter(void 0, void 0, void 0, function () {
928
- var cartData;
929
- return __generator(this, function (_a) {
930
- switch (_a.label) {
931
- case 0: return [4, initCart()];
932
- case 1:
933
- cartData = _a.sent();
934
- if (!!!cartData)
935
- return [2];
936
- setCartData(cartData);
937
- return [2];
938
- }
939
- });
940
- }); };
941
- getContent();
942
- }, [sdk]);
943
- return ((0, jsx_runtime_1.jsx)(_1.default.Provider, __assign({ value: {
944
- loading: loading,
945
- cartData: cartData,
946
- cartErrors: cartErrors,
947
- cartSliderOpen: cartSliderOpen,
948
- isGuest: isGuest,
949
- setIsGuest: setIsGuest,
950
- setCartErrors: setCartErrors,
951
- setCartData: setCartData,
952
- saveCart: saveCart,
953
- setCartLoading: setLoading,
954
- getCartFromDatabase: getCartFromDatabase,
955
- handlePayment: handlePayment,
956
- setCartSliderOpen: setCartSliderOpen,
957
- addItem: addItem,
958
- deleteItem: deleteItem,
959
- updateItem: updateItem,
960
- verifyCart: verifyCart,
961
- uploadFileToOrder: uploadFileToOrder,
962
- updateEmail: updateEmail,
963
- updateDefaultCustomer: updateDefaultCustomer,
964
- emptyCart: emptyCart,
965
- saveOrder: saveOrder,
966
- updateShippingAddress: updateShippingAddress,
967
- updateBillingAddress: updateBillingAddress,
968
- getIsSameBillingThenShipping: getIsSameBillingThenShipping,
969
- setShippingPayload: setShippingPayload,
970
- removeDiscountRule: removeDiscountRule,
971
- getShippingQuotes: getShippingQuotes,
972
- selectShippingQuote: selectShippingQuote,
973
- setPromoCode: setPromoCode,
974
- getApplicablePromos: getApplicablePromos,
975
- canBePaidWithPA: canBePaidWithPA,
976
- getPaymentIncentiveDiscountAmount: getPaymentIncentiveDiscountAmount,
977
- setPaidBy: setPaidBy
978
- } }, { children: children })));
979
- };
980
- 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;
981
641
  //# sourceMappingURL=CartContextProvider.js.map