@open-tender/cloud 0.4.27 → 0.4.28

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 +721 -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 -108
  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 +363 -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 +719 -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 -100
  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 +363 -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 +62 -62
@@ -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, { 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);
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, { 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);
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, { 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);
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, { 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);
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;