@open-tender/cloud 0.5.9 → 0.5.11

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 (283) hide show
  1. package/LICENSE.md +21 -21
  2. package/README.md +3 -3
  3. package/dist/cjs/app/hooks.d.ts +67 -67
  4. package/dist/cjs/app/hooks.js +8 -8
  5. package/dist/cjs/app/index.d.ts +2 -2
  6. package/dist/cjs/app/index.js +5 -5
  7. package/dist/cjs/app/store.d.ts +197 -197
  8. package/dist/cjs/app/store.js +65 -65
  9. package/dist/cjs/index.d.ts +5 -5
  10. package/dist/cjs/index.js +11 -11
  11. package/dist/cjs/services/api.d.ts +173 -173
  12. package/dist/cjs/services/api.js +741 -741
  13. package/dist/cjs/services/errors.d.ts +50 -50
  14. package/dist/cjs/services/errors.js +53 -53
  15. package/dist/cjs/services/index.d.ts +3 -3
  16. package/dist/cjs/services/index.js +7 -7
  17. package/dist/cjs/slices/alerts.d.ts +5 -5
  18. package/dist/cjs/slices/alerts.js +29 -29
  19. package/dist/cjs/slices/allergens.d.ts +101 -101
  20. package/dist/cjs/slices/allergens.js +83 -83
  21. package/dist/cjs/slices/announcements.d.ts +180 -180
  22. package/dist/cjs/slices/announcements.js +81 -81
  23. package/dist/cjs/slices/checkout.d.ts +69 -69
  24. package/dist/cjs/slices/checkout.js +326 -326
  25. package/dist/cjs/slices/completedOrders.d.ts +31 -31
  26. package/dist/cjs/slices/completedOrders.js +61 -61
  27. package/dist/cjs/slices/config.d.ts +317 -317
  28. package/dist/cjs/slices/config.js +195 -195
  29. package/dist/cjs/slices/confirmation.d.ts +8 -8
  30. package/dist/cjs/slices/confirmation.js +23 -23
  31. package/dist/cjs/slices/customer/account.d.ts +128 -128
  32. package/dist/cjs/slices/customer/account.js +351 -351
  33. package/dist/cjs/slices/customer/addresses.d.ts +55 -55
  34. package/dist/cjs/slices/customer/addresses.js +132 -132
  35. package/dist/cjs/slices/customer/allergens.d.ts +37 -37
  36. package/dist/cjs/slices/customer/allergens.js +94 -94
  37. package/dist/cjs/slices/customer/communicationPreferences.d.ts +69 -69
  38. package/dist/cjs/slices/customer/communicationPreferences.js +164 -164
  39. package/dist/cjs/slices/customer/creditCards.d.ts +137 -137
  40. package/dist/cjs/slices/customer/creditCards.js +170 -170
  41. package/dist/cjs/slices/customer/favorites.d.ts +68 -68
  42. package/dist/cjs/slices/customer/favorites.js +173 -173
  43. package/dist/cjs/slices/customer/fcmToken.d.ts +49 -49
  44. package/dist/cjs/slices/customer/fcmToken.js +110 -110
  45. package/dist/cjs/slices/customer/giftCards.d.ts +98 -98
  46. package/dist/cjs/slices/customer/giftCards.js +222 -222
  47. package/dist/cjs/slices/customer/groupOrders.d.ts +118 -118
  48. package/dist/cjs/slices/customer/groupOrders.js +262 -262
  49. package/dist/cjs/slices/customer/history.d.ts +23 -23
  50. package/dist/cjs/slices/customer/history.js +57 -57
  51. package/dist/cjs/slices/customer/houseAccounts.d.ts +26 -26
  52. package/dist/cjs/slices/customer/houseAccounts.js +67 -67
  53. package/dist/cjs/slices/customer/index.d.ts +42 -42
  54. package/dist/cjs/slices/customer/index.js +68 -68
  55. package/dist/cjs/slices/customer/loyalty.d.ts +251 -251
  56. package/dist/cjs/slices/customer/loyalty.js +110 -110
  57. package/dist/cjs/slices/customer/order.d.ts +116 -116
  58. package/dist/cjs/slices/customer/order.js +98 -98
  59. package/dist/cjs/slices/customer/orders.d.ts +27 -27
  60. package/dist/cjs/slices/customer/orders.js +69 -69
  61. package/dist/cjs/slices/customer/pointsShop.d.ts +35 -35
  62. package/dist/cjs/slices/customer/pointsShop.js +86 -86
  63. package/dist/cjs/slices/customer/qrCode.d.ts +23 -23
  64. package/dist/cjs/slices/customer/qrCode.js +57 -57
  65. package/dist/cjs/slices/customer/rewards.d.ts +26 -26
  66. package/dist/cjs/slices/customer/rewards.js +67 -67
  67. package/dist/cjs/slices/customer/thanx.d.ts +23 -23
  68. package/dist/cjs/slices/customer/thanx.js +56 -56
  69. package/dist/cjs/slices/customer/tpls.d.ts +238 -238
  70. package/dist/cjs/slices/customer/tpls.js +102 -102
  71. package/dist/cjs/slices/customer/tplsPointsShop.d.ts +38 -38
  72. package/dist/cjs/slices/customer/tplsPointsShop.js +88 -88
  73. package/dist/cjs/slices/deals.d.ts +25 -25
  74. package/dist/cjs/slices/deals.js +96 -96
  75. package/dist/cjs/slices/donations.d.ts +27 -27
  76. package/dist/cjs/slices/donations.js +57 -57
  77. package/dist/cjs/slices/geolocation.d.ts +11 -11
  78. package/dist/cjs/slices/geolocation.js +36 -36
  79. package/dist/cjs/slices/giftCards.d.ts +27 -27
  80. package/dist/cjs/slices/giftCards.js +58 -58
  81. package/dist/cjs/slices/groupOrder.d.ts +418 -418
  82. package/dist/cjs/slices/groupOrder.js +266 -266
  83. package/dist/cjs/slices/guest.d.ts +51 -51
  84. package/dist/cjs/slices/guest.js +91 -91
  85. package/dist/cjs/slices/index.d.ts +41 -41
  86. package/dist/cjs/slices/index.js +44 -44
  87. package/dist/cjs/slices/loader.d.ts +9 -9
  88. package/dist/cjs/slices/loader.js +25 -25
  89. package/dist/cjs/slices/menu.d.ts +31 -31
  90. package/dist/cjs/slices/menu.js +97 -97
  91. package/dist/cjs/slices/menuDisplay.d.ts +32 -32
  92. package/dist/cjs/slices/menuDisplay.js +59 -59
  93. package/dist/cjs/slices/menuItems.d.ts +26 -26
  94. package/dist/cjs/slices/menuItems.js +57 -57
  95. package/dist/cjs/slices/misc.d.ts +17 -17
  96. package/dist/cjs/slices/misc.js +51 -51
  97. package/dist/cjs/slices/modal.d.ts +5 -5
  98. package/dist/cjs/slices/modal.js +30 -30
  99. package/dist/cjs/slices/nav.d.ts +7 -7
  100. package/dist/cjs/slices/nav.js +23 -23
  101. package/dist/cjs/slices/navSite.d.ts +7 -7
  102. package/dist/cjs/slices/navSite.js +23 -23
  103. package/dist/cjs/slices/notifications.d.ts +5 -5
  104. package/dist/cjs/slices/notifications.js +27 -27
  105. package/dist/cjs/slices/oneTimePasscode.d.ts +40 -40
  106. package/dist/cjs/slices/oneTimePasscode.js +91 -91
  107. package/dist/cjs/slices/order.d.ts +372 -372
  108. package/dist/cjs/slices/order.js +528 -528
  109. package/dist/cjs/slices/orderFulfillment.d.ts +37 -37
  110. package/dist/cjs/slices/orderFulfillment.js +77 -77
  111. package/dist/cjs/slices/orderRating.d.ts +52 -52
  112. package/dist/cjs/slices/orderRating.js +105 -105
  113. package/dist/cjs/slices/posts.d.ts +24 -24
  114. package/dist/cjs/slices/posts.js +55 -55
  115. package/dist/cjs/slices/pushNotifications.d.ts +9 -9
  116. package/dist/cjs/slices/pushNotifications.js +29 -29
  117. package/dist/cjs/slices/qr.d.ts +11 -11
  118. package/dist/cjs/slices/qr.js +34 -34
  119. package/dist/cjs/slices/quote.d.ts +102 -102
  120. package/dist/cjs/slices/quote.js +65 -65
  121. package/dist/cjs/slices/resetPassword.d.ts +41 -41
  122. package/dist/cjs/slices/resetPassword.js +80 -80
  123. package/dist/cjs/slices/revenueCenters.d.ts +35 -35
  124. package/dist/cjs/slices/revenueCenters.js +95 -95
  125. package/dist/cjs/slices/sidebar.d.ts +7 -7
  126. package/dist/cjs/slices/sidebar.js +23 -23
  127. package/dist/cjs/slices/sidebarModal.d.ts +7 -7
  128. package/dist/cjs/slices/sidebarModal.js +23 -23
  129. package/dist/cjs/slices/signUp.d.ts +25 -25
  130. package/dist/cjs/slices/signUp.js +60 -60
  131. package/dist/cjs/slices/tags.d.ts +101 -101
  132. package/dist/cjs/slices/tags.js +90 -90
  133. package/dist/cjs/slices/terms.d.ts +20 -20
  134. package/dist/cjs/slices/terms.js +51 -51
  135. package/dist/cjs/slices/types.d.ts +62 -62
  136. package/dist/cjs/slices/types.js +66 -66
  137. package/dist/cjs/slices/unsubscribe.d.ts +39 -39
  138. package/dist/cjs/slices/unsubscribe.js +78 -78
  139. package/dist/cjs/slices/validTimes.d.ts +23 -23
  140. package/dist/cjs/slices/validTimes.js +57 -57
  141. package/dist/cjs/slices/verifyAccount.d.ts +23 -23
  142. package/dist/cjs/slices/verifyAccount.js +54 -54
  143. package/dist/esm/app/hooks.d.ts +67 -67
  144. package/dist/esm/app/hooks.js +4 -4
  145. package/dist/esm/app/index.d.ts +2 -2
  146. package/dist/esm/app/index.js +2 -2
  147. package/dist/esm/app/store.d.ts +197 -197
  148. package/dist/esm/app/store.js +62 -62
  149. package/dist/esm/index.d.ts +5 -5
  150. package/dist/esm/index.js +5 -5
  151. package/dist/esm/services/api.d.ts +173 -173
  152. package/dist/esm/services/api.js +739 -739
  153. package/dist/esm/services/errors.d.ts +50 -50
  154. package/dist/esm/services/errors.js +50 -50
  155. package/dist/esm/services/index.d.ts +3 -3
  156. package/dist/esm/services/index.js +3 -3
  157. package/dist/esm/slices/alerts.d.ts +5 -5
  158. package/dist/esm/slices/alerts.js +24 -24
  159. package/dist/esm/slices/allergens.d.ts +101 -101
  160. package/dist/esm/slices/allergens.js +77 -77
  161. package/dist/esm/slices/announcements.d.ts +180 -180
  162. package/dist/esm/slices/announcements.js +75 -75
  163. package/dist/esm/slices/checkout.d.ts +69 -69
  164. package/dist/esm/slices/checkout.js +318 -318
  165. package/dist/esm/slices/completedOrders.d.ts +31 -31
  166. package/dist/esm/slices/completedOrders.js +57 -57
  167. package/dist/esm/slices/config.d.ts +317 -317
  168. package/dist/esm/slices/config.js +168 -168
  169. package/dist/esm/slices/confirmation.d.ts +8 -8
  170. package/dist/esm/slices/confirmation.js +18 -18
  171. package/dist/esm/slices/customer/account.d.ts +128 -128
  172. package/dist/esm/slices/customer/account.js +344 -344
  173. package/dist/esm/slices/customer/addresses.d.ts +55 -55
  174. package/dist/esm/slices/customer/addresses.js +127 -127
  175. package/dist/esm/slices/customer/allergens.d.ts +37 -37
  176. package/dist/esm/slices/customer/allergens.js +89 -89
  177. package/dist/esm/slices/customer/communicationPreferences.d.ts +69 -69
  178. package/dist/esm/slices/customer/communicationPreferences.js +159 -159
  179. package/dist/esm/slices/customer/creditCards.d.ts +137 -137
  180. package/dist/esm/slices/customer/creditCards.js +165 -165
  181. package/dist/esm/slices/customer/favorites.d.ts +68 -68
  182. package/dist/esm/slices/customer/favorites.js +168 -168
  183. package/dist/esm/slices/customer/fcmToken.d.ts +49 -49
  184. package/dist/esm/slices/customer/fcmToken.js +106 -106
  185. package/dist/esm/slices/customer/giftCards.d.ts +98 -98
  186. package/dist/esm/slices/customer/giftCards.js +217 -217
  187. package/dist/esm/slices/customer/groupOrders.d.ts +118 -118
  188. package/dist/esm/slices/customer/groupOrders.js +256 -256
  189. package/dist/esm/slices/customer/history.d.ts +23 -23
  190. package/dist/esm/slices/customer/history.js +53 -53
  191. package/dist/esm/slices/customer/houseAccounts.d.ts +26 -26
  192. package/dist/esm/slices/customer/houseAccounts.js +62 -62
  193. package/dist/esm/slices/customer/index.d.ts +42 -42
  194. package/dist/esm/slices/customer/index.js +64 -64
  195. package/dist/esm/slices/customer/loyalty.d.ts +251 -251
  196. package/dist/esm/slices/customer/loyalty.js +102 -102
  197. package/dist/esm/slices/customer/order.d.ts +116 -116
  198. package/dist/esm/slices/customer/order.js +94 -94
  199. package/dist/esm/slices/customer/orders.d.ts +27 -27
  200. package/dist/esm/slices/customer/orders.js +63 -63
  201. package/dist/esm/slices/customer/pointsShop.d.ts +35 -35
  202. package/dist/esm/slices/customer/pointsShop.js +82 -82
  203. package/dist/esm/slices/customer/qrCode.d.ts +23 -23
  204. package/dist/esm/slices/customer/qrCode.js +53 -53
  205. package/dist/esm/slices/customer/rewards.d.ts +26 -26
  206. package/dist/esm/slices/customer/rewards.js +62 -62
  207. package/dist/esm/slices/customer/thanx.d.ts +23 -23
  208. package/dist/esm/slices/customer/thanx.js +52 -52
  209. package/dist/esm/slices/customer/tpls.d.ts +238 -238
  210. package/dist/esm/slices/customer/tpls.js +98 -98
  211. package/dist/esm/slices/customer/tplsPointsShop.d.ts +38 -38
  212. package/dist/esm/slices/customer/tplsPointsShop.js +84 -84
  213. package/dist/esm/slices/deals.d.ts +25 -25
  214. package/dist/esm/slices/deals.js +90 -90
  215. package/dist/esm/slices/donations.d.ts +27 -27
  216. package/dist/esm/slices/donations.js +53 -53
  217. package/dist/esm/slices/geolocation.d.ts +11 -11
  218. package/dist/esm/slices/geolocation.js +30 -30
  219. package/dist/esm/slices/giftCards.d.ts +27 -27
  220. package/dist/esm/slices/giftCards.js +54 -54
  221. package/dist/esm/slices/groupOrder.d.ts +418 -418
  222. package/dist/esm/slices/groupOrder.js +259 -259
  223. package/dist/esm/slices/guest.d.ts +51 -51
  224. package/dist/esm/slices/guest.js +86 -86
  225. package/dist/esm/slices/index.d.ts +41 -41
  226. package/dist/esm/slices/index.js +41 -41
  227. package/dist/esm/slices/loader.d.ts +9 -9
  228. package/dist/esm/slices/loader.js +21 -21
  229. package/dist/esm/slices/menu.d.ts +31 -31
  230. package/dist/esm/slices/menu.js +90 -90
  231. package/dist/esm/slices/menuDisplay.d.ts +32 -32
  232. package/dist/esm/slices/menuDisplay.js +55 -55
  233. package/dist/esm/slices/menuItems.d.ts +26 -26
  234. package/dist/esm/slices/menuItems.js +52 -52
  235. package/dist/esm/slices/misc.d.ts +17 -17
  236. package/dist/esm/slices/misc.js +41 -41
  237. package/dist/esm/slices/modal.d.ts +5 -5
  238. package/dist/esm/slices/modal.js +25 -25
  239. package/dist/esm/slices/nav.d.ts +7 -7
  240. package/dist/esm/slices/nav.js +19 -19
  241. package/dist/esm/slices/navSite.d.ts +7 -7
  242. package/dist/esm/slices/navSite.js +19 -19
  243. package/dist/esm/slices/notifications.d.ts +5 -5
  244. package/dist/esm/slices/notifications.js +22 -22
  245. package/dist/esm/slices/oneTimePasscode.d.ts +40 -40
  246. package/dist/esm/slices/oneTimePasscode.js +86 -86
  247. package/dist/esm/slices/order.d.ts +372 -372
  248. package/dist/esm/slices/order.js +508 -508
  249. package/dist/esm/slices/orderFulfillment.d.ts +37 -37
  250. package/dist/esm/slices/orderFulfillment.js +73 -73
  251. package/dist/esm/slices/orderRating.d.ts +52 -52
  252. package/dist/esm/slices/orderRating.js +101 -101
  253. package/dist/esm/slices/posts.d.ts +24 -24
  254. package/dist/esm/slices/posts.js +51 -51
  255. package/dist/esm/slices/pushNotifications.d.ts +9 -9
  256. package/dist/esm/slices/pushNotifications.js +23 -23
  257. package/dist/esm/slices/qr.d.ts +11 -11
  258. package/dist/esm/slices/qr.js +29 -29
  259. package/dist/esm/slices/quote.d.ts +102 -102
  260. package/dist/esm/slices/quote.js +61 -61
  261. package/dist/esm/slices/resetPassword.d.ts +41 -41
  262. package/dist/esm/slices/resetPassword.js +76 -76
  263. package/dist/esm/slices/revenueCenters.d.ts +35 -35
  264. package/dist/esm/slices/revenueCenters.js +89 -89
  265. package/dist/esm/slices/sidebar.d.ts +7 -7
  266. package/dist/esm/slices/sidebar.js +19 -19
  267. package/dist/esm/slices/sidebarModal.d.ts +7 -7
  268. package/dist/esm/slices/sidebarModal.js +19 -19
  269. package/dist/esm/slices/signUp.d.ts +25 -25
  270. package/dist/esm/slices/signUp.js +56 -56
  271. package/dist/esm/slices/tags.d.ts +101 -101
  272. package/dist/esm/slices/tags.js +84 -84
  273. package/dist/esm/slices/terms.d.ts +20 -20
  274. package/dist/esm/slices/terms.js +47 -47
  275. package/dist/esm/slices/types.d.ts +62 -62
  276. package/dist/esm/slices/types.js +63 -63
  277. package/dist/esm/slices/unsubscribe.d.ts +39 -39
  278. package/dist/esm/slices/unsubscribe.js +74 -74
  279. package/dist/esm/slices/validTimes.d.ts +23 -23
  280. package/dist/esm/slices/validTimes.js +52 -52
  281. package/dist/esm/slices/verifyAccount.d.ts +23 -23
  282. package/dist/esm/slices/verifyAccount.js +50 -50
  283. package/package.json +61 -61
@@ -1,318 +1,318 @@
1
- import { __awaiter, __rest } from "tslib";
2
- import { createAsyncThunk, createSlice } from '@reduxjs/toolkit';
3
- import { contains, handleCheckoutError, isEmpty, isString, makeCheckError, makeFormErrorsNested, prepareOrder } from '@open-tender/utils';
4
- import { ReducerType } from './types';
5
- import { loginCustomer, selectToken } from './customer';
6
- import { fetchMenu } from './menu';
7
- import { refreshRevenueCenter, setAlert } from './order';
8
- const initialState = {
9
- check: null,
10
- form: {
11
- address: {},
12
- customer: {},
13
- details: {},
14
- discounts: [],
15
- points: [],
16
- promoCodes: [],
17
- surcharges: [],
18
- tenders: [],
19
- tip: null,
20
- token: null
21
- },
22
- submitting: false,
23
- isGuest: false,
24
- completedOrder: null,
25
- errors: {},
26
- loading: 'idle'
27
- };
28
- export var CheckoutActionType;
29
- (function (CheckoutActionType) {
30
- CheckoutActionType["ValidateOrder"] = "checkout/validateOrder";
31
- CheckoutActionType["SubmitOrder"] = "checkout/SubmitOrder";
32
- CheckoutActionType["SubmitOrderPay"] = "checkout/SubmitOrderPay";
33
- CheckoutActionType["UpdateForm"] = "checkout/updateForm";
34
- })(CheckoutActionType || (CheckoutActionType = {}));
35
- const assembleOrder = (orderData, save = false) => {
36
- const { order, checkout, groupOrder } = orderData;
37
- const { orderId, revenueCenter, serviceType, requestedAt, cart, deviceType, prepType, table } = order;
38
- const { revenue_center_id: revenueCenterId } = revenueCenter || {};
39
- if (!revenueCenterId || !serviceType || !requestedAt || !cart)
40
- return null;
41
- const { form, check } = checkout;
42
- const { customer, address, details, surcharges, discounts, promoCodes, points, tenders, tip, token } = form;
43
- const { deposit = null } = check || {};
44
- // const defaultTip = check ? getDefaultTip(check.config) : null
45
- const fullAddress = Object.assign(Object.assign({}, order.address), address);
46
- // eslint-disable-next-line @typescript-eslint/no-unused-vars
47
- const { customer_id } = customer, customerWithoutId = __rest(customer, ["customer_id"]);
48
- const data = {
49
- address: isEmpty(fullAddress) ? null : fullAddress,
50
- cart: cart,
51
- cartId: groupOrder.cartId || null,
52
- customer: customerWithoutId,
53
- deposit,
54
- details,
55
- deviceType,
56
- discounts,
57
- orderId,
58
- points,
59
- prepType,
60
- promoCodes,
61
- requestedAt,
62
- revenueCenterId,
63
- serviceType,
64
- surcharges,
65
- table,
66
- tenders,
67
- tip,
68
- save,
69
- token
70
- };
71
- const preparedOrder = prepareOrder(data);
72
- return preparedOrder;
73
- };
74
- const refreshKeys = ['revenue_center_id', 'service_type', 'requested_at'];
75
- const makeRefreshArgs = (order) => ({
76
- revenueCenterId: order.revenue_center_id,
77
- serviceType: order.service_type,
78
- requestedAt: order.requested_at
79
- });
80
- const handleOrderErrors = (err, preparedOrder, dispatch) => {
81
- const errors = handleCheckoutError(err);
82
- const keys = Object.keys(errors);
83
- const args = makeRefreshArgs(preparedOrder);
84
- if (contains(keys, refreshKeys)) {
85
- dispatch(refreshRevenueCenter(args));
86
- return {};
87
- }
88
- else if (contains(keys, ['cart'])) {
89
- const cartError = errors.cart;
90
- if (isString(cartError)) {
91
- dispatch(fetchMenu(args));
92
- }
93
- else {
94
- const alert = { type: 'cartCounts', args: { errors: cartError } };
95
- setTimeout(() => {
96
- dispatch(setAlert(alert));
97
- }, 500);
98
- }
99
- return {};
100
- }
101
- else {
102
- return errors;
103
- }
104
- };
105
- export const validateOrder = createAsyncThunk(CheckoutActionType.ValidateOrder, (order, { dispatch, getState, rejectWithValue }) => __awaiter(void 0, void 0, void 0, function* () {
106
- try {
107
- const { api } = getState().config;
108
- const token = selectToken(getState());
109
- if (!order)
110
- order = assembleOrder(getState());
111
- const errors = {};
112
- if (!order) {
113
- errors.form = 'Empty cart. Please return to menu.';
114
- return { check: null, errors };
115
- }
116
- const check = yield api.postOrderValidate(order, token);
117
- const checkError = makeCheckError(check.errors);
118
- const errMessages = handleCheckoutError(checkError);
119
- const keys = Object.keys(errMessages);
120
- const args = makeRefreshArgs(order);
121
- if (contains(keys, refreshKeys)) {
122
- dispatch(refreshRevenueCenter(args));
123
- }
124
- else if (contains(keys, ['cart'])) {
125
- const cartError = errMessages.cart;
126
- if (isString(cartError)) {
127
- dispatch(fetchMenu(args));
128
- }
129
- else {
130
- const alert = { type: 'cartCounts', args: { errors: cartError } };
131
- dispatch(setAlert(alert));
132
- }
133
- }
134
- else if (contains(keys, ['promo_codes'])) {
135
- errors['promo_codes'] = errMessages.promo_codes;
136
- }
137
- else if (contains(keys, ['customer'])) {
138
- errors['customer'] = errMessages.customer;
139
- }
140
- return { check, errors };
141
- }
142
- catch (err) {
143
- const errors = makeFormErrorsNested(err);
144
- return rejectWithValue(errors);
145
- }
146
- }));
147
- export const submitOrder = createAsyncThunk(CheckoutActionType.SubmitOrder, (args, { dispatch, getState, rejectWithValue }) => __awaiter(void 0, void 0, void 0, function* () {
148
- const { api } = getState().config;
149
- if (!api)
150
- return;
151
- const token = selectToken(getState());
152
- const alert = {
153
- type: 'working',
154
- args: { text: 'Submitting your order...' }
155
- };
156
- dispatch(setAlert(alert));
157
- const { save = false } = args || {};
158
- const preparedOrder = assembleOrder(getState(), save);
159
- if (!preparedOrder) {
160
- return dispatch(setAlert({ type: 'close' }));
161
- }
162
- try {
163
- const completedOrder = yield api.postOrder(preparedOrder, token);
164
- const auth = getState().customer.account.auth;
165
- const { email, password } = preparedOrder.customer || {};
166
- if (password && !auth) {
167
- yield dispatch(loginCustomer({ email: email, password }));
168
- }
169
- dispatch(setAlert({ type: 'close' }));
170
- return completedOrder;
171
- }
172
- catch (err) {
173
- dispatch(setAlert({ type: 'close' }));
174
- const errors = handleOrderErrors(err, preparedOrder, dispatch);
175
- return rejectWithValue(errors);
176
- }
177
- }));
178
- export const updateForm = createAsyncThunk(CheckoutActionType.UpdateForm, (payload, { getState }) => __awaiter(void 0, void 0, void 0, function* () {
179
- const { checkout } = getState();
180
- const errors = Object.assign({}, checkout.errors);
181
- const { tenders } = payload;
182
- if (tenders)
183
- delete errors.tenders;
184
- const form = Object.assign(Object.assign({}, checkout.form), payload);
185
- return {
186
- form,
187
- errors
188
- };
189
- }));
190
- export const submitOrderPay = createAsyncThunk(CheckoutActionType.SubmitOrderPay, (showAlert = false, { dispatch, getState, rejectWithValue }) => __awaiter(void 0, void 0, void 0, function* () {
191
- const { api } = getState().config;
192
- if (!api)
193
- return;
194
- const token = selectToken(getState());
195
- dispatch(setSubmitting(true));
196
- if (showAlert || false) {
197
- const alert = {
198
- type: 'working',
199
- args: { text: 'Submitting your order...' }
200
- };
201
- dispatch(setAlert(alert));
202
- }
203
- const preparedOrder = assembleOrder(getState());
204
- if (!preparedOrder) {
205
- return dispatch(setAlert({ type: 'close' }));
206
- }
207
- try {
208
- const completedOrder = yield api.postOrder(preparedOrder, token);
209
- const auth = getState().customer.account.auth;
210
- const { email, password } = preparedOrder.customer || {};
211
- if (password && !auth) {
212
- yield dispatch(loginCustomer({ email: email, password }));
213
- }
214
- dispatch(setAlert({ type: 'close' }));
215
- return completedOrder;
216
- }
217
- catch (err) {
218
- dispatch(setAlert({ type: 'close' }));
219
- const errors = handleOrderErrors(err, preparedOrder, dispatch);
220
- return rejectWithValue(errors);
221
- }
222
- }));
223
- const checkoutSlice = createSlice({
224
- name: ReducerType.Checkout,
225
- initialState,
226
- reducers: {
227
- resetCheckout: () => initialState,
228
- resetCheck: state => {
229
- state.check = null;
230
- },
231
- resetTip: state => {
232
- state.form = Object.assign(Object.assign({}, state.form), { tip: null });
233
- },
234
- resetErrors: state => {
235
- state.errors = {};
236
- },
237
- resetCompletedOrder: state => {
238
- state.completedOrder = null;
239
- },
240
- setCompletedOrder: (state, action) => {
241
- state.completedOrder = action.payload;
242
- },
243
- setSubmitting: (state, action) => {
244
- state.submitting = action.payload;
245
- },
246
- setGuest: (state, action) => {
247
- state.isGuest = action.payload;
248
- },
249
- setRecaptchaToken: (state, action) => {
250
- state.form.token = action.payload;
251
- },
252
- updateCheckoutCustomer: (state, action) => {
253
- const account = action.payload;
254
- const customer = Object.assign({}, state.form.customer);
255
- const customerId = customer ? customer.customer_id : null;
256
- let form = Object.assign({}, state.form);
257
- if (!account) {
258
- if (customerId) {
259
- form = Object.assign(Object.assign({}, form), { customer: {}, promoCodes: [], discounts: [], tenders: [] });
260
- }
261
- else {
262
- form = Object.assign(Object.assign({}, form), { customer: {}, promoCodes: [] });
263
- }
264
- }
265
- else if (customerId && account.customer_id !== customerId) {
266
- form = Object.assign(Object.assign({}, form), { customer, discounts: [], tenders: [] });
267
- }
268
- else if (account && !customerId) {
269
- form = Object.assign(Object.assign({}, form), { customer: account, discounts: [], tenders: [] });
270
- }
271
- state.form = Object.assign({}, form);
272
- }
273
- },
274
- extraReducers: builder => {
275
- builder
276
- .addCase(validateOrder.fulfilled, (state, action) => {
277
- return Object.assign(Object.assign(Object.assign({}, state), action.payload), { loading: 'idle', error: null });
278
- })
279
- .addCase(validateOrder.pending, state => {
280
- state.loading = 'pending';
281
- })
282
- .addCase(validateOrder.rejected, (state, action) => {
283
- state.errors = action.payload || {};
284
- state.loading = 'idle';
285
- })
286
- .addCase(updateForm.fulfilled, (state, action) => {
287
- return Object.assign(Object.assign({}, state), action.payload);
288
- })
289
- .addCase(submitOrder.fulfilled, (_, action) => {
290
- return Object.assign(Object.assign({}, initialState), { completedOrder: action.payload });
291
- })
292
- .addCase(submitOrder.pending, state => {
293
- state.loading = 'pending';
294
- })
295
- .addCase(submitOrder.rejected, (state, action) => {
296
- state.loading = 'idle';
297
- state.submitting = false;
298
- state.errors = action.payload || {};
299
- })
300
- .addCase(submitOrderPay.fulfilled, (_, action) => {
301
- return Object.assign(Object.assign({}, initialState), { completedOrder: action.payload });
302
- })
303
- .addCase(submitOrderPay.pending, state => {
304
- state.loading = 'pending';
305
- })
306
- .addCase(submitOrderPay.rejected, (state, action) => {
307
- state.loading = 'idle';
308
- state.submitting = false;
309
- state.errors = action.payload || {};
310
- });
311
- }
312
- });
313
- export const { resetCheckout, resetCheck, resetCompletedOrder, resetErrors, resetTip, setCompletedOrder, setGuest, setSubmitting, updateCheckoutCustomer, setRecaptchaToken } = checkoutSlice.actions;
314
- export const selectCheckout = (state) => state.checkout;
315
- export const selectCheck = (state) => state.checkout.check;
316
- export const selectCompletedOrder = (state) => state.checkout.completedOrder;
317
- export const selectDiscounts = (state) => state.checkout.form.discounts;
318
- export const checkoutReducer = checkoutSlice.reducer;
1
+ import { __awaiter, __rest } from "tslib";
2
+ import { createAsyncThunk, createSlice } from '@reduxjs/toolkit';
3
+ import { contains, handleCheckoutError, isEmpty, isString, makeCheckError, makeFormErrorsNested, prepareOrder } from '@open-tender/utils';
4
+ import { ReducerType } from './types';
5
+ import { loginCustomer, selectToken } from './customer';
6
+ import { fetchMenu } from './menu';
7
+ import { refreshRevenueCenter, setAlert } from './order';
8
+ const initialState = {
9
+ check: null,
10
+ form: {
11
+ address: {},
12
+ customer: {},
13
+ details: {},
14
+ discounts: [],
15
+ points: [],
16
+ promoCodes: [],
17
+ surcharges: [],
18
+ tenders: [],
19
+ tip: null,
20
+ token: null
21
+ },
22
+ submitting: false,
23
+ isGuest: false,
24
+ completedOrder: null,
25
+ errors: {},
26
+ loading: 'idle'
27
+ };
28
+ export var CheckoutActionType;
29
+ (function (CheckoutActionType) {
30
+ CheckoutActionType["ValidateOrder"] = "checkout/validateOrder";
31
+ CheckoutActionType["SubmitOrder"] = "checkout/SubmitOrder";
32
+ CheckoutActionType["SubmitOrderPay"] = "checkout/SubmitOrderPay";
33
+ CheckoutActionType["UpdateForm"] = "checkout/updateForm";
34
+ })(CheckoutActionType || (CheckoutActionType = {}));
35
+ const assembleOrder = (orderData, save = false) => {
36
+ const { order, checkout, groupOrder } = orderData;
37
+ const { orderId, revenueCenter, serviceType, requestedAt, cart, deviceType, prepType, table } = order;
38
+ const { revenue_center_id: revenueCenterId } = revenueCenter || {};
39
+ if (!revenueCenterId || !serviceType || !requestedAt || !cart)
40
+ return null;
41
+ const { form, check } = checkout;
42
+ const { customer, address, details, surcharges, discounts, promoCodes, points, tenders, tip, token, kount_device_session_id } = form;
43
+ const { deposit = null } = check || {};
44
+ // const defaultTip = check ? getDefaultTip(check.config) : null
45
+ const fullAddress = Object.assign(Object.assign({}, order.address), address);
46
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
47
+ const { customer_id } = customer, customerWithoutId = __rest(customer, ["customer_id"]);
48
+ const data = {
49
+ address: isEmpty(fullAddress) ? null : fullAddress,
50
+ cart: cart,
51
+ cartId: groupOrder.cartId || null,
52
+ customer: customerWithoutId,
53
+ deposit,
54
+ details,
55
+ deviceType,
56
+ discounts,
57
+ orderId,
58
+ points,
59
+ prepType,
60
+ promoCodes,
61
+ requestedAt,
62
+ revenueCenterId,
63
+ serviceType,
64
+ surcharges,
65
+ table,
66
+ tenders,
67
+ tip,
68
+ save,
69
+ token,
70
+ kount_device_session_id
71
+ };
72
+ return prepareOrder(data);
73
+ };
74
+ const refreshKeys = ['revenue_center_id', 'service_type', 'requested_at'];
75
+ const makeRefreshArgs = (order) => ({
76
+ revenueCenterId: order.revenue_center_id,
77
+ serviceType: order.service_type,
78
+ requestedAt: order.requested_at
79
+ });
80
+ const handleOrderErrors = (err, preparedOrder, dispatch) => {
81
+ const errors = handleCheckoutError(err);
82
+ const keys = Object.keys(errors);
83
+ const args = makeRefreshArgs(preparedOrder);
84
+ if (contains(keys, refreshKeys)) {
85
+ dispatch(refreshRevenueCenter(args));
86
+ return {};
87
+ }
88
+ else if (contains(keys, ['cart'])) {
89
+ const cartError = errors.cart;
90
+ if (isString(cartError)) {
91
+ dispatch(fetchMenu(args));
92
+ }
93
+ else {
94
+ const alert = { type: 'cartCounts', args: { errors: cartError } };
95
+ setTimeout(() => {
96
+ dispatch(setAlert(alert));
97
+ }, 500);
98
+ }
99
+ return {};
100
+ }
101
+ else {
102
+ return errors;
103
+ }
104
+ };
105
+ export const validateOrder = createAsyncThunk(CheckoutActionType.ValidateOrder, (order, { dispatch, getState, rejectWithValue }) => __awaiter(void 0, void 0, void 0, function* () {
106
+ try {
107
+ const { api } = getState().config;
108
+ const token = selectToken(getState());
109
+ if (!order)
110
+ order = assembleOrder(getState());
111
+ const errors = {};
112
+ if (!order) {
113
+ errors.form = 'Empty cart. Please return to menu.';
114
+ return { check: null, errors };
115
+ }
116
+ const check = yield api.postOrderValidate(order, token);
117
+ const checkError = makeCheckError(check.errors);
118
+ const errMessages = handleCheckoutError(checkError);
119
+ const keys = Object.keys(errMessages);
120
+ const args = makeRefreshArgs(order);
121
+ if (contains(keys, refreshKeys)) {
122
+ dispatch(refreshRevenueCenter(args));
123
+ }
124
+ else if (contains(keys, ['cart'])) {
125
+ const cartError = errMessages.cart;
126
+ if (isString(cartError)) {
127
+ dispatch(fetchMenu(args));
128
+ }
129
+ else {
130
+ const alert = { type: 'cartCounts', args: { errors: cartError } };
131
+ dispatch(setAlert(alert));
132
+ }
133
+ }
134
+ else if (contains(keys, ['promo_codes'])) {
135
+ errors['promo_codes'] = errMessages.promo_codes;
136
+ }
137
+ else if (contains(keys, ['customer'])) {
138
+ errors['customer'] = errMessages.customer;
139
+ }
140
+ return { check, errors };
141
+ }
142
+ catch (err) {
143
+ const errors = makeFormErrorsNested(err);
144
+ return rejectWithValue(errors);
145
+ }
146
+ }));
147
+ export const submitOrder = createAsyncThunk(CheckoutActionType.SubmitOrder, (args, { dispatch, getState, rejectWithValue }) => __awaiter(void 0, void 0, void 0, function* () {
148
+ const { api } = getState().config;
149
+ if (!api)
150
+ return;
151
+ const token = selectToken(getState());
152
+ const alert = {
153
+ type: 'working',
154
+ args: { text: 'Submitting your order...' }
155
+ };
156
+ dispatch(setAlert(alert));
157
+ const { save = false } = args || {};
158
+ const preparedOrder = assembleOrder(getState(), save);
159
+ if (!preparedOrder) {
160
+ return dispatch(setAlert({ type: 'close' }));
161
+ }
162
+ try {
163
+ const completedOrder = yield api.postOrder(preparedOrder, token);
164
+ const auth = getState().customer.account.auth;
165
+ const { email, password } = preparedOrder.customer || {};
166
+ if (password && !auth) {
167
+ yield dispatch(loginCustomer({ email: email, password }));
168
+ }
169
+ dispatch(setAlert({ type: 'close' }));
170
+ return completedOrder;
171
+ }
172
+ catch (err) {
173
+ dispatch(setAlert({ type: 'close' }));
174
+ const errors = handleOrderErrors(err, preparedOrder, dispatch);
175
+ return rejectWithValue(errors);
176
+ }
177
+ }));
178
+ export const updateForm = createAsyncThunk(CheckoutActionType.UpdateForm, (payload, { getState }) => __awaiter(void 0, void 0, void 0, function* () {
179
+ const { checkout } = getState();
180
+ const errors = Object.assign({}, checkout.errors);
181
+ const { tenders } = payload;
182
+ if (tenders)
183
+ delete errors.tenders;
184
+ const form = Object.assign(Object.assign({}, checkout.form), payload);
185
+ return {
186
+ form,
187
+ errors
188
+ };
189
+ }));
190
+ export const submitOrderPay = createAsyncThunk(CheckoutActionType.SubmitOrderPay, (showAlert = false, { dispatch, getState, rejectWithValue }) => __awaiter(void 0, void 0, void 0, function* () {
191
+ const { api } = getState().config;
192
+ if (!api)
193
+ return;
194
+ const token = selectToken(getState());
195
+ dispatch(setSubmitting(true));
196
+ if (showAlert || false) {
197
+ const alert = {
198
+ type: 'working',
199
+ args: { text: 'Submitting your order...' }
200
+ };
201
+ dispatch(setAlert(alert));
202
+ }
203
+ const preparedOrder = assembleOrder(getState());
204
+ if (!preparedOrder) {
205
+ return dispatch(setAlert({ type: 'close' }));
206
+ }
207
+ try {
208
+ const completedOrder = yield api.postOrder(preparedOrder, token);
209
+ const auth = getState().customer.account.auth;
210
+ const { email, password } = preparedOrder.customer || {};
211
+ if (password && !auth) {
212
+ yield dispatch(loginCustomer({ email: email, password }));
213
+ }
214
+ dispatch(setAlert({ type: 'close' }));
215
+ return completedOrder;
216
+ }
217
+ catch (err) {
218
+ dispatch(setAlert({ type: 'close' }));
219
+ const errors = handleOrderErrors(err, preparedOrder, dispatch);
220
+ return rejectWithValue(errors);
221
+ }
222
+ }));
223
+ const checkoutSlice = createSlice({
224
+ name: ReducerType.Checkout,
225
+ initialState,
226
+ reducers: {
227
+ resetCheckout: () => initialState,
228
+ resetCheck: state => {
229
+ state.check = null;
230
+ },
231
+ resetTip: state => {
232
+ state.form = Object.assign(Object.assign({}, state.form), { tip: null });
233
+ },
234
+ resetErrors: state => {
235
+ state.errors = {};
236
+ },
237
+ resetCompletedOrder: state => {
238
+ state.completedOrder = null;
239
+ },
240
+ setCompletedOrder: (state, action) => {
241
+ state.completedOrder = action.payload;
242
+ },
243
+ setSubmitting: (state, action) => {
244
+ state.submitting = action.payload;
245
+ },
246
+ setGuest: (state, action) => {
247
+ state.isGuest = action.payload;
248
+ },
249
+ setRecaptchaToken: (state, action) => {
250
+ state.form.token = action.payload;
251
+ },
252
+ updateCheckoutCustomer: (state, action) => {
253
+ const account = action.payload;
254
+ const customer = Object.assign({}, state.form.customer);
255
+ const customerId = customer ? customer.customer_id : null;
256
+ let form = Object.assign({}, state.form);
257
+ if (!account) {
258
+ if (customerId) {
259
+ form = Object.assign(Object.assign({}, form), { customer: {}, promoCodes: [], discounts: [], tenders: [] });
260
+ }
261
+ else {
262
+ form = Object.assign(Object.assign({}, form), { customer: {}, promoCodes: [] });
263
+ }
264
+ }
265
+ else if (customerId && account.customer_id !== customerId) {
266
+ form = Object.assign(Object.assign({}, form), { customer, discounts: [], tenders: [] });
267
+ }
268
+ else if (account && !customerId) {
269
+ form = Object.assign(Object.assign({}, form), { customer: account, discounts: [], tenders: [] });
270
+ }
271
+ state.form = Object.assign({}, form);
272
+ }
273
+ },
274
+ extraReducers: builder => {
275
+ builder
276
+ .addCase(validateOrder.fulfilled, (state, action) => {
277
+ return Object.assign(Object.assign(Object.assign({}, state), action.payload), { loading: 'idle', error: null });
278
+ })
279
+ .addCase(validateOrder.pending, state => {
280
+ state.loading = 'pending';
281
+ })
282
+ .addCase(validateOrder.rejected, (state, action) => {
283
+ state.errors = action.payload || {};
284
+ state.loading = 'idle';
285
+ })
286
+ .addCase(updateForm.fulfilled, (state, action) => {
287
+ return Object.assign(Object.assign({}, state), action.payload);
288
+ })
289
+ .addCase(submitOrder.fulfilled, (_, action) => {
290
+ return Object.assign(Object.assign({}, initialState), { completedOrder: action.payload });
291
+ })
292
+ .addCase(submitOrder.pending, state => {
293
+ state.loading = 'pending';
294
+ })
295
+ .addCase(submitOrder.rejected, (state, action) => {
296
+ state.loading = 'idle';
297
+ state.submitting = false;
298
+ state.errors = action.payload || {};
299
+ })
300
+ .addCase(submitOrderPay.fulfilled, (_, action) => {
301
+ return Object.assign(Object.assign({}, initialState), { completedOrder: action.payload });
302
+ })
303
+ .addCase(submitOrderPay.pending, state => {
304
+ state.loading = 'pending';
305
+ })
306
+ .addCase(submitOrderPay.rejected, (state, action) => {
307
+ state.loading = 'idle';
308
+ state.submitting = false;
309
+ state.errors = action.payload || {};
310
+ });
311
+ }
312
+ });
313
+ export const { resetCheckout, resetCheck, resetCompletedOrder, resetErrors, resetTip, setCompletedOrder, setGuest, setSubmitting, updateCheckoutCustomer, setRecaptchaToken } = checkoutSlice.actions;
314
+ export const selectCheckout = (state) => state.checkout;
315
+ export const selectCheck = (state) => state.checkout.check;
316
+ export const selectCompletedOrder = (state) => state.checkout.completedOrder;
317
+ export const selectDiscounts = (state) => state.checkout.form.discounts;
318
+ export const checkoutReducer = checkoutSlice.reducer;