@open-tender/cloud 0.1.78 → 0.1.80

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.
@@ -1,5 +1,5 @@
1
1
  import { AppState } from '../../app';
2
- import { Favorite, Favorites, FavoritesLookup, RequestError, RequestStatus, SimpleCart } from '@open-tender/types';
2
+ import { Favorite, Favorites, FavoritesLookup, RequestError, RequestStatus, SimpleCartItem } from '@open-tender/types';
3
3
  export interface CustomerFavoritesState {
4
4
  entities: Favorites;
5
5
  error: RequestError;
@@ -50,7 +50,7 @@ export declare const removeCustomerFavorite: import("@reduxjs/toolkit").AsyncThu
50
50
  rejectedMeta?: unknown;
51
51
  }>;
52
52
  export declare const addCustomerFavorite: import("@reduxjs/toolkit").AsyncThunk<Favorites, {
53
- cart: SimpleCart;
53
+ item: SimpleCartItem;
54
54
  name?: string | undefined;
55
55
  callback?: (() => void) | undefined;
56
56
  }, {
@@ -77,13 +77,13 @@ exports.removeCustomerFavorite = (0, toolkit_1.createAsyncThunk)(CustomerFavorit
77
77
  return (0, account_1.checkAuth)(error, dispatch, () => rejectWithValue(error));
78
78
  }
79
79
  }));
80
- exports.addCustomerFavorite = (0, toolkit_1.createAsyncThunk)(CustomerFavoritesActionType.AddCustomerFavorite, ({ cart, name, callback }, { dispatch, getState, rejectWithValue }) => tslib_1.__awaiter(void 0, void 0, void 0, function* () {
80
+ exports.addCustomerFavorite = (0, toolkit_1.createAsyncThunk)(CustomerFavoritesActionType.AddCustomerFavorite, ({ item, name, callback }, { dispatch, getState, rejectWithValue }) => tslib_1.__awaiter(void 0, void 0, void 0, function* () {
81
81
  try {
82
82
  const api = getState().config.api;
83
83
  const token = (0, account_1.selectToken)(getState());
84
84
  if (!token)
85
85
  throw new Error(types_2.MISSING_CUSTOMER);
86
- const data = { cart, name: name || '' };
86
+ const data = { cart: item, name: name || '' };
87
87
  yield api.postCustomerFavorite(token, data);
88
88
  const { data: favorites } = yield api.getCustomerFavorites(token);
89
89
  const lookup = (0, utils_1.makeFavoritesLookup)(favorites);
@@ -106,18 +106,289 @@ export declare const addCustomerGroupOrder: import("@reduxjs/toolkit").AsyncThun
106
106
  export declare const resetGroupOrder: import("@reduxjs/toolkit").ActionCreatorWithoutPayload<"groupOrder/resetGroupOrder">, adjustGroupOrder: import("@reduxjs/toolkit").ActionCreatorWithPayload<any, "groupOrder/adjustGroupOrder">;
107
107
  export declare const selectGroupOrder: (state: AppState) => GroupOrderState;
108
108
  export declare const selectGroupOrderToken: (state: AppState) => string | null;
109
- export declare const selectSpendingLimit: (state: AppState) => number | null;
110
- export declare const selectGroupOrderClosed: (state: AppState) => boolean | null;
111
- export declare const selectGroupOrderTests: (state: AppState) => {
109
+ export declare const selectSpendingLimit: ((state: import("redux").EmptyObject & {
110
+ alerts: import("@open-tender/types").Alerts;
111
+ allergens: import("./allergens").AllergensState;
112
+ announcements: import("./announcements").AnnouncementsState;
113
+ checkout: import("./checkout").CheckoutState;
114
+ completedOrders: import("./completedOrders").CompletedOrdersState;
115
+ config: import("./config").ConfigState;
116
+ confirmation: import("./confirmation").ConfirmationState;
117
+ customer: import("redux").CombinedState<{
118
+ account: import("./customer").AccountState;
119
+ communicationPreferences: import("./customer").CustomerCommunicationPrefsState;
120
+ creditCards: import("./customer").CustomerCreditCardsState;
121
+ allergens: import("./customer").CustomerAllergensState;
122
+ addresses: import("./customer").CustomerAddressesState;
123
+ favorites: import("./customer").CustomerFavoritesState;
124
+ fcmToken: import("./customer").CustomerFcmTokenState;
125
+ giftCards: import("./customer").CustomerGiftCardsState;
126
+ groupOrders: import("./customer").CustomerGroupOrdersState;
127
+ houseAccounts: import("./customer").CustomerHouseAccountsState;
128
+ loyalty: import("./customer").CustomerLoyaltyState;
129
+ order: import("./customer").CustomerOrderState;
130
+ orders: import("./customer").CustomerOrdersState;
131
+ pointsShop: import("./customer").PointsShopState;
132
+ qrcode: import("./customer").CustomerQRCodeState;
133
+ rewards: import("./customer").CustomerRewardsState;
134
+ thanx: import("./customer").CustomerThanxState;
135
+ tpls: import("./customer").CustomerTplsState;
136
+ }>;
137
+ deals: import("./deals").DealsState;
138
+ donations: import("./donations").DonationState;
139
+ geolocation: import("./geolocation").GeoLocationState;
140
+ giftCards: import("./giftCards").GiftCardsState;
141
+ groupOrder: GroupOrderState;
142
+ guest: import("./guest").GuestState;
143
+ loader: import("./loader").LoaderState;
144
+ menu: import("./menu").MenuState;
145
+ menuDisplay: import("./menuDisplay").MenuDisplayState;
146
+ menuItems: import("./menuItems").MenuItemsState;
147
+ modal: import("@open-tender/types").Modal;
148
+ misc: import("./misc").MiscState;
149
+ nav: import("./nav").NavState;
150
+ navSite: import("./navSite").NavSiteState;
151
+ notifications: import("@open-tender/types").Notifications;
152
+ oneTimePasscode: import("./oneTimePasscode").OneTimePasscodeState;
153
+ order: import("./order").OrderState;
154
+ orderFulfillment: import("./orderFulfillment").OrderFulfillmentState;
155
+ orderRating: import("./orderRating").OrderRatingState;
156
+ posts: import("./posts").PostsSlice;
157
+ qr: import("./qr").QrState;
158
+ resetPassword: import("./resetPassword").ResetPasswordState;
159
+ revenueCenters: import("./revenueCenters").RevenueCentersState;
160
+ sidebar: import("./sidebar").SidebarState;
161
+ sidebarModal: import("./sidebarModal").SidebarModalState;
162
+ signUp: import("./signUp").SignUpState;
163
+ tags: import("./tags").TagsState;
164
+ validTimes: import("./validTimes").ValidTimesState;
165
+ verifyAccount: import("./verifyAccount").VerifyAccountState;
166
+ }) => number | null) & import("reselect").OutputSelectorFields<(args_0: {
167
+ cartGuest: GroupOrderGuestState | null;
168
+ spendingLimit: string | null;
169
+ }) => number | null, {
170
+ clearCache: () => void;
171
+ }> & {
172
+ clearCache: () => void;
173
+ };
174
+ export declare const selectGroupOrderClosed: ((state: import("redux").EmptyObject & {
175
+ alerts: import("@open-tender/types").Alerts;
176
+ allergens: import("./allergens").AllergensState;
177
+ announcements: import("./announcements").AnnouncementsState;
178
+ checkout: import("./checkout").CheckoutState;
179
+ completedOrders: import("./completedOrders").CompletedOrdersState;
180
+ config: import("./config").ConfigState;
181
+ confirmation: import("./confirmation").ConfirmationState;
182
+ customer: import("redux").CombinedState<{
183
+ account: import("./customer").AccountState;
184
+ communicationPreferences: import("./customer").CustomerCommunicationPrefsState;
185
+ creditCards: import("./customer").CustomerCreditCardsState;
186
+ allergens: import("./customer").CustomerAllergensState;
187
+ addresses: import("./customer").CustomerAddressesState;
188
+ favorites: import("./customer").CustomerFavoritesState;
189
+ fcmToken: import("./customer").CustomerFcmTokenState;
190
+ giftCards: import("./customer").CustomerGiftCardsState;
191
+ groupOrders: import("./customer").CustomerGroupOrdersState;
192
+ houseAccounts: import("./customer").CustomerHouseAccountsState;
193
+ loyalty: import("./customer").CustomerLoyaltyState;
194
+ order: import("./customer").CustomerOrderState;
195
+ orders: import("./customer").CustomerOrdersState;
196
+ pointsShop: import("./customer").PointsShopState;
197
+ qrcode: import("./customer").CustomerQRCodeState;
198
+ rewards: import("./customer").CustomerRewardsState;
199
+ thanx: import("./customer").CustomerThanxState;
200
+ tpls: import("./customer").CustomerTplsState;
201
+ }>;
202
+ deals: import("./deals").DealsState;
203
+ donations: import("./donations").DonationState;
204
+ geolocation: import("./geolocation").GeoLocationState;
205
+ giftCards: import("./giftCards").GiftCardsState;
206
+ groupOrder: GroupOrderState;
207
+ guest: import("./guest").GuestState;
208
+ loader: import("./loader").LoaderState;
209
+ menu: import("./menu").MenuState;
210
+ menuDisplay: import("./menuDisplay").MenuDisplayState;
211
+ menuItems: import("./menuItems").MenuItemsState;
212
+ modal: import("@open-tender/types").Modal;
213
+ misc: import("./misc").MiscState;
214
+ nav: import("./nav").NavState;
215
+ navSite: import("./navSite").NavSiteState;
216
+ notifications: import("@open-tender/types").Notifications;
217
+ oneTimePasscode: import("./oneTimePasscode").OneTimePasscodeState;
218
+ order: import("./order").OrderState;
219
+ orderFulfillment: import("./orderFulfillment").OrderFulfillmentState;
220
+ orderRating: import("./orderRating").OrderRatingState;
221
+ posts: import("./posts").PostsSlice;
222
+ qr: import("./qr").QrState;
223
+ resetPassword: import("./resetPassword").ResetPasswordState;
224
+ revenueCenters: import("./revenueCenters").RevenueCentersState;
225
+ sidebar: import("./sidebar").SidebarState;
226
+ sidebarModal: import("./sidebarModal").SidebarModalState;
227
+ signUp: import("./signUp").SignUpState;
228
+ tags: import("./tags").TagsState;
229
+ validTimes: import("./validTimes").ValidTimesState;
230
+ verifyAccount: import("./verifyAccount").VerifyAccountState;
231
+ }) => boolean | null) & import("reselect").OutputSelectorFields<(args_0: {
232
+ cartGuest: GroupOrderGuestState | null;
233
+ cutoffAt: `${number}${number}${number}${number}-${number}${number}-${number}${number}T${number}${number}:${number}${number}:${number}${number}Z` | null;
234
+ closed: boolean;
235
+ tz: import("@open-tender/types").Timezone;
236
+ }) => boolean | null, {
237
+ clearCache: () => void;
238
+ }> & {
239
+ clearCache: () => void;
240
+ };
241
+ export declare const selectGroupOrderTests: ((state: import("redux").EmptyObject & {
242
+ alerts: import("@open-tender/types").Alerts;
243
+ allergens: import("./allergens").AllergensState;
244
+ announcements: import("./announcements").AnnouncementsState;
245
+ checkout: import("./checkout").CheckoutState;
246
+ completedOrders: import("./completedOrders").CompletedOrdersState;
247
+ config: import("./config").ConfigState;
248
+ confirmation: import("./confirmation").ConfirmationState;
249
+ customer: import("redux").CombinedState<{
250
+ account: import("./customer").AccountState;
251
+ communicationPreferences: import("./customer").CustomerCommunicationPrefsState;
252
+ creditCards: import("./customer").CustomerCreditCardsState;
253
+ allergens: import("./customer").CustomerAllergensState;
254
+ addresses: import("./customer").CustomerAddressesState;
255
+ favorites: import("./customer").CustomerFavoritesState;
256
+ fcmToken: import("./customer").CustomerFcmTokenState;
257
+ giftCards: import("./customer").CustomerGiftCardsState;
258
+ groupOrders: import("./customer").CustomerGroupOrdersState;
259
+ houseAccounts: import("./customer").CustomerHouseAccountsState;
260
+ loyalty: import("./customer").CustomerLoyaltyState;
261
+ order: import("./customer").CustomerOrderState;
262
+ orders: import("./customer").CustomerOrdersState;
263
+ pointsShop: import("./customer").PointsShopState;
264
+ qrcode: import("./customer").CustomerQRCodeState;
265
+ rewards: import("./customer").CustomerRewardsState;
266
+ thanx: import("./customer").CustomerThanxState;
267
+ tpls: import("./customer").CustomerTplsState;
268
+ }>;
269
+ deals: import("./deals").DealsState;
270
+ donations: import("./donations").DonationState;
271
+ geolocation: import("./geolocation").GeoLocationState;
272
+ giftCards: import("./giftCards").GiftCardsState;
273
+ groupOrder: GroupOrderState;
274
+ guest: import("./guest").GuestState;
275
+ loader: import("./loader").LoaderState;
276
+ menu: import("./menu").MenuState;
277
+ menuDisplay: import("./menuDisplay").MenuDisplayState;
278
+ menuItems: import("./menuItems").MenuItemsState;
279
+ modal: import("@open-tender/types").Modal;
280
+ misc: import("./misc").MiscState;
281
+ nav: import("./nav").NavState;
282
+ navSite: import("./navSite").NavSiteState;
283
+ notifications: import("@open-tender/types").Notifications;
284
+ oneTimePasscode: import("./oneTimePasscode").OneTimePasscodeState;
285
+ order: import("./order").OrderState;
286
+ orderFulfillment: import("./orderFulfillment").OrderFulfillmentState;
287
+ orderRating: import("./orderRating").OrderRatingState;
288
+ posts: import("./posts").PostsSlice;
289
+ qr: import("./qr").QrState;
290
+ resetPassword: import("./resetPassword").ResetPasswordState;
291
+ revenueCenters: import("./revenueCenters").RevenueCentersState;
292
+ sidebar: import("./sidebar").SidebarState;
293
+ sidebarModal: import("./sidebarModal").SidebarModalState;
294
+ signUp: import("./signUp").SignUpState;
295
+ tags: import("./tags").TagsState;
296
+ validTimes: import("./validTimes").ValidTimesState;
297
+ verifyAccount: import("./verifyAccount").VerifyAccountState;
298
+ }) => {
299
+ closed: boolean;
300
+ pastCutoff: boolean;
301
+ atCapacity: boolean;
302
+ }) & import("reselect").OutputSelectorFields<(args_0: {
303
+ closed: boolean;
304
+ cutoffAt: `${number}${number}${number}${number}-${number}${number}-${number}${number}T${number}${number}:${number}${number}:${number}${number}Z` | null;
305
+ guestLimit: number | null;
306
+ guestCount: number | null;
307
+ tz: import("@open-tender/types").Timezone;
308
+ }) => {
112
309
  closed: boolean;
113
310
  pastCutoff: boolean;
114
311
  atCapacity: boolean;
312
+ }, {
313
+ clearCache: () => void;
314
+ }> & {
315
+ clearCache: () => void;
115
316
  };
116
- export declare const selectGroupOrderPrepTimes: (state: AppState) => {
317
+ export declare const selectGroupOrderPrepTimes: ((state: import("redux").EmptyObject & {
318
+ alerts: import("@open-tender/types").Alerts;
319
+ allergens: import("./allergens").AllergensState;
320
+ announcements: import("./announcements").AnnouncementsState;
321
+ checkout: import("./checkout").CheckoutState;
322
+ completedOrders: import("./completedOrders").CompletedOrdersState;
323
+ config: import("./config").ConfigState;
324
+ confirmation: import("./confirmation").ConfirmationState;
325
+ customer: import("redux").CombinedState<{
326
+ account: import("./customer").AccountState;
327
+ communicationPreferences: import("./customer").CustomerCommunicationPrefsState;
328
+ creditCards: import("./customer").CustomerCreditCardsState;
329
+ allergens: import("./customer").CustomerAllergensState;
330
+ addresses: import("./customer").CustomerAddressesState;
331
+ favorites: import("./customer").CustomerFavoritesState;
332
+ fcmToken: import("./customer").CustomerFcmTokenState;
333
+ giftCards: import("./customer").CustomerGiftCardsState;
334
+ groupOrders: import("./customer").CustomerGroupOrdersState;
335
+ houseAccounts: import("./customer").CustomerHouseAccountsState;
336
+ loyalty: import("./customer").CustomerLoyaltyState;
337
+ order: import("./customer").CustomerOrderState;
338
+ orders: import("./customer").CustomerOrdersState;
339
+ pointsShop: import("./customer").PointsShopState;
340
+ qrcode: import("./customer").CustomerQRCodeState;
341
+ rewards: import("./customer").CustomerRewardsState;
342
+ thanx: import("./customer").CustomerThanxState;
343
+ tpls: import("./customer").CustomerTplsState;
344
+ }>;
345
+ deals: import("./deals").DealsState;
346
+ donations: import("./donations").DonationState;
347
+ geolocation: import("./geolocation").GeoLocationState;
348
+ giftCards: import("./giftCards").GiftCardsState;
349
+ groupOrder: GroupOrderState;
350
+ guest: import("./guest").GuestState;
351
+ loader: import("./loader").LoaderState;
352
+ menu: import("./menu").MenuState;
353
+ menuDisplay: import("./menuDisplay").MenuDisplayState;
354
+ menuItems: import("./menuItems").MenuItemsState;
355
+ modal: import("@open-tender/types").Modal;
356
+ misc: import("./misc").MiscState;
357
+ nav: import("./nav").NavState;
358
+ navSite: import("./navSite").NavSiteState;
359
+ notifications: import("@open-tender/types").Notifications;
360
+ oneTimePasscode: import("./oneTimePasscode").OneTimePasscodeState;
361
+ order: import("./order").OrderState;
362
+ orderFulfillment: import("./orderFulfillment").OrderFulfillmentState;
363
+ orderRating: import("./orderRating").OrderRatingState;
364
+ posts: import("./posts").PostsSlice;
365
+ qr: import("./qr").QrState;
366
+ resetPassword: import("./resetPassword").ResetPasswordState;
367
+ revenueCenters: import("./revenueCenters").RevenueCentersState;
368
+ sidebar: import("./sidebar").SidebarState;
369
+ sidebarModal: import("./sidebarModal").SidebarModalState;
370
+ signUp: import("./signUp").SignUpState;
371
+ tags: import("./tags").TagsState;
372
+ validTimes: import("./validTimes").ValidTimesState;
373
+ verifyAccount: import("./verifyAccount").VerifyAccountState;
374
+ }) => {
117
375
  prepTime?: undefined;
118
376
  leadTime?: undefined;
119
377
  } | {
120
378
  prepTime: number;
121
379
  leadTime: number;
380
+ }) & import("reselect").OutputSelectorFields<(args_0: {
381
+ revenueCenter: import("@open-tender/types").RevenueCenter | null;
382
+ serviceType: ServiceType | null;
383
+ }) => {
384
+ prepTime?: undefined;
385
+ leadTime?: undefined;
386
+ } | {
387
+ prepTime: number;
388
+ leadTime: number;
389
+ }, {
390
+ clearCache: () => void;
391
+ }> & {
392
+ clearCache: () => void;
122
393
  };
123
394
  export declare const groupOrderReducer: import("redux").Reducer<GroupOrderState, import("redux").AnyAction>;
@@ -224,31 +224,36 @@ const selectGroupOrder = (state) => state.groupOrder;
224
224
  exports.selectGroupOrder = selectGroupOrder;
225
225
  const selectGroupOrderToken = (state) => state.groupOrder.token;
226
226
  exports.selectGroupOrderToken = selectGroupOrderToken;
227
- const selectSpendingLimit = (state) => {
227
+ exports.selectSpendingLimit = (0, toolkit_1.createSelector)((state) => {
228
228
  const { cartGuest, spendingLimit } = state.groupOrder;
229
+ return { cartGuest, spendingLimit };
230
+ }, ({ cartGuest, spendingLimit }) => {
229
231
  return cartGuest && spendingLimit ? parseFloat(spendingLimit) : null;
230
- };
231
- exports.selectSpendingLimit = selectSpendingLimit;
232
- const selectGroupOrderClosed = (state) => {
232
+ });
233
+ exports.selectGroupOrderClosed = (0, toolkit_1.createSelector)((state) => {
233
234
  const { cartGuest, cutoffAt, closed } = state.groupOrder;
234
235
  const tz = (0, order_1.selectTimezone)(state);
236
+ return { cartGuest, cutoffAt, closed, tz };
237
+ }, ({ cartGuest, cutoffAt, closed, tz }) => {
235
238
  const cutoffDate = cutoffAt ? (0, utils_1.isoToDate)(cutoffAt, tz) : null;
236
239
  const pastCutoff = cutoffDate ? new Date() > cutoffDate : false;
237
240
  return cartGuest && (closed || pastCutoff);
238
- };
239
- exports.selectGroupOrderClosed = selectGroupOrderClosed;
240
- const selectGroupOrderTests = (state) => {
241
+ });
242
+ exports.selectGroupOrderTests = (0, toolkit_1.createSelector)((state) => {
241
243
  const { closed, cutoffAt, guestLimit, guestCount } = state.groupOrder;
242
244
  const tz = (0, order_1.selectTimezone)(state);
245
+ return { closed, cutoffAt, guestLimit, guestCount, tz };
246
+ }, ({ closed, cutoffAt, guestLimit, guestCount, tz }) => {
243
247
  const cutoffDate = cutoffAt ? (0, utils_1.isoToDate)(cutoffAt, tz) : null;
244
248
  const pastCutoff = cutoffDate ? new Date() > cutoffDate : false;
245
249
  const spotsRemaining = guestLimit ? guestLimit - (guestCount !== null && guestCount !== void 0 ? guestCount : 0) : null;
246
250
  const atCapacity = spotsRemaining !== null && spotsRemaining <= 0;
247
251
  return { closed, pastCutoff, atCapacity };
248
- };
249
- exports.selectGroupOrderTests = selectGroupOrderTests;
250
- const selectGroupOrderPrepTimes = (state) => {
252
+ });
253
+ exports.selectGroupOrderPrepTimes = (0, toolkit_1.createSelector)((state) => {
251
254
  const { revenueCenter, serviceType } = state.order;
255
+ return { revenueCenter, serviceType };
256
+ }, ({ revenueCenter, serviceType }) => {
252
257
  if (!revenueCenter || !serviceType)
253
258
  return {};
254
259
  const { wait_times, group_ordering } = revenueCenter;
@@ -257,6 +262,5 @@ const selectGroupOrderPrepTimes = (state) => {
257
262
  const waitTime = wait_times && wait_times[st] ? wait_times[st] : 0;
258
263
  const prepTime = (waitTime !== null && waitTime !== void 0 ? waitTime : 0) + (prep_time !== null && prep_time !== void 0 ? prep_time : 0);
259
264
  return { prepTime, leadTime };
260
- };
261
- exports.selectGroupOrderPrepTimes = selectGroupOrderPrepTimes;
265
+ });
262
266
  exports.groupOrderReducer = groupOrderSlice.reducer;
@@ -1,5 +1,5 @@
1
1
  import { AppState } from '../../app';
2
- import { Favorite, Favorites, FavoritesLookup, RequestError, RequestStatus, SimpleCart } from '@open-tender/types';
2
+ import { Favorite, Favorites, FavoritesLookup, RequestError, RequestStatus, SimpleCartItem } from '@open-tender/types';
3
3
  export interface CustomerFavoritesState {
4
4
  entities: Favorites;
5
5
  error: RequestError;
@@ -50,7 +50,7 @@ export declare const removeCustomerFavorite: import("@reduxjs/toolkit").AsyncThu
50
50
  rejectedMeta?: unknown;
51
51
  }>;
52
52
  export declare const addCustomerFavorite: import("@reduxjs/toolkit").AsyncThunk<Favorites, {
53
- cart: SimpleCart;
53
+ item: SimpleCartItem;
54
54
  name?: string | undefined;
55
55
  callback?: (() => void) | undefined;
56
56
  }, {
@@ -73,13 +73,13 @@ export const removeCustomerFavorite = createAsyncThunk(CustomerFavoritesActionTy
73
73
  return checkAuth(error, dispatch, () => rejectWithValue(error));
74
74
  }
75
75
  }));
76
- export const addCustomerFavorite = createAsyncThunk(CustomerFavoritesActionType.AddCustomerFavorite, ({ cart, name, callback }, { dispatch, getState, rejectWithValue }) => __awaiter(void 0, void 0, void 0, function* () {
76
+ export const addCustomerFavorite = createAsyncThunk(CustomerFavoritesActionType.AddCustomerFavorite, ({ item, name, callback }, { dispatch, getState, rejectWithValue }) => __awaiter(void 0, void 0, void 0, function* () {
77
77
  try {
78
78
  const api = getState().config.api;
79
79
  const token = selectToken(getState());
80
80
  if (!token)
81
81
  throw new Error(MISSING_CUSTOMER);
82
- const data = { cart, name: name || '' };
82
+ const data = { cart: item, name: name || '' };
83
83
  yield api.postCustomerFavorite(token, data);
84
84
  const { data: favorites } = yield api.getCustomerFavorites(token);
85
85
  const lookup = makeFavoritesLookup(favorites);
@@ -106,18 +106,289 @@ export declare const addCustomerGroupOrder: import("@reduxjs/toolkit").AsyncThun
106
106
  export declare const resetGroupOrder: import("@reduxjs/toolkit").ActionCreatorWithoutPayload<"groupOrder/resetGroupOrder">, adjustGroupOrder: import("@reduxjs/toolkit").ActionCreatorWithPayload<any, "groupOrder/adjustGroupOrder">;
107
107
  export declare const selectGroupOrder: (state: AppState) => GroupOrderState;
108
108
  export declare const selectGroupOrderToken: (state: AppState) => string | null;
109
- export declare const selectSpendingLimit: (state: AppState) => number | null;
110
- export declare const selectGroupOrderClosed: (state: AppState) => boolean | null;
111
- export declare const selectGroupOrderTests: (state: AppState) => {
109
+ export declare const selectSpendingLimit: ((state: import("redux").EmptyObject & {
110
+ alerts: import("@open-tender/types").Alerts;
111
+ allergens: import("./allergens").AllergensState;
112
+ announcements: import("./announcements").AnnouncementsState;
113
+ checkout: import("./checkout").CheckoutState;
114
+ completedOrders: import("./completedOrders").CompletedOrdersState;
115
+ config: import("./config").ConfigState;
116
+ confirmation: import("./confirmation").ConfirmationState;
117
+ customer: import("redux").CombinedState<{
118
+ account: import("./customer").AccountState;
119
+ communicationPreferences: import("./customer").CustomerCommunicationPrefsState;
120
+ creditCards: import("./customer").CustomerCreditCardsState;
121
+ allergens: import("./customer").CustomerAllergensState;
122
+ addresses: import("./customer").CustomerAddressesState;
123
+ favorites: import("./customer").CustomerFavoritesState;
124
+ fcmToken: import("./customer").CustomerFcmTokenState;
125
+ giftCards: import("./customer").CustomerGiftCardsState;
126
+ groupOrders: import("./customer").CustomerGroupOrdersState;
127
+ houseAccounts: import("./customer").CustomerHouseAccountsState;
128
+ loyalty: import("./customer").CustomerLoyaltyState;
129
+ order: import("./customer").CustomerOrderState;
130
+ orders: import("./customer").CustomerOrdersState;
131
+ pointsShop: import("./customer").PointsShopState;
132
+ qrcode: import("./customer").CustomerQRCodeState;
133
+ rewards: import("./customer").CustomerRewardsState;
134
+ thanx: import("./customer").CustomerThanxState;
135
+ tpls: import("./customer").CustomerTplsState;
136
+ }>;
137
+ deals: import("./deals").DealsState;
138
+ donations: import("./donations").DonationState;
139
+ geolocation: import("./geolocation").GeoLocationState;
140
+ giftCards: import("./giftCards").GiftCardsState;
141
+ groupOrder: GroupOrderState;
142
+ guest: import("./guest").GuestState;
143
+ loader: import("./loader").LoaderState;
144
+ menu: import("./menu").MenuState;
145
+ menuDisplay: import("./menuDisplay").MenuDisplayState;
146
+ menuItems: import("./menuItems").MenuItemsState;
147
+ modal: import("@open-tender/types").Modal;
148
+ misc: import("./misc").MiscState;
149
+ nav: import("./nav").NavState;
150
+ navSite: import("./navSite").NavSiteState;
151
+ notifications: import("@open-tender/types").Notifications;
152
+ oneTimePasscode: import("./oneTimePasscode").OneTimePasscodeState;
153
+ order: import("./order").OrderState;
154
+ orderFulfillment: import("./orderFulfillment").OrderFulfillmentState;
155
+ orderRating: import("./orderRating").OrderRatingState;
156
+ posts: import("./posts").PostsSlice;
157
+ qr: import("./qr").QrState;
158
+ resetPassword: import("./resetPassword").ResetPasswordState;
159
+ revenueCenters: import("./revenueCenters").RevenueCentersState;
160
+ sidebar: import("./sidebar").SidebarState;
161
+ sidebarModal: import("./sidebarModal").SidebarModalState;
162
+ signUp: import("./signUp").SignUpState;
163
+ tags: import("./tags").TagsState;
164
+ validTimes: import("./validTimes").ValidTimesState;
165
+ verifyAccount: import("./verifyAccount").VerifyAccountState;
166
+ }) => number | null) & import("reselect").OutputSelectorFields<(args_0: {
167
+ cartGuest: GroupOrderGuestState | null;
168
+ spendingLimit: string | null;
169
+ }) => number | null, {
170
+ clearCache: () => void;
171
+ }> & {
172
+ clearCache: () => void;
173
+ };
174
+ export declare const selectGroupOrderClosed: ((state: import("redux").EmptyObject & {
175
+ alerts: import("@open-tender/types").Alerts;
176
+ allergens: import("./allergens").AllergensState;
177
+ announcements: import("./announcements").AnnouncementsState;
178
+ checkout: import("./checkout").CheckoutState;
179
+ completedOrders: import("./completedOrders").CompletedOrdersState;
180
+ config: import("./config").ConfigState;
181
+ confirmation: import("./confirmation").ConfirmationState;
182
+ customer: import("redux").CombinedState<{
183
+ account: import("./customer").AccountState;
184
+ communicationPreferences: import("./customer").CustomerCommunicationPrefsState;
185
+ creditCards: import("./customer").CustomerCreditCardsState;
186
+ allergens: import("./customer").CustomerAllergensState;
187
+ addresses: import("./customer").CustomerAddressesState;
188
+ favorites: import("./customer").CustomerFavoritesState;
189
+ fcmToken: import("./customer").CustomerFcmTokenState;
190
+ giftCards: import("./customer").CustomerGiftCardsState;
191
+ groupOrders: import("./customer").CustomerGroupOrdersState;
192
+ houseAccounts: import("./customer").CustomerHouseAccountsState;
193
+ loyalty: import("./customer").CustomerLoyaltyState;
194
+ order: import("./customer").CustomerOrderState;
195
+ orders: import("./customer").CustomerOrdersState;
196
+ pointsShop: import("./customer").PointsShopState;
197
+ qrcode: import("./customer").CustomerQRCodeState;
198
+ rewards: import("./customer").CustomerRewardsState;
199
+ thanx: import("./customer").CustomerThanxState;
200
+ tpls: import("./customer").CustomerTplsState;
201
+ }>;
202
+ deals: import("./deals").DealsState;
203
+ donations: import("./donations").DonationState;
204
+ geolocation: import("./geolocation").GeoLocationState;
205
+ giftCards: import("./giftCards").GiftCardsState;
206
+ groupOrder: GroupOrderState;
207
+ guest: import("./guest").GuestState;
208
+ loader: import("./loader").LoaderState;
209
+ menu: import("./menu").MenuState;
210
+ menuDisplay: import("./menuDisplay").MenuDisplayState;
211
+ menuItems: import("./menuItems").MenuItemsState;
212
+ modal: import("@open-tender/types").Modal;
213
+ misc: import("./misc").MiscState;
214
+ nav: import("./nav").NavState;
215
+ navSite: import("./navSite").NavSiteState;
216
+ notifications: import("@open-tender/types").Notifications;
217
+ oneTimePasscode: import("./oneTimePasscode").OneTimePasscodeState;
218
+ order: import("./order").OrderState;
219
+ orderFulfillment: import("./orderFulfillment").OrderFulfillmentState;
220
+ orderRating: import("./orderRating").OrderRatingState;
221
+ posts: import("./posts").PostsSlice;
222
+ qr: import("./qr").QrState;
223
+ resetPassword: import("./resetPassword").ResetPasswordState;
224
+ revenueCenters: import("./revenueCenters").RevenueCentersState;
225
+ sidebar: import("./sidebar").SidebarState;
226
+ sidebarModal: import("./sidebarModal").SidebarModalState;
227
+ signUp: import("./signUp").SignUpState;
228
+ tags: import("./tags").TagsState;
229
+ validTimes: import("./validTimes").ValidTimesState;
230
+ verifyAccount: import("./verifyAccount").VerifyAccountState;
231
+ }) => boolean | null) & import("reselect").OutputSelectorFields<(args_0: {
232
+ cartGuest: GroupOrderGuestState | null;
233
+ cutoffAt: `${number}${number}${number}${number}-${number}${number}-${number}${number}T${number}${number}:${number}${number}:${number}${number}Z` | null;
234
+ closed: boolean;
235
+ tz: import("@open-tender/types").Timezone;
236
+ }) => boolean | null, {
237
+ clearCache: () => void;
238
+ }> & {
239
+ clearCache: () => void;
240
+ };
241
+ export declare const selectGroupOrderTests: ((state: import("redux").EmptyObject & {
242
+ alerts: import("@open-tender/types").Alerts;
243
+ allergens: import("./allergens").AllergensState;
244
+ announcements: import("./announcements").AnnouncementsState;
245
+ checkout: import("./checkout").CheckoutState;
246
+ completedOrders: import("./completedOrders").CompletedOrdersState;
247
+ config: import("./config").ConfigState;
248
+ confirmation: import("./confirmation").ConfirmationState;
249
+ customer: import("redux").CombinedState<{
250
+ account: import("./customer").AccountState;
251
+ communicationPreferences: import("./customer").CustomerCommunicationPrefsState;
252
+ creditCards: import("./customer").CustomerCreditCardsState;
253
+ allergens: import("./customer").CustomerAllergensState;
254
+ addresses: import("./customer").CustomerAddressesState;
255
+ favorites: import("./customer").CustomerFavoritesState;
256
+ fcmToken: import("./customer").CustomerFcmTokenState;
257
+ giftCards: import("./customer").CustomerGiftCardsState;
258
+ groupOrders: import("./customer").CustomerGroupOrdersState;
259
+ houseAccounts: import("./customer").CustomerHouseAccountsState;
260
+ loyalty: import("./customer").CustomerLoyaltyState;
261
+ order: import("./customer").CustomerOrderState;
262
+ orders: import("./customer").CustomerOrdersState;
263
+ pointsShop: import("./customer").PointsShopState;
264
+ qrcode: import("./customer").CustomerQRCodeState;
265
+ rewards: import("./customer").CustomerRewardsState;
266
+ thanx: import("./customer").CustomerThanxState;
267
+ tpls: import("./customer").CustomerTplsState;
268
+ }>;
269
+ deals: import("./deals").DealsState;
270
+ donations: import("./donations").DonationState;
271
+ geolocation: import("./geolocation").GeoLocationState;
272
+ giftCards: import("./giftCards").GiftCardsState;
273
+ groupOrder: GroupOrderState;
274
+ guest: import("./guest").GuestState;
275
+ loader: import("./loader").LoaderState;
276
+ menu: import("./menu").MenuState;
277
+ menuDisplay: import("./menuDisplay").MenuDisplayState;
278
+ menuItems: import("./menuItems").MenuItemsState;
279
+ modal: import("@open-tender/types").Modal;
280
+ misc: import("./misc").MiscState;
281
+ nav: import("./nav").NavState;
282
+ navSite: import("./navSite").NavSiteState;
283
+ notifications: import("@open-tender/types").Notifications;
284
+ oneTimePasscode: import("./oneTimePasscode").OneTimePasscodeState;
285
+ order: import("./order").OrderState;
286
+ orderFulfillment: import("./orderFulfillment").OrderFulfillmentState;
287
+ orderRating: import("./orderRating").OrderRatingState;
288
+ posts: import("./posts").PostsSlice;
289
+ qr: import("./qr").QrState;
290
+ resetPassword: import("./resetPassword").ResetPasswordState;
291
+ revenueCenters: import("./revenueCenters").RevenueCentersState;
292
+ sidebar: import("./sidebar").SidebarState;
293
+ sidebarModal: import("./sidebarModal").SidebarModalState;
294
+ signUp: import("./signUp").SignUpState;
295
+ tags: import("./tags").TagsState;
296
+ validTimes: import("./validTimes").ValidTimesState;
297
+ verifyAccount: import("./verifyAccount").VerifyAccountState;
298
+ }) => {
299
+ closed: boolean;
300
+ pastCutoff: boolean;
301
+ atCapacity: boolean;
302
+ }) & import("reselect").OutputSelectorFields<(args_0: {
303
+ closed: boolean;
304
+ cutoffAt: `${number}${number}${number}${number}-${number}${number}-${number}${number}T${number}${number}:${number}${number}:${number}${number}Z` | null;
305
+ guestLimit: number | null;
306
+ guestCount: number | null;
307
+ tz: import("@open-tender/types").Timezone;
308
+ }) => {
112
309
  closed: boolean;
113
310
  pastCutoff: boolean;
114
311
  atCapacity: boolean;
312
+ }, {
313
+ clearCache: () => void;
314
+ }> & {
315
+ clearCache: () => void;
115
316
  };
116
- export declare const selectGroupOrderPrepTimes: (state: AppState) => {
317
+ export declare const selectGroupOrderPrepTimes: ((state: import("redux").EmptyObject & {
318
+ alerts: import("@open-tender/types").Alerts;
319
+ allergens: import("./allergens").AllergensState;
320
+ announcements: import("./announcements").AnnouncementsState;
321
+ checkout: import("./checkout").CheckoutState;
322
+ completedOrders: import("./completedOrders").CompletedOrdersState;
323
+ config: import("./config").ConfigState;
324
+ confirmation: import("./confirmation").ConfirmationState;
325
+ customer: import("redux").CombinedState<{
326
+ account: import("./customer").AccountState;
327
+ communicationPreferences: import("./customer").CustomerCommunicationPrefsState;
328
+ creditCards: import("./customer").CustomerCreditCardsState;
329
+ allergens: import("./customer").CustomerAllergensState;
330
+ addresses: import("./customer").CustomerAddressesState;
331
+ favorites: import("./customer").CustomerFavoritesState;
332
+ fcmToken: import("./customer").CustomerFcmTokenState;
333
+ giftCards: import("./customer").CustomerGiftCardsState;
334
+ groupOrders: import("./customer").CustomerGroupOrdersState;
335
+ houseAccounts: import("./customer").CustomerHouseAccountsState;
336
+ loyalty: import("./customer").CustomerLoyaltyState;
337
+ order: import("./customer").CustomerOrderState;
338
+ orders: import("./customer").CustomerOrdersState;
339
+ pointsShop: import("./customer").PointsShopState;
340
+ qrcode: import("./customer").CustomerQRCodeState;
341
+ rewards: import("./customer").CustomerRewardsState;
342
+ thanx: import("./customer").CustomerThanxState;
343
+ tpls: import("./customer").CustomerTplsState;
344
+ }>;
345
+ deals: import("./deals").DealsState;
346
+ donations: import("./donations").DonationState;
347
+ geolocation: import("./geolocation").GeoLocationState;
348
+ giftCards: import("./giftCards").GiftCardsState;
349
+ groupOrder: GroupOrderState;
350
+ guest: import("./guest").GuestState;
351
+ loader: import("./loader").LoaderState;
352
+ menu: import("./menu").MenuState;
353
+ menuDisplay: import("./menuDisplay").MenuDisplayState;
354
+ menuItems: import("./menuItems").MenuItemsState;
355
+ modal: import("@open-tender/types").Modal;
356
+ misc: import("./misc").MiscState;
357
+ nav: import("./nav").NavState;
358
+ navSite: import("./navSite").NavSiteState;
359
+ notifications: import("@open-tender/types").Notifications;
360
+ oneTimePasscode: import("./oneTimePasscode").OneTimePasscodeState;
361
+ order: import("./order").OrderState;
362
+ orderFulfillment: import("./orderFulfillment").OrderFulfillmentState;
363
+ orderRating: import("./orderRating").OrderRatingState;
364
+ posts: import("./posts").PostsSlice;
365
+ qr: import("./qr").QrState;
366
+ resetPassword: import("./resetPassword").ResetPasswordState;
367
+ revenueCenters: import("./revenueCenters").RevenueCentersState;
368
+ sidebar: import("./sidebar").SidebarState;
369
+ sidebarModal: import("./sidebarModal").SidebarModalState;
370
+ signUp: import("./signUp").SignUpState;
371
+ tags: import("./tags").TagsState;
372
+ validTimes: import("./validTimes").ValidTimesState;
373
+ verifyAccount: import("./verifyAccount").VerifyAccountState;
374
+ }) => {
117
375
  prepTime?: undefined;
118
376
  leadTime?: undefined;
119
377
  } | {
120
378
  prepTime: number;
121
379
  leadTime: number;
380
+ }) & import("reselect").OutputSelectorFields<(args_0: {
381
+ revenueCenter: import("@open-tender/types").RevenueCenter | null;
382
+ serviceType: ServiceType | null;
383
+ }) => {
384
+ prepTime?: undefined;
385
+ leadTime?: undefined;
386
+ } | {
387
+ prepTime: number;
388
+ leadTime: number;
389
+ }, {
390
+ clearCache: () => void;
391
+ }> & {
392
+ clearCache: () => void;
122
393
  };
123
394
  export declare const groupOrderReducer: import("redux").Reducer<GroupOrderState, import("redux").AnyAction>;
@@ -1,5 +1,5 @@
1
1
  import { __awaiter } from "tslib";
2
- import { createAsyncThunk, createSlice } from '@reduxjs/toolkit';
2
+ import { createAsyncThunk, createSelector, createSlice } from '@reduxjs/toolkit';
3
3
  import { ReducerType } from './types';
4
4
  import { MISSING_CUSTOMER } from '@open-tender/types';
5
5
  import { isoToDate, makeSimpleCart, rehydrateCart } from '@open-tender/utils';
@@ -217,28 +217,36 @@ const groupOrderSlice = createSlice({
217
217
  export const { resetGroupOrder, adjustGroupOrder } = groupOrderSlice.actions;
218
218
  export const selectGroupOrder = (state) => state.groupOrder;
219
219
  export const selectGroupOrderToken = (state) => state.groupOrder.token;
220
- export const selectSpendingLimit = (state) => {
220
+ export const selectSpendingLimit = createSelector((state) => {
221
221
  const { cartGuest, spendingLimit } = state.groupOrder;
222
+ return { cartGuest, spendingLimit };
223
+ }, ({ cartGuest, spendingLimit }) => {
222
224
  return cartGuest && spendingLimit ? parseFloat(spendingLimit) : null;
223
- };
224
- export const selectGroupOrderClosed = (state) => {
225
+ });
226
+ export const selectGroupOrderClosed = createSelector((state) => {
225
227
  const { cartGuest, cutoffAt, closed } = state.groupOrder;
226
228
  const tz = selectTimezone(state);
229
+ return { cartGuest, cutoffAt, closed, tz };
230
+ }, ({ cartGuest, cutoffAt, closed, tz }) => {
227
231
  const cutoffDate = cutoffAt ? isoToDate(cutoffAt, tz) : null;
228
232
  const pastCutoff = cutoffDate ? new Date() > cutoffDate : false;
229
233
  return cartGuest && (closed || pastCutoff);
230
- };
231
- export const selectGroupOrderTests = (state) => {
234
+ });
235
+ export const selectGroupOrderTests = createSelector((state) => {
232
236
  const { closed, cutoffAt, guestLimit, guestCount } = state.groupOrder;
233
237
  const tz = selectTimezone(state);
238
+ return { closed, cutoffAt, guestLimit, guestCount, tz };
239
+ }, ({ closed, cutoffAt, guestLimit, guestCount, tz }) => {
234
240
  const cutoffDate = cutoffAt ? isoToDate(cutoffAt, tz) : null;
235
241
  const pastCutoff = cutoffDate ? new Date() > cutoffDate : false;
236
242
  const spotsRemaining = guestLimit ? guestLimit - (guestCount !== null && guestCount !== void 0 ? guestCount : 0) : null;
237
243
  const atCapacity = spotsRemaining !== null && spotsRemaining <= 0;
238
244
  return { closed, pastCutoff, atCapacity };
239
- };
240
- export const selectGroupOrderPrepTimes = (state) => {
245
+ });
246
+ export const selectGroupOrderPrepTimes = createSelector((state) => {
241
247
  const { revenueCenter, serviceType } = state.order;
248
+ return { revenueCenter, serviceType };
249
+ }, ({ revenueCenter, serviceType }) => {
242
250
  if (!revenueCenter || !serviceType)
243
251
  return {};
244
252
  const { wait_times, group_ordering } = revenueCenter;
@@ -247,5 +255,5 @@ export const selectGroupOrderPrepTimes = (state) => {
247
255
  const waitTime = wait_times && wait_times[st] ? wait_times[st] : 0;
248
256
  const prepTime = (waitTime !== null && waitTime !== void 0 ? waitTime : 0) + (prep_time !== null && prep_time !== void 0 ? prep_time : 0);
249
257
  return { prepTime, leadTime };
250
- };
258
+ });
251
259
  export const groupOrderReducer = groupOrderSlice.reducer;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@open-tender/cloud",
3
- "version": "0.1.78",
3
+ "version": "0.1.80",
4
4
  "description": "A library of hooks, reducers, utility functions, and types for use with Open Tender applications that utilize our cloud-based Order API.",
5
5
  "main": "./dist/cjs/index.js",
6
6
  "module": "./dist/esm/index.js",