@open-tender/cloud 0.0.1

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 (215) hide show
  1. package/LICENSE.md +21 -0
  2. package/README.md +3 -0
  3. package/dist/cjs/app/hooks.d.ts +50 -0
  4. package/dist/cjs/app/hooks.js +8 -0
  5. package/dist/cjs/app/index.d.ts +1 -0
  6. package/dist/cjs/app/index.js +4 -0
  7. package/dist/cjs/app/store.d.ts +146 -0
  8. package/dist/cjs/app/store.js +51 -0
  9. package/dist/cjs/index.d.ts +3 -0
  10. package/dist/cjs/index.js +7 -0
  11. package/dist/cjs/services/api.d.ts +162 -0
  12. package/dist/cjs/services/api.js +691 -0
  13. package/dist/cjs/services/errors.d.ts +50 -0
  14. package/dist/cjs/services/errors.js +53 -0
  15. package/dist/cjs/services/index.d.ts +2 -0
  16. package/dist/cjs/services/index.js +6 -0
  17. package/dist/cjs/slices/alerts.d.ts +5 -0
  18. package/dist/cjs/slices/alerts.js +28 -0
  19. package/dist/cjs/slices/allergens.d.ts +19 -0
  20. package/dist/cjs/slices/allergens.js +66 -0
  21. package/dist/cjs/slices/announcements.d.ts +28 -0
  22. package/dist/cjs/slices/announcements.js +77 -0
  23. package/dist/cjs/slices/checkout.d.ts +38 -0
  24. package/dist/cjs/slices/checkout.js +276 -0
  25. package/dist/cjs/slices/completedOrders.d.ts +25 -0
  26. package/dist/cjs/slices/completedOrders.js +61 -0
  27. package/dist/cjs/slices/config.d.ts +87 -0
  28. package/dist/cjs/slices/config.js +121 -0
  29. package/dist/cjs/slices/confirmation.d.ts +8 -0
  30. package/dist/cjs/slices/confirmation.js +22 -0
  31. package/dist/cjs/slices/customer/account.d.ts +59 -0
  32. package/dist/cjs/slices/customer/account.js +288 -0
  33. package/dist/cjs/slices/customer/addresses.d.ts +37 -0
  34. package/dist/cjs/slices/customer/addresses.js +134 -0
  35. package/dist/cjs/slices/customer/allergens.d.ts +25 -0
  36. package/dist/cjs/slices/customer/allergens.js +94 -0
  37. package/dist/cjs/slices/customer/communicationPreferences.d.ts +44 -0
  38. package/dist/cjs/slices/customer/communicationPreferences.js +165 -0
  39. package/dist/cjs/slices/customer/creditCards.d.ts +46 -0
  40. package/dist/cjs/slices/customer/creditCards.js +172 -0
  41. package/dist/cjs/slices/customer/favorites.d.ts +45 -0
  42. package/dist/cjs/slices/customer/favorites.js +176 -0
  43. package/dist/cjs/slices/customer/fcmToken.d.ts +31 -0
  44. package/dist/cjs/slices/customer/fcmToken.js +110 -0
  45. package/dist/cjs/slices/customer/giftCards.d.ts +62 -0
  46. package/dist/cjs/slices/customer/giftCards.js +196 -0
  47. package/dist/cjs/slices/customer/groupOrders.d.ts +33 -0
  48. package/dist/cjs/slices/customer/groupOrders.js +148 -0
  49. package/dist/cjs/slices/customer/houseAccounts.d.ts +20 -0
  50. package/dist/cjs/slices/customer/houseAccounts.js +67 -0
  51. package/dist/cjs/slices/customer/index.d.ts +29 -0
  52. package/dist/cjs/slices/customer/index.js +52 -0
  53. package/dist/cjs/slices/customer/levelup.d.ts +36 -0
  54. package/dist/cjs/slices/customer/levelup.js +128 -0
  55. package/dist/cjs/slices/customer/loyalty.d.ts +27 -0
  56. package/dist/cjs/slices/customer/loyalty.js +87 -0
  57. package/dist/cjs/slices/customer/order.d.ts +25 -0
  58. package/dist/cjs/slices/customer/order.js +84 -0
  59. package/dist/cjs/slices/customer/orders.d.ts +20 -0
  60. package/dist/cjs/slices/customer/orders.js +67 -0
  61. package/dist/cjs/slices/customer/qrCode.d.ts +17 -0
  62. package/dist/cjs/slices/customer/qrCode.js +57 -0
  63. package/dist/cjs/slices/customer/rewards.d.ts +20 -0
  64. package/dist/cjs/slices/customer/rewards.js +67 -0
  65. package/dist/cjs/slices/customer/thanx.d.ts +17 -0
  66. package/dist/cjs/slices/customer/thanx.js +57 -0
  67. package/dist/cjs/slices/deals.d.ts +19 -0
  68. package/dist/cjs/slices/deals.js +97 -0
  69. package/dist/cjs/slices/donations.d.ts +26 -0
  70. package/dist/cjs/slices/donations.js +62 -0
  71. package/dist/cjs/slices/giftCards.d.ts +26 -0
  72. package/dist/cjs/slices/giftCards.js +63 -0
  73. package/dist/cjs/slices/groupOrder.d.ts +80 -0
  74. package/dist/cjs/slices/groupOrder.js +226 -0
  75. package/dist/cjs/slices/guest.d.ts +38 -0
  76. package/dist/cjs/slices/guest.js +101 -0
  77. package/dist/cjs/slices/index.d.ts +27 -0
  78. package/dist/cjs/slices/index.js +30 -0
  79. package/dist/cjs/slices/levelup.d.ts +18 -0
  80. package/dist/cjs/slices/levelup.js +51 -0
  81. package/dist/cjs/slices/menu.d.ts +22 -0
  82. package/dist/cjs/slices/menu.js +86 -0
  83. package/dist/cjs/slices/menuDisplay.d.ts +26 -0
  84. package/dist/cjs/slices/menuDisplay.js +59 -0
  85. package/dist/cjs/slices/menuItems.d.ts +20 -0
  86. package/dist/cjs/slices/menuItems.js +57 -0
  87. package/dist/cjs/slices/notifications.d.ts +5 -0
  88. package/dist/cjs/slices/notifications.js +27 -0
  89. package/dist/cjs/slices/order.d.ts +77 -0
  90. package/dist/cjs/slices/order.js +426 -0
  91. package/dist/cjs/slices/orderFulfillment.d.ts +29 -0
  92. package/dist/cjs/slices/orderFulfillment.js +83 -0
  93. package/dist/cjs/slices/orderRating.d.ts +34 -0
  94. package/dist/cjs/slices/orderRating.js +108 -0
  95. package/dist/cjs/slices/orders.d.ts +86 -0
  96. package/dist/cjs/slices/orders.js +311 -0
  97. package/dist/cjs/slices/resetPassword.d.ts +29 -0
  98. package/dist/cjs/slices/resetPassword.js +83 -0
  99. package/dist/cjs/slices/revenueCenters.d.ts +35 -0
  100. package/dist/cjs/slices/revenueCenters.js +95 -0
  101. package/dist/cjs/slices/signUp.d.ts +19 -0
  102. package/dist/cjs/slices/signUp.js +52 -0
  103. package/dist/cjs/slices/types.d.ts +43 -0
  104. package/dist/cjs/slices/types.js +47 -0
  105. package/dist/cjs/slices/validTimes.d.ts +17 -0
  106. package/dist/cjs/slices/validTimes.js +57 -0
  107. package/dist/cjs/slices/verifyAccount.d.ts +17 -0
  108. package/dist/cjs/slices/verifyAccount.js +54 -0
  109. package/dist/esm/app/hooks.d.ts +50 -0
  110. package/dist/esm/app/hooks.js +4 -0
  111. package/dist/esm/app/index.d.ts +1 -0
  112. package/dist/esm/app/index.js +1 -0
  113. package/dist/esm/app/store.d.ts +146 -0
  114. package/dist/esm/app/store.js +48 -0
  115. package/dist/esm/index.d.ts +3 -0
  116. package/dist/esm/index.js +3 -0
  117. package/dist/esm/services/api.d.ts +162 -0
  118. package/dist/esm/services/api.js +689 -0
  119. package/dist/esm/services/errors.d.ts +50 -0
  120. package/dist/esm/services/errors.js +50 -0
  121. package/dist/esm/services/index.d.ts +2 -0
  122. package/dist/esm/services/index.js +2 -0
  123. package/dist/esm/slices/alerts.d.ts +5 -0
  124. package/dist/esm/slices/alerts.js +23 -0
  125. package/dist/esm/slices/allergens.d.ts +19 -0
  126. package/dist/esm/slices/allergens.js +60 -0
  127. package/dist/esm/slices/announcements.d.ts +28 -0
  128. package/dist/esm/slices/announcements.js +71 -0
  129. package/dist/esm/slices/checkout.d.ts +38 -0
  130. package/dist/esm/slices/checkout.js +268 -0
  131. package/dist/esm/slices/completedOrders.d.ts +25 -0
  132. package/dist/esm/slices/completedOrders.js +57 -0
  133. package/dist/esm/slices/config.d.ts +87 -0
  134. package/dist/esm/slices/config.js +102 -0
  135. package/dist/esm/slices/confirmation.d.ts +8 -0
  136. package/dist/esm/slices/confirmation.js +18 -0
  137. package/dist/esm/slices/customer/account.d.ts +59 -0
  138. package/dist/esm/slices/customer/account.js +282 -0
  139. package/dist/esm/slices/customer/addresses.d.ts +37 -0
  140. package/dist/esm/slices/customer/addresses.js +129 -0
  141. package/dist/esm/slices/customer/allergens.d.ts +25 -0
  142. package/dist/esm/slices/customer/allergens.js +89 -0
  143. package/dist/esm/slices/customer/communicationPreferences.d.ts +44 -0
  144. package/dist/esm/slices/customer/communicationPreferences.js +161 -0
  145. package/dist/esm/slices/customer/creditCards.d.ts +46 -0
  146. package/dist/esm/slices/customer/creditCards.js +166 -0
  147. package/dist/esm/slices/customer/favorites.d.ts +45 -0
  148. package/dist/esm/slices/customer/favorites.js +171 -0
  149. package/dist/esm/slices/customer/fcmToken.d.ts +31 -0
  150. package/dist/esm/slices/customer/fcmToken.js +106 -0
  151. package/dist/esm/slices/customer/giftCards.d.ts +62 -0
  152. package/dist/esm/slices/customer/giftCards.js +191 -0
  153. package/dist/esm/slices/customer/groupOrders.d.ts +33 -0
  154. package/dist/esm/slices/customer/groupOrders.js +143 -0
  155. package/dist/esm/slices/customer/houseAccounts.d.ts +20 -0
  156. package/dist/esm/slices/customer/houseAccounts.js +62 -0
  157. package/dist/esm/slices/customer/index.d.ts +29 -0
  158. package/dist/esm/slices/customer/index.js +48 -0
  159. package/dist/esm/slices/customer/levelup.d.ts +36 -0
  160. package/dist/esm/slices/customer/levelup.js +123 -0
  161. package/dist/esm/slices/customer/loyalty.d.ts +27 -0
  162. package/dist/esm/slices/customer/loyalty.js +79 -0
  163. package/dist/esm/slices/customer/order.d.ts +25 -0
  164. package/dist/esm/slices/customer/order.js +79 -0
  165. package/dist/esm/slices/customer/orders.d.ts +20 -0
  166. package/dist/esm/slices/customer/orders.js +62 -0
  167. package/dist/esm/slices/customer/qrCode.d.ts +17 -0
  168. package/dist/esm/slices/customer/qrCode.js +53 -0
  169. package/dist/esm/slices/customer/rewards.d.ts +20 -0
  170. package/dist/esm/slices/customer/rewards.js +62 -0
  171. package/dist/esm/slices/customer/thanx.d.ts +17 -0
  172. package/dist/esm/slices/customer/thanx.js +53 -0
  173. package/dist/esm/slices/deals.d.ts +19 -0
  174. package/dist/esm/slices/deals.js +91 -0
  175. package/dist/esm/slices/donations.d.ts +26 -0
  176. package/dist/esm/slices/donations.js +58 -0
  177. package/dist/esm/slices/giftCards.d.ts +26 -0
  178. package/dist/esm/slices/giftCards.js +59 -0
  179. package/dist/esm/slices/groupOrder.d.ts +80 -0
  180. package/dist/esm/slices/groupOrder.js +216 -0
  181. package/dist/esm/slices/guest.d.ts +38 -0
  182. package/dist/esm/slices/guest.js +97 -0
  183. package/dist/esm/slices/index.d.ts +27 -0
  184. package/dist/esm/slices/index.js +27 -0
  185. package/dist/esm/slices/levelup.d.ts +18 -0
  186. package/dist/esm/slices/levelup.js +48 -0
  187. package/dist/esm/slices/menu.d.ts +22 -0
  188. package/dist/esm/slices/menu.js +81 -0
  189. package/dist/esm/slices/menuDisplay.d.ts +26 -0
  190. package/dist/esm/slices/menuDisplay.js +55 -0
  191. package/dist/esm/slices/menuItems.d.ts +20 -0
  192. package/dist/esm/slices/menuItems.js +52 -0
  193. package/dist/esm/slices/notifications.d.ts +5 -0
  194. package/dist/esm/slices/notifications.js +22 -0
  195. package/dist/esm/slices/order.d.ts +77 -0
  196. package/dist/esm/slices/order.js +423 -0
  197. package/dist/esm/slices/orderFulfillment.d.ts +29 -0
  198. package/dist/esm/slices/orderFulfillment.js +79 -0
  199. package/dist/esm/slices/orderRating.d.ts +34 -0
  200. package/dist/esm/slices/orderRating.js +104 -0
  201. package/dist/esm/slices/orders.d.ts +86 -0
  202. package/dist/esm/slices/orders.js +302 -0
  203. package/dist/esm/slices/resetPassword.d.ts +29 -0
  204. package/dist/esm/slices/resetPassword.js +79 -0
  205. package/dist/esm/slices/revenueCenters.d.ts +35 -0
  206. package/dist/esm/slices/revenueCenters.js +89 -0
  207. package/dist/esm/slices/signUp.d.ts +19 -0
  208. package/dist/esm/slices/signUp.js +48 -0
  209. package/dist/esm/slices/types.d.ts +43 -0
  210. package/dist/esm/slices/types.js +44 -0
  211. package/dist/esm/slices/validTimes.d.ts +17 -0
  212. package/dist/esm/slices/validTimes.js +52 -0
  213. package/dist/esm/slices/verifyAccount.d.ts +17 -0
  214. package/dist/esm/slices/verifyAccount.js +50 -0
  215. package/package.json +61 -0
@@ -0,0 +1,426 @@
1
+ "use strict";
2
+ var _a;
3
+ Object.defineProperty(exports, "__esModule", { value: true });
4
+ exports.orderReducer = exports.selectTimezone = exports.setTable = exports.setServiceType = exports.setRevenueCenter = exports.setRequestedAt = exports.setPrepType = exports.setOrderType = exports.setOrderServiceType = exports.setOrderId = exports.setMenuVars = exports.setDeviceType = exports.setCurrentCategory = exports.setCurbside = exports.setCart = exports.setAlert = exports.setAddress = exports.resetRevenueCenter = exports.resetOrderType = exports.resetMessages = exports.resetLocation = exports.resetCart = exports.resetAlert = exports.removeMessage = exports.removeItemFromCart = exports.incrementItemInCart = exports.decrementItemInCart = exports.addMessage = exports.addItemToCart = exports.resetOrder = exports.reorderPastOrder = exports.editOrder = exports.refreshRevenueCenter = exports.revertMenu = exports.fetchLocation = exports.fetchRevenueCenter = exports.OrderActionType = void 0;
5
+ const tslib_1 = require("tslib");
6
+ const toolkit_1 = require("@reduxjs/toolkit");
7
+ const types_1 = require("./types");
8
+ const utils_1 = require("@open-tender/utils");
9
+ const checkout_1 = require("./checkout");
10
+ const menu_1 = require("./menu");
11
+ const menuItems_1 = require("./menuItems");
12
+ const initialState = {
13
+ orderId: null,
14
+ orderType: null,
15
+ serviceType: null,
16
+ deviceType: null,
17
+ isOutpost: false,
18
+ isCurbside: false,
19
+ revenueCenter: null,
20
+ table: null,
21
+ prepType: null,
22
+ requestedAt: 'asap',
23
+ address: null,
24
+ currentCategory: null,
25
+ currentItem: null,
26
+ cart: [],
27
+ cartCounts: {},
28
+ messages: [],
29
+ alert: null,
30
+ error: null,
31
+ loading: 'idle',
32
+ currentVendor: null
33
+ };
34
+ var OrderActionType;
35
+ (function (OrderActionType) {
36
+ OrderActionType["FetchRevenueCenter"] = "order/fetchRevenueCenter";
37
+ OrderActionType["FetchLocation"] = "order/fetchLocation";
38
+ OrderActionType["RevertMenu"] = "order/revertMenu";
39
+ OrderActionType["RefreshRevenueCenter"] = "order/refreshRevenueCenter";
40
+ OrderActionType["EditOrder"] = "order/editOrder";
41
+ OrderActionType["ReorderPastOrder"] = "order/reorderPastOrder";
42
+ })(OrderActionType = exports.OrderActionType || (exports.OrderActionType = {}));
43
+ exports.fetchRevenueCenter = (0, toolkit_1.createAsyncThunk)(OrderActionType.FetchRevenueCenter, (requestData, { dispatch, getState, rejectWithValue }) => tslib_1.__awaiter(void 0, void 0, void 0, function* () {
44
+ const { api } = getState().config;
45
+ if (!api)
46
+ return;
47
+ try {
48
+ const revenueCenter = yield api.getRevenueCenter(requestData.revenueCenterId, requestData.requestedAt);
49
+ dispatch((0, exports.setRevenueCenter)(revenueCenter));
50
+ return revenueCenter;
51
+ }
52
+ catch (err) {
53
+ return rejectWithValue(err);
54
+ }
55
+ }));
56
+ exports.fetchLocation = (0, toolkit_1.createAsyncThunk)(OrderActionType.FetchLocation, (revenueCenterId, { dispatch, getState, rejectWithValue }) => tslib_1.__awaiter(void 0, void 0, void 0, function* () {
57
+ const { api } = getState().config;
58
+ if (!api)
59
+ return;
60
+ try {
61
+ const revenueCenter = yield api.getLocation(revenueCenterId);
62
+ dispatch((0, exports.setRevenueCenter)(revenueCenter));
63
+ return revenueCenter;
64
+ }
65
+ catch (err) {
66
+ return rejectWithValue(err);
67
+ }
68
+ }));
69
+ exports.revertMenu = (0, toolkit_1.createAsyncThunk)(OrderActionType.RevertMenu, (requestData, { dispatch, getState, rejectWithValue }) => tslib_1.__awaiter(void 0, void 0, void 0, function* () {
70
+ const { api } = getState().config;
71
+ if (!api)
72
+ return;
73
+ try {
74
+ const revenueCenter = yield api.getLocation(requestData.revenueCenterId);
75
+ dispatch((0, exports.setMenuVars)({
76
+ revenueCenter,
77
+ serviceType: requestData.serviceType,
78
+ requestedAt: requestData.requestedAt
79
+ }));
80
+ return revenueCenter;
81
+ }
82
+ catch (err) {
83
+ return rejectWithValue(err);
84
+ }
85
+ }));
86
+ exports.refreshRevenueCenter = (0, toolkit_1.createAsyncThunk)(OrderActionType.RefreshRevenueCenter, (requestData, { getState, rejectWithValue }) => tslib_1.__awaiter(void 0, void 0, void 0, function* () {
87
+ var _b, _c;
88
+ const { api } = getState().config;
89
+ if (!api)
90
+ return;
91
+ try {
92
+ const revenueCenter = yield api.getLocation(requestData.revenueCenterId);
93
+ if (requestData.reset)
94
+ requestData.requestedAt = null;
95
+ const firstTimes = (0, utils_1.makeFirstTimes)(revenueCenter, (_b = requestData.serviceType) !== null && _b !== void 0 ? _b : "WALKIN", ((_c = requestData.requestedAt) !== null && _c !== void 0 ? _c : new Date().toISOString()));
96
+ const { status } = revenueCenter;
97
+ let alert;
98
+ if (!firstTimes || status !== 'OPEN') {
99
+ alert = { type: 'closed', args: { status, preventClose: true } };
100
+ }
101
+ else {
102
+ alert = {
103
+ type: 'adjustRequestedAt',
104
+ args: { firstTimes, revenueCenter, preventClose: true }
105
+ };
106
+ }
107
+ return alert;
108
+ }
109
+ catch (err) {
110
+ return rejectWithValue(err);
111
+ }
112
+ }));
113
+ exports.editOrder = (0, toolkit_1.createAsyncThunk)(OrderActionType.EditOrder, (order, { dispatch, getState, rejectWithValue }) => tslib_1.__awaiter(void 0, void 0, void 0, function* () {
114
+ const { api } = getState().config;
115
+ if (!api)
116
+ return;
117
+ const alert = { type: 'working', args: { text: 'Building your order...' } };
118
+ dispatch((0, exports.setAlert)(alert));
119
+ try {
120
+ const { order_id: orderId, order_type: orderType, service_type: serviceType, requested_at: requestedAt, revenue_center, address } = order;
121
+ const revenueCenterId = revenue_center === null || revenue_center === void 0 ? void 0 : revenue_center.revenue_center_id;
122
+ const revenueCenter = yield api.getLocation(revenueCenterId);
123
+ const menuItems = yield api.getMenuItems(revenueCenterId, serviceType);
124
+ const { cart, cartCounts } = (0, utils_1.rehydrateCart)(menuItems, order.cart);
125
+ dispatch((0, menuItems_1.setMenuItems)(menuItems));
126
+ const form = (0, utils_1.rehydrateCheckoutForm)(order);
127
+ dispatch((0, checkout_1.updateForm)(form));
128
+ // dispatch(toggleSidebar())
129
+ const isOutpost = revenueCenter.is_outpost;
130
+ const payload = {
131
+ orderId,
132
+ orderType,
133
+ serviceType,
134
+ isOutpost,
135
+ revenueCenter,
136
+ requestedAt,
137
+ address,
138
+ cart: cart,
139
+ cartCounts
140
+ };
141
+ dispatch((0, exports.setAlert)({ type: 'closeAndSidebar' }));
142
+ return payload;
143
+ }
144
+ catch (err) {
145
+ dispatch((0, exports.resetAlert)());
146
+ dispatch((0, exports.addMessage)('Something went wrong. Please contact support.'));
147
+ return rejectWithValue(null);
148
+ }
149
+ }));
150
+ exports.reorderPastOrder = (0, toolkit_1.createAsyncThunk)(OrderActionType.ReorderPastOrder, (requestData, { dispatch, getState, rejectWithValue }) => tslib_1.__awaiter(void 0, void 0, void 0, function* () {
151
+ const { api } = getState().config;
152
+ if (!api)
153
+ return;
154
+ const alert = { type: 'working', args: { text: 'Building your order...' } };
155
+ dispatch((0, exports.setAlert)(alert));
156
+ try {
157
+ const revenueCenter = yield api.getLocation(requestData.revenueCenterId);
158
+ const requestedAt = (0, utils_1.makeFirstRequestedAt)(revenueCenter, requestData.serviceType, null);
159
+ if (!requestedAt) {
160
+ const { status } = revenueCenter;
161
+ const alert = { type: 'closed', args: { status, isCancel: true } };
162
+ dispatch((0, exports.setAlert)(alert));
163
+ return {};
164
+ }
165
+ else {
166
+ dispatch((0, menu_1.resetMenuVars)());
167
+ dispatch((0, exports.resetRevenueCenter)());
168
+ const menuItems = yield api.getMenuItems(requestData.revenueCenterId, requestData.serviceType);
169
+ const { cart, cartCounts } = (0, utils_1.rehydrateCart)(menuItems, requestData.items);
170
+ dispatch((0, menuItems_1.setMenuItems)(menuItems));
171
+ const orderType = revenueCenter.revenue_center_type;
172
+ const payload = {
173
+ revenueCenter,
174
+ requestedAt,
175
+ serviceType: requestData.serviceType,
176
+ cart,
177
+ cartCounts
178
+ };
179
+ const alert = {
180
+ type: 'requestedAt',
181
+ args: {
182
+ openSidebar: true,
183
+ focusFirst: true,
184
+ skipClose: true,
185
+ isReorder: true,
186
+ revenueCenter,
187
+ serviceType: requestData.serviceType,
188
+ orderType,
189
+ requestedAt
190
+ }
191
+ };
192
+ dispatch((0, exports.setAlert)(alert));
193
+ return payload;
194
+ }
195
+ }
196
+ catch (err) {
197
+ dispatch((0, exports.resetAlert)());
198
+ dispatch((0, exports.addMessage)('Something went wrong. Please contact support.'));
199
+ return rejectWithValue(null);
200
+ }
201
+ }));
202
+ const orderSlice = (0, toolkit_1.createSlice)({
203
+ name: types_1.ReducerType.Order,
204
+ initialState,
205
+ reducers: {
206
+ resetOrder: () => initialState,
207
+ resetOrderType: state => {
208
+ state.orderId = null;
209
+ state.orderType = null;
210
+ state.serviceType = null;
211
+ state.prepType = null;
212
+ state.isOutpost = false;
213
+ state.isCurbside = false;
214
+ state.revenueCenter = null;
215
+ state.table = null;
216
+ state.requestedAt = null;
217
+ },
218
+ resetRevenueCenter: state => {
219
+ state.revenueCenter = null;
220
+ },
221
+ resetLocation: state => {
222
+ state.revenueCenter = null;
223
+ },
224
+ resetCart: state => {
225
+ state.cart = null;
226
+ state.cartCounts = null;
227
+ },
228
+ resetMessages: state => {
229
+ state.messages = [];
230
+ },
231
+ resetAlert: state => {
232
+ state.alert = null;
233
+ },
234
+ // updateOrder: (state, action) => {
235
+ // state.alert = action.payload
236
+ // },
237
+ setAlert: (state, action) => {
238
+ state.alert = action.payload;
239
+ },
240
+ setOrderId: (state, action) => {
241
+ state.orderId = action.payload;
242
+ },
243
+ setOrderType: (state, action) => {
244
+ state.orderType = action.payload;
245
+ },
246
+ setServiceType: (state, action) => {
247
+ state.serviceType = action.payload;
248
+ },
249
+ setOrderServiceType: (state, action) => {
250
+ state = Object.assign(Object.assign({}, state), action.payload);
251
+ },
252
+ setCurbside: (state, action) => {
253
+ state.isCurbside = action.payload;
254
+ },
255
+ setDeviceType: (state, action) => {
256
+ state.deviceType = action.payload;
257
+ },
258
+ setMenuVars: (state, action) => {
259
+ const { revenueCenter } = action.payload;
260
+ state = Object.assign(Object.assign(Object.assign({}, state), action.payload), { orderType: revenueCenter.revenue_center_type, isOutpost: revenueCenter.is_outpost });
261
+ },
262
+ setAddress: (state, action) => {
263
+ state.address = action.payload;
264
+ },
265
+ setRequestedAt: (state, action) => {
266
+ const messages = state.messages.filter(i => !i.message.includes('Requested time'));
267
+ state.requestedAt = action.payload;
268
+ state.messages = messages;
269
+ },
270
+ setRevenueCenter: (state, action) => {
271
+ const revenueCenter = action.payload;
272
+ const previousRequestedAt = state.requestedAt;
273
+ const requestedAt = (0, utils_1.makeFirstRequestedAt)(revenueCenter, state.serviceType, previousRequestedAt);
274
+ let messages;
275
+ if (previousRequestedAt && requestedAt !== previousRequestedAt) {
276
+ const otherMessages = state.messages.filter(i => !i.message.includes('Requested time'));
277
+ const tz = utils_1.timezoneMap[revenueCenter.timezone];
278
+ const requestedAtText = (0, utils_1.makeRequestedAtStr)(requestedAt, tz);
279
+ const msg = {
280
+ message: `Requested time updated to ${requestedAtText}`,
281
+ id: (0, utils_1.makeRandomNumberString)()
282
+ };
283
+ messages = [msg, ...otherMessages];
284
+ }
285
+ else {
286
+ messages = state.messages;
287
+ }
288
+ state.revenueCenter = revenueCenter;
289
+ state.requestedAt = requestedAt !== null && requestedAt !== void 0 ? requestedAt : null;
290
+ state.messages = messages;
291
+ },
292
+ setTable: (state, action) => {
293
+ state.table = action.payload;
294
+ },
295
+ setPrepType: (state, action) => {
296
+ state.prepType = action.payload;
297
+ },
298
+ setCart: (state, action) => {
299
+ const cartCounts = (0, utils_1.calcCartCounts)(action.payload);
300
+ state.cart = action.payload;
301
+ state.cartCounts = cartCounts;
302
+ },
303
+ setCurrentCategory: (state, action) => {
304
+ state.currentCategory = action.payload;
305
+ },
306
+ addItemToCart: (state, action) => {
307
+ const currentCart = state.cart !== null ? state.cart : [];
308
+ const { cart, cartCounts } = (0, utils_1.addItem)([...currentCart], action.payload);
309
+ state.cart = cart;
310
+ state.cartCounts = cartCounts;
311
+ },
312
+ removeItemFromCart: (state, action) => {
313
+ const { index } = action.payload;
314
+ const currentCart = state.cart !== null ? state.cart : [];
315
+ const { cart, cartCounts } = (0, utils_1.removeItem)([...currentCart], index);
316
+ state.cart = cart;
317
+ state.cartCounts = cartCounts;
318
+ },
319
+ incrementItemInCart: (state, action) => {
320
+ const { index } = action.payload;
321
+ const currentCart = state.cart !== null ? state.cart : [];
322
+ const { cart, cartCounts } = (0, utils_1.incrementItem)([...currentCart], index);
323
+ state.cart = cart;
324
+ state.cartCounts = cartCounts;
325
+ },
326
+ decrementItemInCart: (state, action) => {
327
+ const { index } = action.payload;
328
+ const currentCart = state.cart !== null ? state.cart : [];
329
+ const { cart, cartCounts } = (0, utils_1.decrementItem)([...currentCart], index);
330
+ state.cart = cart;
331
+ state.cartCounts = cartCounts;
332
+ },
333
+ addMessage: (state, action) => {
334
+ const existing = state.messages.map(i => i.message);
335
+ if (existing.includes(action.payload)) {
336
+ // do nothing
337
+ return;
338
+ }
339
+ state.messages = [
340
+ ...state.messages,
341
+ {
342
+ message: action.payload,
343
+ id: (0, utils_1.makeRandomNumberString)()
344
+ }
345
+ ];
346
+ },
347
+ removeMessage: (state, action) => {
348
+ state.messages = state.messages.filter(i => i.id !== action.payload);
349
+ }
350
+ },
351
+ extraReducers: builder => {
352
+ builder
353
+ .addCase(exports.fetchRevenueCenter.fulfilled, state => {
354
+ state.loading = 'idle';
355
+ state.error = null;
356
+ })
357
+ .addCase(exports.fetchRevenueCenter.pending, state => {
358
+ state.loading = 'pending';
359
+ })
360
+ .addCase(exports.fetchRevenueCenter.rejected, (state, action) => {
361
+ state.error = action.payload;
362
+ state.loading = 'idle';
363
+ })
364
+ .addCase(exports.fetchLocation.fulfilled, state => {
365
+ state.loading = 'idle';
366
+ state.error = null;
367
+ })
368
+ .addCase(exports.fetchLocation.pending, state => {
369
+ state.loading = 'pending';
370
+ })
371
+ .addCase(exports.fetchLocation.rejected, (state, action) => {
372
+ state.error = action.payload;
373
+ state.loading = 'idle';
374
+ })
375
+ .addCase(exports.revertMenu.fulfilled, state => {
376
+ state.loading = 'idle';
377
+ state.error = null;
378
+ })
379
+ .addCase(exports.revertMenu.pending, state => {
380
+ state.loading = 'pending';
381
+ })
382
+ .addCase(exports.revertMenu.rejected, (state, action) => {
383
+ state.error = action.payload;
384
+ state.loading = 'idle';
385
+ })
386
+ .addCase(exports.refreshRevenueCenter.fulfilled, (state, action) => {
387
+ state.alert = action.payload;
388
+ state.loading = 'idle';
389
+ state.error = null;
390
+ })
391
+ .addCase(exports.refreshRevenueCenter.pending, state => {
392
+ state.loading = 'pending';
393
+ })
394
+ .addCase(exports.refreshRevenueCenter.rejected, (state, action) => {
395
+ state.error = action.payload;
396
+ state.loading = 'idle';
397
+ })
398
+ .addCase(exports.editOrder.fulfilled, (state, action) => {
399
+ state = Object.assign(Object.assign(Object.assign({}, state), action.payload), { loading: 'idle', error: null });
400
+ })
401
+ .addCase(exports.editOrder.pending, state => {
402
+ state.loading = 'pending';
403
+ })
404
+ .addCase(exports.editOrder.rejected, state => {
405
+ state.loading = 'idle';
406
+ })
407
+ .addCase(exports.reorderPastOrder.fulfilled, (state, action) => {
408
+ state = Object.assign(Object.assign(Object.assign({}, state), action.payload), { loading: 'idle', error: null });
409
+ })
410
+ .addCase(exports.reorderPastOrder.pending, state => {
411
+ state.loading = 'pending';
412
+ })
413
+ .addCase(exports.reorderPastOrder.rejected, state => {
414
+ state.loading = 'idle';
415
+ });
416
+ }
417
+ });
418
+ _a = orderSlice.actions, exports.resetOrder = _a.resetOrder, exports.addItemToCart = _a.addItemToCart, exports.addMessage = _a.addMessage, exports.decrementItemInCart = _a.decrementItemInCart, exports.incrementItemInCart = _a.incrementItemInCart, exports.removeItemFromCart = _a.removeItemFromCart, exports.removeMessage = _a.removeMessage, exports.resetAlert = _a.resetAlert, exports.resetCart = _a.resetCart, exports.resetLocation = _a.resetLocation, exports.resetMessages = _a.resetMessages, exports.resetOrderType = _a.resetOrderType, exports.resetRevenueCenter = _a.resetRevenueCenter, exports.setAddress = _a.setAddress, exports.setAlert = _a.setAlert, exports.setCart = _a.setCart, exports.setCurbside = _a.setCurbside, exports.setCurrentCategory = _a.setCurrentCategory, exports.setDeviceType = _a.setDeviceType, exports.setMenuVars = _a.setMenuVars, exports.setOrderId = _a.setOrderId, exports.setOrderServiceType = _a.setOrderServiceType, exports.setOrderType = _a.setOrderType, exports.setPrepType = _a.setPrepType, exports.setRequestedAt = _a.setRequestedAt, exports.setRevenueCenter = _a.setRevenueCenter, exports.setServiceType = _a.setServiceType, exports.setTable = _a.setTable;
419
+ const selectTimezone = (state) => {
420
+ var _a;
421
+ return state.order.revenueCenter
422
+ ? utils_1.timezoneMap[(_a = state.order.revenueCenter.timezone) !== null && _a !== void 0 ? _a : 'US/Central']
423
+ : (0, utils_1.getUserTimezone)();
424
+ };
425
+ exports.selectTimezone = selectTimezone;
426
+ exports.orderReducer = orderSlice.reducer;
@@ -0,0 +1,29 @@
1
+ import { AppState } from '../app';
2
+ import { OrderFulfillment, RequestError, RequestStatus } from '@open-tender/types';
3
+ export interface OrderFulfillmentState {
4
+ orderFulfillment: OrderFulfillment | null;
5
+ error: RequestError;
6
+ loading: RequestStatus;
7
+ }
8
+ export declare enum OrderFulfillmentActionType {
9
+ FetchOrderFulfillment = "orderFulfillment/fetchOrderFulfillment",
10
+ UpdateOrderFulfillment = "orderFulfillment/updateOrderFulfillment"
11
+ }
12
+ export declare const fetchOrderFulfillment: import("@reduxjs/toolkit").AsyncThunk<OrderFulfillment, number, {
13
+ state: AppState;
14
+ rejectValue: RequestError;
15
+ }>;
16
+ export declare const updateOrderFulfillment: import("@reduxjs/toolkit").AsyncThunk<OrderFulfillment, {
17
+ orderId: number;
18
+ data: OrderFulfillment;
19
+ }, {
20
+ state: AppState;
21
+ rejectValue: any;
22
+ }>;
23
+ export declare const resetOrderFulfillment: import("@reduxjs/toolkit").ActionCreatorWithoutPayload<string>;
24
+ export declare const selectOrderFulfillment: (state: AppState) => {
25
+ orderFulfillment: OrderFulfillment | null;
26
+ loading: RequestStatus;
27
+ error: RequestError;
28
+ };
29
+ export declare const orderFulfillmentReducer: import("redux").Reducer<OrderFulfillmentState, import("redux").AnyAction>;
@@ -0,0 +1,83 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.orderFulfillmentReducer = exports.selectOrderFulfillment = exports.resetOrderFulfillment = exports.updateOrderFulfillment = exports.fetchOrderFulfillment = exports.OrderFulfillmentActionType = void 0;
4
+ const tslib_1 = require("tslib");
5
+ const toolkit_1 = require("@reduxjs/toolkit");
6
+ const types_1 = require("./types");
7
+ const utils_1 = require("@open-tender/utils");
8
+ const initialState = {
9
+ orderFulfillment: null,
10
+ loading: 'idle',
11
+ error: null
12
+ };
13
+ var OrderFulfillmentActionType;
14
+ (function (OrderFulfillmentActionType) {
15
+ OrderFulfillmentActionType["FetchOrderFulfillment"] = "orderFulfillment/fetchOrderFulfillment";
16
+ OrderFulfillmentActionType["UpdateOrderFulfillment"] = "orderFulfillment/updateOrderFulfillment";
17
+ })(OrderFulfillmentActionType = exports.OrderFulfillmentActionType || (exports.OrderFulfillmentActionType = {}));
18
+ exports.fetchOrderFulfillment = (0, toolkit_1.createAsyncThunk)(OrderFulfillmentActionType.FetchOrderFulfillment, (orderId, { getState, rejectWithValue }) => tslib_1.__awaiter(void 0, void 0, void 0, function* () {
19
+ const { api } = getState().config;
20
+ if (!api)
21
+ return;
22
+ try {
23
+ const response = yield api.getOrderFulfillment(orderId);
24
+ return response;
25
+ }
26
+ catch (err) {
27
+ return rejectWithValue(err);
28
+ }
29
+ }));
30
+ exports.updateOrderFulfillment = (0, toolkit_1.createAsyncThunk)(OrderFulfillmentActionType.UpdateOrderFulfillment, (requestData, { getState, rejectWithValue }) => tslib_1.__awaiter(void 0, void 0, void 0, function* () {
31
+ const { api } = getState().config;
32
+ if (!api)
33
+ return;
34
+ try {
35
+ const response = yield api.putOrderFulfillment(requestData.orderId, requestData.data);
36
+ return response;
37
+ }
38
+ catch (err) {
39
+ const errors = (0, utils_1.makeFormErrors)(err);
40
+ return rejectWithValue(errors);
41
+ }
42
+ }));
43
+ const orderFulfillmentSlice = (0, toolkit_1.createSlice)({
44
+ name: types_1.ReducerType.OrderFulfillment,
45
+ initialState,
46
+ reducers: {
47
+ resetOrderFulfillment: () => initialState
48
+ },
49
+ extraReducers: builder => {
50
+ builder
51
+ .addCase(exports.fetchOrderFulfillment.fulfilled, (state, action) => {
52
+ state.orderFulfillment = action.payload;
53
+ state.loading = 'idle';
54
+ state.error = null;
55
+ })
56
+ .addCase(exports.fetchOrderFulfillment.pending, state => {
57
+ state.loading = 'pending';
58
+ })
59
+ .addCase(exports.fetchOrderFulfillment.rejected, (state, action) => {
60
+ state.error = action.payload;
61
+ state.loading = 'idle';
62
+ })
63
+ .addCase(exports.updateOrderFulfillment.fulfilled, (state, action) => {
64
+ state.orderFulfillment = action.payload;
65
+ state.loading = 'idle';
66
+ state.error = null;
67
+ })
68
+ .addCase(exports.updateOrderFulfillment.pending, state => {
69
+ state.loading = 'pending';
70
+ })
71
+ .addCase(exports.updateOrderFulfillment.rejected, (state, action) => {
72
+ state.error = action.payload;
73
+ state.loading = 'idle';
74
+ });
75
+ }
76
+ });
77
+ exports.resetOrderFulfillment = orderFulfillmentSlice.actions.resetOrderFulfillment;
78
+ const selectOrderFulfillment = (state) => {
79
+ const { orderFulfillment, loading, error } = state.orderFulfillment;
80
+ return { orderFulfillment, loading, error };
81
+ };
82
+ exports.selectOrderFulfillment = selectOrderFulfillment;
83
+ exports.orderFulfillmentReducer = orderFulfillmentSlice.reducer;
@@ -0,0 +1,34 @@
1
+ import { AppState } from '../app';
2
+ import { OrderRating, RequestError, RequestStatus } from '@open-tender/types';
3
+ export interface OrderRatingState {
4
+ orderRating: OrderRating | null;
5
+ error: RequestError;
6
+ loading: RequestStatus;
7
+ }
8
+ export declare enum OrderRatingActionType {
9
+ FetchOrderRating = "orderRating/fetchOrderRating",
10
+ UpdateOrderRating = "orderRating/updateOrderRating",
11
+ UnsubscribeOrderRating = "orderRating/unsubscribeOrderRating"
12
+ }
13
+ export declare const fetchOrderRating: import("@reduxjs/toolkit").AsyncThunk<OrderRating, number, {
14
+ state: AppState;
15
+ rejectValue: RequestError;
16
+ }>;
17
+ export declare const updateOrderRating: import("@reduxjs/toolkit").AsyncThunk<OrderRating, {
18
+ orderId: number;
19
+ data: OrderRating;
20
+ }, {
21
+ state: AppState;
22
+ rejectValue: any;
23
+ }>;
24
+ export declare const unsubscribeOrderRating: import("@reduxjs/toolkit").AsyncThunk<void, number, {
25
+ state: AppState;
26
+ rejectValue: any;
27
+ }>;
28
+ export declare const resetOrderRating: import("@reduxjs/toolkit").ActionCreatorWithoutPayload<string>;
29
+ export declare const selectOrderRating: (state: AppState) => {
30
+ orderRating: OrderRating | null;
31
+ loading: RequestStatus;
32
+ error: RequestError;
33
+ };
34
+ export declare const orderRatingReducer: import("redux").Reducer<OrderRatingState, import("redux").AnyAction>;
@@ -0,0 +1,108 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.orderRatingReducer = exports.selectOrderRating = exports.resetOrderRating = exports.unsubscribeOrderRating = exports.updateOrderRating = exports.fetchOrderRating = exports.OrderRatingActionType = void 0;
4
+ const tslib_1 = require("tslib");
5
+ const toolkit_1 = require("@reduxjs/toolkit");
6
+ const types_1 = require("./types");
7
+ const utils_1 = require("@open-tender/utils");
8
+ const initialState = {
9
+ orderRating: null,
10
+ loading: 'idle',
11
+ error: null
12
+ };
13
+ var OrderRatingActionType;
14
+ (function (OrderRatingActionType) {
15
+ OrderRatingActionType["FetchOrderRating"] = "orderRating/fetchOrderRating";
16
+ OrderRatingActionType["UpdateOrderRating"] = "orderRating/updateOrderRating";
17
+ OrderRatingActionType["UnsubscribeOrderRating"] = "orderRating/unsubscribeOrderRating";
18
+ })(OrderRatingActionType = exports.OrderRatingActionType || (exports.OrderRatingActionType = {}));
19
+ exports.fetchOrderRating = (0, toolkit_1.createAsyncThunk)(OrderRatingActionType.FetchOrderRating, (ratingUuid, { getState, rejectWithValue }) => tslib_1.__awaiter(void 0, void 0, void 0, function* () {
20
+ const { api } = getState().config;
21
+ if (!api)
22
+ return;
23
+ try {
24
+ const response = yield api.getOrderRating(ratingUuid);
25
+ return response;
26
+ }
27
+ catch (err) {
28
+ return rejectWithValue(err);
29
+ }
30
+ }));
31
+ exports.updateOrderRating = (0, toolkit_1.createAsyncThunk)(OrderRatingActionType.UpdateOrderRating, (requestData, { getState, rejectWithValue }) => tslib_1.__awaiter(void 0, void 0, void 0, function* () {
32
+ const { api } = getState().config;
33
+ if (!api)
34
+ return;
35
+ try {
36
+ const response = yield api.putOrderRating(requestData.orderId, requestData.data);
37
+ return response;
38
+ }
39
+ catch (err) {
40
+ const errors = (0, utils_1.makeFormErrors)(err);
41
+ return rejectWithValue(errors);
42
+ }
43
+ }));
44
+ exports.unsubscribeOrderRating = (0, toolkit_1.createAsyncThunk)(OrderRatingActionType.UnsubscribeOrderRating, (ratingUuid, { getState, rejectWithValue }) => tslib_1.__awaiter(void 0, void 0, void 0, function* () {
45
+ const { api } = getState().config;
46
+ if (!api)
47
+ return;
48
+ try {
49
+ yield api.postOrderRatingUnsubscribe(ratingUuid);
50
+ return;
51
+ }
52
+ catch (err) {
53
+ return rejectWithValue(err);
54
+ }
55
+ }));
56
+ const orderRatingSlice = (0, toolkit_1.createSlice)({
57
+ name: types_1.ReducerType.OrderRating,
58
+ initialState,
59
+ reducers: {
60
+ resetOrderRating: () => initialState
61
+ },
62
+ extraReducers: builder => {
63
+ builder
64
+ .addCase(exports.fetchOrderRating.fulfilled, (state, action) => {
65
+ state.orderRating = action.payload;
66
+ state.loading = 'idle';
67
+ state.error = null;
68
+ })
69
+ .addCase(exports.fetchOrderRating.pending, state => {
70
+ state.loading = 'pending';
71
+ })
72
+ .addCase(exports.fetchOrderRating.rejected, (state, action) => {
73
+ state.error = action.payload;
74
+ state.loading = 'idle';
75
+ })
76
+ .addCase(exports.updateOrderRating.fulfilled, (state, action) => {
77
+ state.orderRating = action.payload;
78
+ state.loading = 'idle';
79
+ state.error = null;
80
+ })
81
+ .addCase(exports.updateOrderRating.pending, state => {
82
+ state.loading = 'pending';
83
+ })
84
+ .addCase(exports.updateOrderRating.rejected, (state, action) => {
85
+ state.error = action.payload;
86
+ state.loading = 'idle';
87
+ })
88
+ .addCase(exports.unsubscribeOrderRating.fulfilled, state => {
89
+ state.orderRating = null;
90
+ state.loading = 'idle';
91
+ state.error = null;
92
+ })
93
+ .addCase(exports.unsubscribeOrderRating.pending, state => {
94
+ state.loading = 'pending';
95
+ })
96
+ .addCase(exports.unsubscribeOrderRating.rejected, (state, action) => {
97
+ state.error = action.payload;
98
+ state.loading = 'idle';
99
+ });
100
+ }
101
+ });
102
+ exports.resetOrderRating = orderRatingSlice.actions.resetOrderRating;
103
+ const selectOrderRating = (state) => {
104
+ const { orderRating, loading, error } = state.orderRating;
105
+ return { orderRating, loading, error };
106
+ };
107
+ exports.selectOrderRating = selectOrderRating;
108
+ exports.orderRatingReducer = orderRatingSlice.reducer;