@open-tender/cloud 0.4.28 → 0.4.30

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