@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,508 +1,508 @@
1
- import { __awaiter } from "tslib";
2
- import { createAsyncThunk, createSelector, createSlice } from '@reduxjs/toolkit';
3
- import { ReducerType } from './types';
4
- import { addItem, calcCartCounts, decrementItem, getUserTimezone, incrementItem, makeFirstRequestedAt, makeFirstTimes, makeRandomNumberString, makeRequestedAtStr, rehydrateCart, rehydrateCheckoutForm, removeItem, timezoneMap } from '@open-tender/utils';
5
- import { updateForm } from './checkout';
6
- import { resetMenuVars } from './menu';
7
- import { setMenuItems } from './menuItems';
8
- const initialState = {
9
- address: null,
10
- alert: null,
11
- cart: [],
12
- cartCounts: {},
13
- currentCategory: null,
14
- currentItem: null,
15
- currentVendor: null,
16
- deviceType: null,
17
- error: null,
18
- isCurbside: false,
19
- isOutpost: false,
20
- loading: 'idle',
21
- messages: [],
22
- orderId: null,
23
- prepType: null,
24
- orderType: null,
25
- requestedAt: 'asap',
26
- revenueCenter: null,
27
- serviceType: null,
28
- table: null
29
- };
30
- export var OrderActionType;
31
- (function (OrderActionType) {
32
- OrderActionType["FetchRevenueCenter"] = "order/fetchRevenueCenter";
33
- OrderActionType["FetchLocation"] = "order/fetchLocation";
34
- OrderActionType["RevertMenu"] = "order/revertMenu";
35
- OrderActionType["RefreshRevenueCenter"] = "order/refreshRevenueCenter";
36
- OrderActionType["EditOrder"] = "order/editOrder";
37
- OrderActionType["ReorderPastOrder"] = "order/reorderPastOrder";
38
- })(OrderActionType || (OrderActionType = {}));
39
- export const fetchRevenueCenter = createAsyncThunk(OrderActionType.FetchRevenueCenter, (requestData, { dispatch, getState, rejectWithValue }) => __awaiter(void 0, void 0, void 0, function* () {
40
- const { api } = getState().config;
41
- if (!api)
42
- return;
43
- try {
44
- const revenueCenter = yield api.getRevenueCenter(requestData.revenueCenterId, requestData.requestedAt);
45
- dispatch(setRevenueCenter(revenueCenter));
46
- return revenueCenter;
47
- }
48
- catch (err) {
49
- return rejectWithValue(err);
50
- }
51
- }));
52
- export const fetchLocation = createAsyncThunk(OrderActionType.FetchLocation, ({ revenueCenterId, cartTotal }, { dispatch, getState, rejectWithValue }) => __awaiter(void 0, void 0, void 0, function* () {
53
- const { api } = getState().config;
54
- if (!api)
55
- return;
56
- try {
57
- const revenueCenter = yield api.getLocation(revenueCenterId, cartTotal);
58
- dispatch(setRevenueCenter(revenueCenter));
59
- return revenueCenter;
60
- }
61
- catch (err) {
62
- return rejectWithValue(err);
63
- }
64
- }));
65
- export const fetchLocationBySlug = createAsyncThunk(OrderActionType.FetchLocation, ({ slug, cartTotal }, { dispatch, getState, rejectWithValue }) => __awaiter(void 0, void 0, void 0, function* () {
66
- const { api } = getState().config;
67
- if (!api)
68
- return;
69
- try {
70
- const revenueCenter = yield api.getLocationBySlug(slug, cartTotal);
71
- dispatch(setRevenueCenter(revenueCenter));
72
- return revenueCenter;
73
- }
74
- catch (err) {
75
- return rejectWithValue(err);
76
- }
77
- }));
78
- export const revertMenu = createAsyncThunk(OrderActionType.RevertMenu, (requestData, { dispatch, getState, rejectWithValue }) => __awaiter(void 0, void 0, void 0, function* () {
79
- const { api } = getState().config;
80
- if (!api)
81
- return;
82
- try {
83
- const revenueCenter = yield api.getLocation(requestData.revenueCenterId);
84
- dispatch(setMenuVars({
85
- revenueCenter,
86
- serviceType: requestData.serviceType,
87
- requestedAt: requestData.requestedAt
88
- }));
89
- return revenueCenter;
90
- }
91
- catch (err) {
92
- return rejectWithValue(err);
93
- }
94
- }));
95
- export const refreshRevenueCenter = createAsyncThunk(OrderActionType.RefreshRevenueCenter, ({ revenueCenterId, serviceType, requestedAt, reset }, { getState, rejectWithValue }) => __awaiter(void 0, void 0, void 0, function* () {
96
- const { api } = getState().config;
97
- if (!api)
98
- return;
99
- try {
100
- const revenueCenter = yield api.getLocation(revenueCenterId);
101
- if (reset)
102
- requestedAt = null;
103
- const firstTimes = makeFirstTimes(revenueCenter, serviceType, requestedAt);
104
- const { status } = revenueCenter;
105
- if (!firstTimes || status !== 'OPEN') {
106
- return { type: 'closed', args: { status, preventClose: true } };
107
- }
108
- else {
109
- return {
110
- type: 'adjustRequestedAt',
111
- args: { firstTimes, revenueCenter, preventClose: true }
112
- };
113
- }
114
- }
115
- catch (err) {
116
- return rejectWithValue(err);
117
- }
118
- }));
119
- export const editOrder = createAsyncThunk(OrderActionType.EditOrder, (order, { dispatch, getState, rejectWithValue }) => __awaiter(void 0, void 0, void 0, function* () {
120
- const { api } = getState().config;
121
- if (!api)
122
- return;
123
- const alert = { type: 'working', args: { text: 'Building your order...' } };
124
- dispatch(setAlert(alert));
125
- try {
126
- const { order_id: orderId, order_type: orderType, service_type: serviceType, requested_at: requestedAt, revenue_center, address } = order;
127
- const revenueCenterId = revenue_center === null || revenue_center === void 0 ? void 0 : revenue_center.revenue_center_id;
128
- const revenueCenter = yield api.getLocation(revenueCenterId);
129
- const menuItems = yield api.getMenuItems(revenueCenterId, serviceType);
130
- const { cart, cartCounts } = rehydrateCart(menuItems, order.cart);
131
- dispatch(setMenuItems(menuItems));
132
- const form = rehydrateCheckoutForm(order);
133
- dispatch(updateForm(form));
134
- // dispatch(toggleSidebar())
135
- const isOutpost = revenueCenter.is_outpost;
136
- const payload = {
137
- orderId,
138
- orderType,
139
- serviceType,
140
- isOutpost,
141
- revenueCenter,
142
- requestedAt,
143
- address,
144
- cart: cart,
145
- cartCounts
146
- };
147
- dispatch(setAlert({ type: 'closeAndSidebar' }));
148
- return payload;
149
- }
150
- catch (err) {
151
- dispatch(resetAlert());
152
- dispatch(addMessage('Something went wrong. Please contact support.'));
153
- return rejectWithValue(null);
154
- }
155
- }));
156
- export const reorderPastOrder = createAsyncThunk(OrderActionType.ReorderPastOrder, ({ revenueCenterId, serviceType, items }, { dispatch, getState, rejectWithValue }) => __awaiter(void 0, void 0, void 0, function* () {
157
- const { api } = getState().config;
158
- if (!api)
159
- return;
160
- const alert = { type: 'working', args: { text: 'Building your order...' } };
161
- dispatch(setAlert(alert));
162
- try {
163
- const revenueCenter = yield api.getLocation(revenueCenterId);
164
- const requestedAt = makeFirstRequestedAt(revenueCenter, serviceType, null);
165
- if (!requestedAt) {
166
- const { status } = revenueCenter;
167
- const alert = { type: 'closed', args: { status, isCancel: true } };
168
- dispatch(setAlert(alert));
169
- return {};
170
- }
171
- else {
172
- dispatch(resetMenuVars());
173
- dispatch(resetRevenueCenter());
174
- const menuItems = yield api.getMenuItems(revenueCenterId, serviceType);
175
- const { cart, cartCounts } = rehydrateCart(menuItems, items);
176
- dispatch(setMenuItems(menuItems));
177
- const orderType = revenueCenter.revenue_center_type;
178
- const payload = {
179
- revenueCenter,
180
- requestedAt,
181
- serviceType,
182
- cart,
183
- cartCounts
184
- };
185
- const alert = {
186
- type: 'requestedAt',
187
- args: {
188
- openSidebar: true,
189
- focusFirst: true,
190
- skipClose: true,
191
- isReorder: true,
192
- revenueCenter,
193
- serviceType,
194
- orderType,
195
- requestedAt
196
- }
197
- };
198
- dispatch(setAlert(alert));
199
- return payload;
200
- }
201
- }
202
- catch (err) {
203
- dispatch(resetAlert());
204
- dispatch(addMessage('Something went wrong. Please contact support.'));
205
- return rejectWithValue(null);
206
- }
207
- }));
208
- const orderSlice = createSlice({
209
- name: ReducerType.Order,
210
- initialState,
211
- reducers: {
212
- resetOrder: () => initialState,
213
- resetOrderType: state => {
214
- state.orderId = null;
215
- state.orderType = null;
216
- state.serviceType = null;
217
- state.prepType = null;
218
- state.isOutpost = false;
219
- state.isCurbside = false;
220
- state.revenueCenter = null;
221
- state.table = null;
222
- state.requestedAt = null;
223
- },
224
- resetRevenueCenter: state => {
225
- state.revenueCenter = null;
226
- },
227
- resetLocation: state => {
228
- state.revenueCenter = null;
229
- },
230
- resetCart: state => {
231
- state.cart = null;
232
- state.cartCounts = null;
233
- },
234
- resetMessages: state => {
235
- state.messages = [];
236
- },
237
- resetAlert: state => {
238
- state.alert = null;
239
- },
240
- updateOrder: (state, action) => {
241
- return Object.assign(Object.assign({}, state), action.payload);
242
- },
243
- checkout: state => state,
244
- setAlert: (state, action) => {
245
- state.alert = action.payload;
246
- },
247
- setOrderId: (state, action) => {
248
- state.orderId = action.payload;
249
- },
250
- setOrderType: (state, action) => {
251
- state.orderType = action.payload;
252
- },
253
- setServiceType: (state, action) => {
254
- state.serviceType = action.payload;
255
- },
256
- setOrderServiceType: (state, action) => {
257
- return Object.assign(Object.assign({}, state), action.payload);
258
- },
259
- setCurbside: (state, action) => {
260
- state.isCurbside = action.payload;
261
- },
262
- setDeviceType: (state, action) => {
263
- state.deviceType = action.payload;
264
- },
265
- setCurrentVendor: (state, action) => {
266
- state.currentVendor = action.payload;
267
- },
268
- setMenuVars: (state, action) => {
269
- const { revenueCenter } = action.payload;
270
- return Object.assign(Object.assign(Object.assign({}, state), action.payload), { orderType: revenueCenter.revenue_center_type, isOutpost: revenueCenter.is_outpost });
271
- },
272
- setAddress: (state, action) => {
273
- state.address = action.payload;
274
- },
275
- setRequestedAt: (state, action) => {
276
- const messages = state.messages.filter(i => !i.message.includes('Requested time'));
277
- state.requestedAt = action.payload;
278
- state.messages = messages;
279
- },
280
- setRevenueCenter: (state, action) => {
281
- const revenueCenter = action.payload;
282
- const previousRequestedAt = state.requestedAt;
283
- const requestedAt = makeFirstRequestedAt(revenueCenter, state.serviceType, previousRequestedAt);
284
- let messages;
285
- if (previousRequestedAt && requestedAt !== previousRequestedAt) {
286
- const otherMessages = state.messages.filter(i => !i.message.includes('Requested time'));
287
- const tz = timezoneMap[revenueCenter.timezone];
288
- const requestedAtText = makeRequestedAtStr(requestedAt, tz);
289
- const msg = {
290
- message: `Requested time updated to ${requestedAtText}`,
291
- id: makeRandomNumberString()
292
- };
293
- messages = [msg, ...otherMessages];
294
- }
295
- else {
296
- messages = state.messages;
297
- }
298
- state.revenueCenter = revenueCenter;
299
- state.requestedAt = requestedAt !== null && requestedAt !== void 0 ? requestedAt : null;
300
- state.messages = messages;
301
- },
302
- setTable: (state, action) => {
303
- state.table = action.payload;
304
- },
305
- setPrepType: (state, action) => {
306
- state.prepType = action.payload;
307
- },
308
- setCart: (state, action) => {
309
- const cartCounts = calcCartCounts(action.payload);
310
- state.cart = action.payload;
311
- state.cartCounts = cartCounts;
312
- },
313
- setCurrentCategory: (state, action) => {
314
- state.currentCategory = action.payload;
315
- },
316
- setCurrentItem: (state, action) => {
317
- state.currentItem = action.payload;
318
- },
319
- addItemToCart: (state, action) => {
320
- const currentCart = state.cart !== null ? state.cart : [];
321
- const { cart, cartCounts } = addItem([...currentCart], action.payload);
322
- state.cart = cart;
323
- state.cartCounts = cartCounts;
324
- },
325
- removeItemFromCart: (state, action) => {
326
- const { index } = action.payload;
327
- const currentCart = state.cart !== null ? state.cart : [];
328
- const { cart, cartCounts } = removeItem([...currentCart], index);
329
- state.cart = cart;
330
- state.cartCounts = cartCounts;
331
- },
332
- incrementItemInCart: (state, action) => {
333
- const { index } = action.payload;
334
- const currentCart = state.cart !== null ? state.cart : [];
335
- const { cart, cartCounts } = incrementItem([...currentCart], index);
336
- state.cart = cart;
337
- state.cartCounts = cartCounts;
338
- },
339
- decrementItemInCart: (state, action) => {
340
- const { index } = action.payload;
341
- const currentCart = state.cart !== null ? state.cart : [];
342
- const { cart, cartCounts } = decrementItem([...currentCart], index);
343
- state.cart = cart;
344
- state.cartCounts = cartCounts;
345
- },
346
- addMessage: (state, action) => {
347
- const existing = state.messages.map(i => i.message);
348
- if (existing.includes(action.payload)) {
349
- // do nothing
350
- return;
351
- }
352
- state.messages = [
353
- ...state.messages,
354
- {
355
- message: action.payload,
356
- id: makeRandomNumberString()
357
- }
358
- ];
359
- },
360
- removeMessage: (state, action) => {
361
- state.messages = state.messages.filter(i => i.id !== action.payload);
362
- }
363
- },
364
- extraReducers: builder => {
365
- builder
366
- .addCase(fetchRevenueCenter.fulfilled, state => {
367
- state.loading = 'idle';
368
- state.error = null;
369
- })
370
- .addCase(fetchRevenueCenter.pending, state => {
371
- state.loading = 'pending';
372
- })
373
- .addCase(fetchRevenueCenter.rejected, (state, action) => {
374
- state.error = action.payload;
375
- state.loading = 'idle';
376
- })
377
- .addCase(fetchLocation.fulfilled, state => {
378
- state.loading = 'idle';
379
- state.error = null;
380
- })
381
- .addCase(fetchLocation.pending, state => {
382
- state.loading = 'pending';
383
- })
384
- .addCase(fetchLocation.rejected, (state, action) => {
385
- state.error = action.payload;
386
- state.loading = 'idle';
387
- })
388
- .addCase(revertMenu.fulfilled, state => {
389
- state.loading = 'idle';
390
- state.error = null;
391
- })
392
- .addCase(revertMenu.pending, state => {
393
- state.loading = 'pending';
394
- })
395
- .addCase(revertMenu.rejected, (state, action) => {
396
- state.error = action.payload;
397
- state.loading = 'idle';
398
- })
399
- .addCase(refreshRevenueCenter.fulfilled, (state, action) => {
400
- state.alert = action.payload;
401
- state.loading = 'idle';
402
- state.error = null;
403
- })
404
- .addCase(refreshRevenueCenter.pending, state => {
405
- state.loading = 'pending';
406
- })
407
- .addCase(refreshRevenueCenter.rejected, (state, action) => {
408
- state.error = action.payload;
409
- state.loading = 'idle';
410
- })
411
- .addCase(editOrder.fulfilled, (state, action) => {
412
- return Object.assign(Object.assign(Object.assign({}, state), action.payload), { loading: 'idle', error: null });
413
- })
414
- .addCase(editOrder.pending, state => {
415
- state.loading = 'pending';
416
- })
417
- .addCase(editOrder.rejected, state => {
418
- state.loading = 'idle';
419
- })
420
- .addCase(reorderPastOrder.fulfilled, (state, action) => {
421
- return Object.assign(Object.assign(Object.assign({}, state), action.payload), { loading: 'idle', error: null });
422
- })
423
- .addCase(reorderPastOrder.pending, state => {
424
- state.loading = 'pending';
425
- })
426
- .addCase(reorderPastOrder.rejected, state => {
427
- state.loading = 'idle';
428
- });
429
- }
430
- });
431
- export const { resetOrder, addItemToCart, addMessage, decrementItemInCart, incrementItemInCart, removeItemFromCart, removeMessage, resetAlert, resetCart, resetLocation, resetMessages, resetOrderType, resetRevenueCenter, setAddress, setAlert, setCart, setCurbside, setCurrentCategory, setCurrentItem, setDeviceType, setMenuVars, setOrderId, setOrderServiceType, setOrderType, setPrepType, setRequestedAt, setRevenueCenter, setServiceType, setTable, checkout, setCurrentVendor, updateOrder } = orderSlice.actions;
432
- export const selectAlert = (state) => state.order.alert;
433
- export const selectTimezone = (state) => {
434
- var _a;
435
- return state.order.revenueCenter
436
- ? timezoneMap[(_a = state.order.revenueCenter.timezone) !== null && _a !== void 0 ? _a : 'US/Central']
437
- : getUserTimezone();
438
- };
439
- export const selectOrder = (state) => state.order;
440
- export const selectCartQuantity = (state) => {
441
- return state.order.cart
442
- ? state.order.cart.reduce((t, i) => (t += i.quantity), 0)
443
- : 0;
444
- };
445
- export const selectCartTotal = (state) => {
446
- return state.order.cart
447
- ? state.order.cart.reduce((t, i) => (t += i.totalPrice || 0), 0.0)
448
- : 0.0;
449
- };
450
- export const selectCartCounts = (state) => state.order.cartCounts || {};
451
- export const selectCanOrder = (state) => state.order.revenueCenter &&
452
- state.order.serviceType &&
453
- state.order.requestedAt;
454
- export const selectOrderLimits = createSelector((state) => {
455
- const { revenueCenter, serviceType } = state.order;
456
- const { cartGuest, spendingLimit } = state.groupOrder;
457
- return { revenueCenter, serviceType, cartGuest, spendingLimit };
458
- }, ({ revenueCenter, serviceType, cartGuest, spendingLimit }) => {
459
- if (!revenueCenter || !serviceType) {
460
- return { orderMinimum: null, orderMaximum: null };
461
- }
462
- const { order_maximum, order_minimum } = revenueCenter;
463
- const orderMax = cartGuest && spendingLimit
464
- ? parseFloat(spendingLimit)
465
- : order_maximum
466
- ? parseFloat(order_maximum[serviceType])
467
- : 0;
468
- const orderMaximum = orderMax;
469
- const orderMinimum = order_minimum
470
- ? parseFloat(order_minimum[serviceType])
471
- : 0;
472
- return {
473
- orderMinimum: orderMinimum > 0 ? orderMinimum : null,
474
- orderMaximum: orderMaximum > 0 ? orderMaximum : null
475
- };
476
- });
477
- export const selectCartIds = createSelector((state) => {
478
- return state.order.cart;
479
- }, cart => (cart ? cart.map(i => i.id) : []));
480
- export const selectMenuSlug = (state) => {
481
- const { revenueCenter } = state.order;
482
- return revenueCenter ? `/menu/${revenueCenter.slug}` : '/';
483
- };
484
- export const selectRevenueCenter = (state) => state.order.revenueCenter;
485
- export const selectCart = (state) => state.order.cart;
486
- export const selectCurrentVendor = (state) => state.order.currentVendor;
487
- export const selectMessages = (state) => state.order.messages;
488
- export const selectCurrentItem = (state) => state.order.currentItem;
489
- export const selectMenuVars = createSelector((state) => {
490
- const { revenueCenter, serviceType, requestedAt } = state.order;
491
- return { revenueCenter, serviceType, requestedAt };
492
- }, ({ revenueCenter, serviceType, requestedAt }) => {
493
- return {
494
- revenueCenterId: (revenueCenter === null || revenueCenter === void 0 ? void 0 : revenueCenter.revenue_center_id) || null,
495
- serviceType: serviceType,
496
- requestedAt: requestedAt
497
- };
498
- });
499
- export const selectAutoSelect = (state) => {
500
- var _a, _b;
501
- const autoSelect = (_b = (_a = state.config) === null || _a === void 0 ? void 0 : _a.settings) === null || _b === void 0 ? void 0 : _b.autoSelect;
502
- const { orderType, serviceType } = state.order;
503
- return autoSelect && orderType && serviceType
504
- ? autoSelect[orderType][serviceType]
505
- : false;
506
- };
507
- export const selectCurrentCategory = (state) => state.order.currentCategory;
508
- export const orderReducer = orderSlice.reducer;
1
+ import { __awaiter } from "tslib";
2
+ import { createAsyncThunk, createSelector, createSlice } from '@reduxjs/toolkit';
3
+ import { ReducerType } from './types';
4
+ import { addItem, calcCartCounts, decrementItem, getUserTimezone, incrementItem, makeFirstRequestedAt, makeFirstTimes, makeRandomNumberString, makeRequestedAtStr, rehydrateCart, rehydrateCheckoutForm, removeItem, timezoneMap } from '@open-tender/utils';
5
+ import { updateForm } from './checkout';
6
+ import { resetMenuVars } from './menu';
7
+ import { setMenuItems } from './menuItems';
8
+ const initialState = {
9
+ address: null,
10
+ alert: null,
11
+ cart: [],
12
+ cartCounts: {},
13
+ currentCategory: null,
14
+ currentItem: null,
15
+ currentVendor: null,
16
+ deviceType: null,
17
+ error: null,
18
+ isCurbside: false,
19
+ isOutpost: false,
20
+ loading: 'idle',
21
+ messages: [],
22
+ orderId: null,
23
+ prepType: null,
24
+ orderType: null,
25
+ requestedAt: 'asap',
26
+ revenueCenter: null,
27
+ serviceType: null,
28
+ table: null
29
+ };
30
+ export var OrderActionType;
31
+ (function (OrderActionType) {
32
+ OrderActionType["FetchRevenueCenter"] = "order/fetchRevenueCenter";
33
+ OrderActionType["FetchLocation"] = "order/fetchLocation";
34
+ OrderActionType["RevertMenu"] = "order/revertMenu";
35
+ OrderActionType["RefreshRevenueCenter"] = "order/refreshRevenueCenter";
36
+ OrderActionType["EditOrder"] = "order/editOrder";
37
+ OrderActionType["ReorderPastOrder"] = "order/reorderPastOrder";
38
+ })(OrderActionType || (OrderActionType = {}));
39
+ export const fetchRevenueCenter = createAsyncThunk(OrderActionType.FetchRevenueCenter, (requestData, { dispatch, getState, rejectWithValue }) => __awaiter(void 0, void 0, void 0, function* () {
40
+ const { api } = getState().config;
41
+ if (!api)
42
+ return;
43
+ try {
44
+ const revenueCenter = yield api.getRevenueCenter(requestData.revenueCenterId, requestData.requestedAt);
45
+ dispatch(setRevenueCenter(revenueCenter));
46
+ return revenueCenter;
47
+ }
48
+ catch (err) {
49
+ return rejectWithValue(err);
50
+ }
51
+ }));
52
+ export const fetchLocation = createAsyncThunk(OrderActionType.FetchLocation, ({ revenueCenterId, cartTotal }, { dispatch, getState, rejectWithValue }) => __awaiter(void 0, void 0, void 0, function* () {
53
+ const { api } = getState().config;
54
+ if (!api)
55
+ return;
56
+ try {
57
+ const revenueCenter = yield api.getLocation(revenueCenterId, cartTotal);
58
+ dispatch(setRevenueCenter(revenueCenter));
59
+ return revenueCenter;
60
+ }
61
+ catch (err) {
62
+ return rejectWithValue(err);
63
+ }
64
+ }));
65
+ export const fetchLocationBySlug = createAsyncThunk(OrderActionType.FetchLocation, ({ slug, cartTotal }, { dispatch, getState, rejectWithValue }) => __awaiter(void 0, void 0, void 0, function* () {
66
+ const { api } = getState().config;
67
+ if (!api)
68
+ return;
69
+ try {
70
+ const revenueCenter = yield api.getLocationBySlug(slug, cartTotal);
71
+ dispatch(setRevenueCenter(revenueCenter));
72
+ return revenueCenter;
73
+ }
74
+ catch (err) {
75
+ return rejectWithValue(err);
76
+ }
77
+ }));
78
+ export const revertMenu = createAsyncThunk(OrderActionType.RevertMenu, (requestData, { dispatch, getState, rejectWithValue }) => __awaiter(void 0, void 0, void 0, function* () {
79
+ const { api } = getState().config;
80
+ if (!api)
81
+ return;
82
+ try {
83
+ const revenueCenter = yield api.getLocation(requestData.revenueCenterId);
84
+ dispatch(setMenuVars({
85
+ revenueCenter,
86
+ serviceType: requestData.serviceType,
87
+ requestedAt: requestData.requestedAt
88
+ }));
89
+ return revenueCenter;
90
+ }
91
+ catch (err) {
92
+ return rejectWithValue(err);
93
+ }
94
+ }));
95
+ export const refreshRevenueCenter = createAsyncThunk(OrderActionType.RefreshRevenueCenter, ({ revenueCenterId, serviceType, requestedAt, reset }, { getState, rejectWithValue }) => __awaiter(void 0, void 0, void 0, function* () {
96
+ const { api } = getState().config;
97
+ if (!api)
98
+ return;
99
+ try {
100
+ const revenueCenter = yield api.getLocation(revenueCenterId);
101
+ if (reset)
102
+ requestedAt = null;
103
+ const firstTimes = makeFirstTimes(revenueCenter, serviceType, requestedAt);
104
+ const { status } = revenueCenter;
105
+ if (!firstTimes || status !== 'OPEN') {
106
+ return { type: 'closed', args: { status, preventClose: true } };
107
+ }
108
+ else {
109
+ return {
110
+ type: 'adjustRequestedAt',
111
+ args: { firstTimes, revenueCenter, preventClose: true }
112
+ };
113
+ }
114
+ }
115
+ catch (err) {
116
+ return rejectWithValue(err);
117
+ }
118
+ }));
119
+ export const editOrder = createAsyncThunk(OrderActionType.EditOrder, (order, { dispatch, getState, rejectWithValue }) => __awaiter(void 0, void 0, void 0, function* () {
120
+ const { api } = getState().config;
121
+ if (!api)
122
+ return;
123
+ const alert = { type: 'working', args: { text: 'Building your order...' } };
124
+ dispatch(setAlert(alert));
125
+ try {
126
+ const { order_id: orderId, order_type: orderType, service_type: serviceType, requested_at: requestedAt, revenue_center, address } = order;
127
+ const revenueCenterId = revenue_center === null || revenue_center === void 0 ? void 0 : revenue_center.revenue_center_id;
128
+ const revenueCenter = yield api.getLocation(revenueCenterId);
129
+ const menuItems = yield api.getMenuItems(revenueCenterId, serviceType);
130
+ const { cart, cartCounts } = rehydrateCart(menuItems, order.cart);
131
+ dispatch(setMenuItems(menuItems));
132
+ const form = rehydrateCheckoutForm(order);
133
+ dispatch(updateForm(form));
134
+ // dispatch(toggleSidebar())
135
+ const isOutpost = revenueCenter.is_outpost;
136
+ const payload = {
137
+ orderId,
138
+ orderType,
139
+ serviceType,
140
+ isOutpost,
141
+ revenueCenter,
142
+ requestedAt,
143
+ address,
144
+ cart: cart,
145
+ cartCounts
146
+ };
147
+ dispatch(setAlert({ type: 'closeAndSidebar' }));
148
+ return payload;
149
+ }
150
+ catch (err) {
151
+ dispatch(resetAlert());
152
+ dispatch(addMessage('Something went wrong. Please contact support.'));
153
+ return rejectWithValue(null);
154
+ }
155
+ }));
156
+ export const reorderPastOrder = createAsyncThunk(OrderActionType.ReorderPastOrder, ({ revenueCenterId, serviceType, items }, { dispatch, getState, rejectWithValue }) => __awaiter(void 0, void 0, void 0, function* () {
157
+ const { api } = getState().config;
158
+ if (!api)
159
+ return;
160
+ const alert = { type: 'working', args: { text: 'Building your order...' } };
161
+ dispatch(setAlert(alert));
162
+ try {
163
+ const revenueCenter = yield api.getLocation(revenueCenterId);
164
+ const requestedAt = makeFirstRequestedAt(revenueCenter, serviceType, null);
165
+ if (!requestedAt) {
166
+ const { status } = revenueCenter;
167
+ const alert = { type: 'closed', args: { status, isCancel: true } };
168
+ dispatch(setAlert(alert));
169
+ return {};
170
+ }
171
+ else {
172
+ dispatch(resetMenuVars());
173
+ dispatch(resetRevenueCenter());
174
+ const menuItems = yield api.getMenuItems(revenueCenterId, serviceType);
175
+ const { cart, cartCounts } = rehydrateCart(menuItems, items);
176
+ dispatch(setMenuItems(menuItems));
177
+ const orderType = revenueCenter.revenue_center_type;
178
+ const payload = {
179
+ revenueCenter,
180
+ requestedAt,
181
+ serviceType,
182
+ cart,
183
+ cartCounts
184
+ };
185
+ const alert = {
186
+ type: 'requestedAt',
187
+ args: {
188
+ openSidebar: true,
189
+ focusFirst: true,
190
+ skipClose: true,
191
+ isReorder: true,
192
+ revenueCenter,
193
+ serviceType,
194
+ orderType,
195
+ requestedAt
196
+ }
197
+ };
198
+ dispatch(setAlert(alert));
199
+ return payload;
200
+ }
201
+ }
202
+ catch (err) {
203
+ dispatch(resetAlert());
204
+ dispatch(addMessage('Something went wrong. Please contact support.'));
205
+ return rejectWithValue(null);
206
+ }
207
+ }));
208
+ const orderSlice = createSlice({
209
+ name: ReducerType.Order,
210
+ initialState,
211
+ reducers: {
212
+ resetOrder: () => initialState,
213
+ resetOrderType: state => {
214
+ state.orderId = null;
215
+ state.orderType = null;
216
+ state.serviceType = null;
217
+ state.prepType = null;
218
+ state.isOutpost = false;
219
+ state.isCurbside = false;
220
+ state.revenueCenter = null;
221
+ state.table = null;
222
+ state.requestedAt = null;
223
+ },
224
+ resetRevenueCenter: state => {
225
+ state.revenueCenter = null;
226
+ },
227
+ resetLocation: state => {
228
+ state.revenueCenter = null;
229
+ },
230
+ resetCart: state => {
231
+ state.cart = null;
232
+ state.cartCounts = null;
233
+ },
234
+ resetMessages: state => {
235
+ state.messages = [];
236
+ },
237
+ resetAlert: state => {
238
+ state.alert = null;
239
+ },
240
+ updateOrder: (state, action) => {
241
+ return Object.assign(Object.assign({}, state), action.payload);
242
+ },
243
+ checkout: state => state,
244
+ setAlert: (state, action) => {
245
+ state.alert = action.payload;
246
+ },
247
+ setOrderId: (state, action) => {
248
+ state.orderId = action.payload;
249
+ },
250
+ setOrderType: (state, action) => {
251
+ state.orderType = action.payload;
252
+ },
253
+ setServiceType: (state, action) => {
254
+ state.serviceType = action.payload;
255
+ },
256
+ setOrderServiceType: (state, action) => {
257
+ return Object.assign(Object.assign({}, state), action.payload);
258
+ },
259
+ setCurbside: (state, action) => {
260
+ state.isCurbside = action.payload;
261
+ },
262
+ setDeviceType: (state, action) => {
263
+ state.deviceType = action.payload;
264
+ },
265
+ setCurrentVendor: (state, action) => {
266
+ state.currentVendor = action.payload;
267
+ },
268
+ setMenuVars: (state, action) => {
269
+ const { revenueCenter } = action.payload;
270
+ return Object.assign(Object.assign(Object.assign({}, state), action.payload), { orderType: revenueCenter.revenue_center_type, isOutpost: revenueCenter.is_outpost });
271
+ },
272
+ setAddress: (state, action) => {
273
+ state.address = action.payload;
274
+ },
275
+ setRequestedAt: (state, action) => {
276
+ const messages = state.messages.filter(i => !i.message.includes('Requested time'));
277
+ state.requestedAt = action.payload;
278
+ state.messages = messages;
279
+ },
280
+ setRevenueCenter: (state, action) => {
281
+ const revenueCenter = action.payload;
282
+ const previousRequestedAt = state.requestedAt;
283
+ const requestedAt = makeFirstRequestedAt(revenueCenter, state.serviceType, previousRequestedAt);
284
+ let messages;
285
+ if (previousRequestedAt && requestedAt !== previousRequestedAt) {
286
+ const otherMessages = state.messages.filter(i => !i.message.includes('Requested time'));
287
+ const tz = timezoneMap[revenueCenter.timezone];
288
+ const requestedAtText = makeRequestedAtStr(requestedAt, tz);
289
+ const msg = {
290
+ message: `Requested time updated to ${requestedAtText}`,
291
+ id: makeRandomNumberString()
292
+ };
293
+ messages = [msg, ...otherMessages];
294
+ }
295
+ else {
296
+ messages = state.messages;
297
+ }
298
+ state.revenueCenter = revenueCenter;
299
+ state.requestedAt = requestedAt !== null && requestedAt !== void 0 ? requestedAt : null;
300
+ state.messages = messages;
301
+ },
302
+ setTable: (state, action) => {
303
+ state.table = action.payload;
304
+ },
305
+ setPrepType: (state, action) => {
306
+ state.prepType = action.payload;
307
+ },
308
+ setCart: (state, action) => {
309
+ const cartCounts = calcCartCounts(action.payload);
310
+ state.cart = action.payload;
311
+ state.cartCounts = cartCounts;
312
+ },
313
+ setCurrentCategory: (state, action) => {
314
+ state.currentCategory = action.payload;
315
+ },
316
+ setCurrentItem: (state, action) => {
317
+ state.currentItem = action.payload;
318
+ },
319
+ addItemToCart: (state, action) => {
320
+ const currentCart = state.cart !== null ? state.cart : [];
321
+ const { cart, cartCounts } = addItem([...currentCart], action.payload);
322
+ state.cart = cart;
323
+ state.cartCounts = cartCounts;
324
+ },
325
+ removeItemFromCart: (state, action) => {
326
+ const { index } = action.payload;
327
+ const currentCart = state.cart !== null ? state.cart : [];
328
+ const { cart, cartCounts } = removeItem([...currentCart], index);
329
+ state.cart = cart;
330
+ state.cartCounts = cartCounts;
331
+ },
332
+ incrementItemInCart: (state, action) => {
333
+ const { index } = action.payload;
334
+ const currentCart = state.cart !== null ? state.cart : [];
335
+ const { cart, cartCounts } = incrementItem([...currentCart], index);
336
+ state.cart = cart;
337
+ state.cartCounts = cartCounts;
338
+ },
339
+ decrementItemInCart: (state, action) => {
340
+ const { index } = action.payload;
341
+ const currentCart = state.cart !== null ? state.cart : [];
342
+ const { cart, cartCounts } = decrementItem([...currentCart], index);
343
+ state.cart = cart;
344
+ state.cartCounts = cartCounts;
345
+ },
346
+ addMessage: (state, action) => {
347
+ const existing = state.messages.map(i => i.message);
348
+ if (existing.includes(action.payload)) {
349
+ // do nothing
350
+ return;
351
+ }
352
+ state.messages = [
353
+ ...state.messages,
354
+ {
355
+ message: action.payload,
356
+ id: makeRandomNumberString()
357
+ }
358
+ ];
359
+ },
360
+ removeMessage: (state, action) => {
361
+ state.messages = state.messages.filter(i => i.id !== action.payload);
362
+ }
363
+ },
364
+ extraReducers: builder => {
365
+ builder
366
+ .addCase(fetchRevenueCenter.fulfilled, state => {
367
+ state.loading = 'idle';
368
+ state.error = null;
369
+ })
370
+ .addCase(fetchRevenueCenter.pending, state => {
371
+ state.loading = 'pending';
372
+ })
373
+ .addCase(fetchRevenueCenter.rejected, (state, action) => {
374
+ state.error = action.payload;
375
+ state.loading = 'idle';
376
+ })
377
+ .addCase(fetchLocation.fulfilled, state => {
378
+ state.loading = 'idle';
379
+ state.error = null;
380
+ })
381
+ .addCase(fetchLocation.pending, state => {
382
+ state.loading = 'pending';
383
+ })
384
+ .addCase(fetchLocation.rejected, (state, action) => {
385
+ state.error = action.payload;
386
+ state.loading = 'idle';
387
+ })
388
+ .addCase(revertMenu.fulfilled, state => {
389
+ state.loading = 'idle';
390
+ state.error = null;
391
+ })
392
+ .addCase(revertMenu.pending, state => {
393
+ state.loading = 'pending';
394
+ })
395
+ .addCase(revertMenu.rejected, (state, action) => {
396
+ state.error = action.payload;
397
+ state.loading = 'idle';
398
+ })
399
+ .addCase(refreshRevenueCenter.fulfilled, (state, action) => {
400
+ state.alert = action.payload;
401
+ state.loading = 'idle';
402
+ state.error = null;
403
+ })
404
+ .addCase(refreshRevenueCenter.pending, state => {
405
+ state.loading = 'pending';
406
+ })
407
+ .addCase(refreshRevenueCenter.rejected, (state, action) => {
408
+ state.error = action.payload;
409
+ state.loading = 'idle';
410
+ })
411
+ .addCase(editOrder.fulfilled, (state, action) => {
412
+ return Object.assign(Object.assign(Object.assign({}, state), action.payload), { loading: 'idle', error: null });
413
+ })
414
+ .addCase(editOrder.pending, state => {
415
+ state.loading = 'pending';
416
+ })
417
+ .addCase(editOrder.rejected, state => {
418
+ state.loading = 'idle';
419
+ })
420
+ .addCase(reorderPastOrder.fulfilled, (state, action) => {
421
+ return Object.assign(Object.assign(Object.assign({}, state), action.payload), { loading: 'idle', error: null });
422
+ })
423
+ .addCase(reorderPastOrder.pending, state => {
424
+ state.loading = 'pending';
425
+ })
426
+ .addCase(reorderPastOrder.rejected, state => {
427
+ state.loading = 'idle';
428
+ });
429
+ }
430
+ });
431
+ export const { resetOrder, addItemToCart, addMessage, decrementItemInCart, incrementItemInCart, removeItemFromCart, removeMessage, resetAlert, resetCart, resetLocation, resetMessages, resetOrderType, resetRevenueCenter, setAddress, setAlert, setCart, setCurbside, setCurrentCategory, setCurrentItem, setDeviceType, setMenuVars, setOrderId, setOrderServiceType, setOrderType, setPrepType, setRequestedAt, setRevenueCenter, setServiceType, setTable, checkout, setCurrentVendor, updateOrder } = orderSlice.actions;
432
+ export const selectAlert = (state) => state.order.alert;
433
+ export const selectTimezone = (state) => {
434
+ var _a;
435
+ return state.order.revenueCenter
436
+ ? timezoneMap[(_a = state.order.revenueCenter.timezone) !== null && _a !== void 0 ? _a : 'US/Central']
437
+ : getUserTimezone();
438
+ };
439
+ export const selectOrder = (state) => state.order;
440
+ export const selectCartQuantity = (state) => {
441
+ return state.order.cart
442
+ ? state.order.cart.reduce((t, i) => (t += i.quantity), 0)
443
+ : 0;
444
+ };
445
+ export const selectCartTotal = (state) => {
446
+ return state.order.cart
447
+ ? state.order.cart.reduce((t, i) => (t += i.totalPrice || 0), 0.0)
448
+ : 0.0;
449
+ };
450
+ export const selectCartCounts = (state) => state.order.cartCounts || {};
451
+ export const selectCanOrder = (state) => state.order.revenueCenter &&
452
+ state.order.serviceType &&
453
+ state.order.requestedAt;
454
+ export const selectOrderLimits = createSelector((state) => {
455
+ const { revenueCenter, serviceType } = state.order;
456
+ const { cartGuest, spendingLimit } = state.groupOrder;
457
+ return { revenueCenter, serviceType, cartGuest, spendingLimit };
458
+ }, ({ revenueCenter, serviceType, cartGuest, spendingLimit }) => {
459
+ if (!revenueCenter || !serviceType) {
460
+ return { orderMinimum: null, orderMaximum: null };
461
+ }
462
+ const { order_maximum, order_minimum } = revenueCenter;
463
+ const orderMax = cartGuest && spendingLimit
464
+ ? parseFloat(spendingLimit)
465
+ : order_maximum
466
+ ? parseFloat(order_maximum[serviceType])
467
+ : 0;
468
+ const orderMaximum = orderMax;
469
+ const orderMinimum = order_minimum
470
+ ? parseFloat(order_minimum[serviceType])
471
+ : 0;
472
+ return {
473
+ orderMinimum: orderMinimum > 0 ? orderMinimum : null,
474
+ orderMaximum: orderMaximum > 0 ? orderMaximum : null
475
+ };
476
+ });
477
+ export const selectCartIds = createSelector((state) => {
478
+ return state.order.cart;
479
+ }, cart => (cart ? cart.map(i => i.id) : []));
480
+ export const selectMenuSlug = (state) => {
481
+ const { revenueCenter } = state.order;
482
+ return revenueCenter ? `/menu/${revenueCenter.slug}` : '/';
483
+ };
484
+ export const selectRevenueCenter = (state) => state.order.revenueCenter;
485
+ export const selectCart = (state) => state.order.cart;
486
+ export const selectCurrentVendor = (state) => state.order.currentVendor;
487
+ export const selectMessages = (state) => state.order.messages;
488
+ export const selectCurrentItem = (state) => state.order.currentItem;
489
+ export const selectMenuVars = createSelector((state) => {
490
+ const { revenueCenter, serviceType, requestedAt } = state.order;
491
+ return { revenueCenter, serviceType, requestedAt };
492
+ }, ({ revenueCenter, serviceType, requestedAt }) => {
493
+ return {
494
+ revenueCenterId: (revenueCenter === null || revenueCenter === void 0 ? void 0 : revenueCenter.revenue_center_id) || null,
495
+ serviceType: serviceType,
496
+ requestedAt: requestedAt
497
+ };
498
+ });
499
+ export const selectAutoSelect = (state) => {
500
+ var _a, _b;
501
+ const autoSelect = (_b = (_a = state.config) === null || _a === void 0 ? void 0 : _a.settings) === null || _b === void 0 ? void 0 : _b.autoSelect;
502
+ const { orderType, serviceType } = state.order;
503
+ return autoSelect && orderType && serviceType
504
+ ? autoSelect[orderType][serviceType]
505
+ : false;
506
+ };
507
+ export const selectCurrentCategory = (state) => state.order.currentCategory;
508
+ export const orderReducer = orderSlice.reducer;