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