@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,50 @@
1
+ export declare const errorsApi: {
2
+ notAuthorized: {
3
+ code: string;
4
+ status: number;
5
+ title: string;
6
+ detail: string;
7
+ };
8
+ methodNotAllowed: {
9
+ code: string;
10
+ status: number;
11
+ title: string;
12
+ detail: string;
13
+ };
14
+ parseError: {
15
+ code: string;
16
+ status: number;
17
+ title: string;
18
+ detail: string;
19
+ };
20
+ internalServerError: {
21
+ code: string;
22
+ status: number;
23
+ title: string;
24
+ detail: string;
25
+ };
26
+ notImplemented: {
27
+ code: string;
28
+ status: number;
29
+ title: string;
30
+ detail: string;
31
+ };
32
+ badGateway: {
33
+ code: string;
34
+ status: number;
35
+ title: string;
36
+ detail: string;
37
+ };
38
+ tempUnavailable: {
39
+ code: string;
40
+ status: number;
41
+ title: string;
42
+ detail: string;
43
+ };
44
+ gatewayTimeout: {
45
+ code: string;
46
+ status: number;
47
+ title: string;
48
+ detail: string;
49
+ };
50
+ };
@@ -0,0 +1,53 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.errorsApi = void 0;
4
+ exports.errorsApi = {
5
+ notAuthorized: {
6
+ code: 'not_authorized',
7
+ status: 401,
8
+ title: 'Not Authorized',
9
+ detail: 'Your session has expired. Please login again.'
10
+ },
11
+ methodNotAllowed: {
12
+ code: 'method_not_allowed',
13
+ status: 405,
14
+ title: 'Method Not Allowed',
15
+ detail: 'The method is not allowed for the requested URL.'
16
+ },
17
+ parseError: {
18
+ code: 'parse_error',
19
+ status: 422,
20
+ title: 'Cannot Read File',
21
+ detail: 'There was an error reading this file. Please contact Open Tender Support.'
22
+ },
23
+ internalServerError: {
24
+ code: 'internal_server_error',
25
+ status: 500,
26
+ title: 'Internal Server Error',
27
+ detail: 'Internal server error. Please contact Open Tender Support.'
28
+ },
29
+ notImplemented: {
30
+ code: 'not_implemented',
31
+ status: 501,
32
+ title: 'Servers Overloaded',
33
+ detail: 'Servers temporarily overloaded. Please retry your request. If this issue persists, please contact Open Tender Support.'
34
+ },
35
+ badGateway: {
36
+ code: 'bad_gateway',
37
+ status: 502,
38
+ title: 'Bad Gateway',
39
+ detail: 'Temporary gateway error. Please retry your request. If this issue persists, please contact Open Tender Support.'
40
+ },
41
+ tempUnavailable: {
42
+ code: 'temporarily_unavailable',
43
+ status: 503,
44
+ title: 'Service Temporarily Unavailable',
45
+ detail: 'Service Temporarily Unavailable. Please retry your request. If this issue persists, please contact Open Tender Support.'
46
+ },
47
+ gatewayTimeout: {
48
+ code: 'gateway_timeout',
49
+ status: 504,
50
+ title: 'Gateway Timeout',
51
+ detail: 'Gateway Timeout. Please contact Open Tender Support.'
52
+ }
53
+ };
@@ -0,0 +1,2 @@
1
+ import PosAPI from './api';
2
+ export { PosAPI };
@@ -0,0 +1,6 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.PosAPI = void 0;
4
+ const tslib_1 = require("tslib");
5
+ const api_1 = tslib_1.__importDefault(require("./api"));
6
+ exports.PosAPI = api_1.default;
@@ -0,0 +1,5 @@
1
+ import { Alerts } from '@open-tender/types';
2
+ import { AppState } from '../app';
3
+ export declare const clearAlerts: import("@reduxjs/toolkit").ActionCreatorWithoutPayload<string>, addAlert: import("@reduxjs/toolkit").ActionCreatorWithPayload<any, string>, dismissAlert: import("@reduxjs/toolkit").ActionCreatorWithPayload<any, string>;
4
+ export declare const selectAlerts: (state: AppState) => Alerts;
5
+ export declare const alertsReducer: import("redux").Reducer<Alerts, import("redux").AnyAction>;
@@ -0,0 +1,28 @@
1
+ "use strict";
2
+ var _a;
3
+ Object.defineProperty(exports, "__esModule", { value: true });
4
+ exports.alertsReducer = exports.selectAlerts = exports.dismissAlert = exports.addAlert = exports.clearAlerts = void 0;
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
+ const alertsSlice = (0, toolkit_1.createSlice)({
10
+ name: types_1.ReducerType.Alerts,
11
+ initialState,
12
+ reducers: {
13
+ clearAlerts: () => initialState,
14
+ addAlert: (state, action) => {
15
+ return [
16
+ ...state.reverse().slice(0, 4).reverse(),
17
+ { message: action.payload, id: (0, utils_1.makeRandomNumberString)() }
18
+ ];
19
+ },
20
+ dismissAlert: (state, action) => {
21
+ return state.filter(i => i.id !== action.payload);
22
+ }
23
+ }
24
+ });
25
+ _a = alertsSlice.actions, exports.clearAlerts = _a.clearAlerts, exports.addAlert = _a.addAlert, exports.dismissAlert = _a.dismissAlert;
26
+ const selectAlerts = (state) => state.alerts;
27
+ exports.selectAlerts = selectAlerts;
28
+ exports.alertsReducer = alertsSlice.reducer;
@@ -0,0 +1,19 @@
1
+ import { AppState } from '../app';
2
+ import { Allergen, Allergens, RequestError, RequestStatus } from '@open-tender/types';
3
+ export interface AllergensState {
4
+ entities: Allergen[];
5
+ error: RequestError;
6
+ loading: RequestStatus;
7
+ selectedAllergens: Allergen[] | null;
8
+ }
9
+ export declare enum AllergensActionType {
10
+ FetchAllergens = "allergens/fetchAllergens"
11
+ }
12
+ export declare const fetchAllergens: import("@reduxjs/toolkit").AsyncThunk<Allergens, void, {
13
+ state: AppState;
14
+ rejectValue: RequestError;
15
+ }>;
16
+ export declare const resetAllergens: import("@reduxjs/toolkit").ActionCreatorWithoutPayload<string>, setSelectedAllergens: import("@reduxjs/toolkit").ActionCreatorWithPayload<any, string>;
17
+ export declare const selectAllergens: (state: AppState) => AllergensState;
18
+ export declare const selectSelectedAllergenNames: (state: AppState) => (string | undefined)[];
19
+ export declare const allergensReducer: import("redux").Reducer<AllergensState, import("redux").AnyAction>;
@@ -0,0 +1,66 @@
1
+ "use strict";
2
+ var _a;
3
+ Object.defineProperty(exports, "__esModule", { value: true });
4
+ exports.allergensReducer = exports.selectSelectedAllergenNames = exports.selectAllergens = exports.setSelectedAllergens = exports.resetAllergens = exports.fetchAllergens = exports.AllergensActionType = void 0;
5
+ const tslib_1 = require("tslib");
6
+ const toolkit_1 = require("@reduxjs/toolkit");
7
+ const types_1 = require("./types");
8
+ const initialState = {
9
+ entities: [],
10
+ selectedAllergens: null,
11
+ loading: 'idle',
12
+ error: null
13
+ };
14
+ var AllergensActionType;
15
+ (function (AllergensActionType) {
16
+ AllergensActionType["FetchAllergens"] = "allergens/fetchAllergens";
17
+ })(AllergensActionType = exports.AllergensActionType || (exports.AllergensActionType = {}));
18
+ exports.fetchAllergens = (0, toolkit_1.createAsyncThunk)(AllergensActionType.FetchAllergens, (_, { getState, rejectWithValue }) => tslib_1.__awaiter(void 0, void 0, void 0, function* () {
19
+ try {
20
+ const api = getState().config.api;
21
+ return yield api.getAllergens();
22
+ }
23
+ catch (err) {
24
+ return rejectWithValue(err);
25
+ }
26
+ }));
27
+ const allergensSlice = (0, toolkit_1.createSlice)({
28
+ name: types_1.ReducerType.Allergens,
29
+ initialState,
30
+ reducers: {
31
+ resetAllergens: () => initialState,
32
+ setSelectedAllergens: (state, action) => {
33
+ state.selectedAllergens = action.payload;
34
+ }
35
+ },
36
+ extraReducers: builder => {
37
+ builder
38
+ .addCase(exports.fetchAllergens.fulfilled, (state, action) => {
39
+ state.entities = action.payload;
40
+ state.loading = 'idle';
41
+ state.error = null;
42
+ })
43
+ .addCase(exports.fetchAllergens.pending, state => {
44
+ state.loading = 'pending';
45
+ })
46
+ .addCase(exports.fetchAllergens.rejected, (state, action) => {
47
+ state.error = action.payload;
48
+ state.loading = 'idle';
49
+ });
50
+ }
51
+ });
52
+ _a = allergensSlice.actions, exports.resetAllergens = _a.resetAllergens, exports.setSelectedAllergens = _a.setSelectedAllergens;
53
+ const selectAllergens = (state) => state.allergens;
54
+ exports.selectAllergens = selectAllergens;
55
+ const selectSelectedAllergenNames = (state) => {
56
+ const { entities: allergens, selectedAllergens } = state.allergens;
57
+ if (!allergens.length || !selectedAllergens || !selectedAllergens.length) {
58
+ return [];
59
+ }
60
+ return selectedAllergens.map(i => {
61
+ const allergen = allergens.find(a => a.allergen_id === i.allergen_id);
62
+ return allergen ? allergen.name : '';
63
+ });
64
+ };
65
+ exports.selectSelectedAllergenNames = selectSelectedAllergenNames;
66
+ exports.allergensReducer = allergensSlice.reducer;
@@ -0,0 +1,28 @@
1
+ import { AppState } from '../app';
2
+ import { AnnouncementPage, AnnouncementPages, Announcements, AuthType, RequestError, RequestStatus } from '@open-tender/types';
3
+ export interface AnnouncementsState {
4
+ entities: Announcements;
5
+ error: RequestError;
6
+ loading: RequestStatus;
7
+ pages: AnnouncementPages;
8
+ }
9
+ export declare enum AnnouncementsActionType {
10
+ FetchAnnouncementPage = "announcements/fetchAnnouncementPage"
11
+ }
12
+ export declare const fetchAnnouncementPage: import("@reduxjs/toolkit").AsyncThunk<AnnouncementPage, AuthType, {
13
+ state: AppState;
14
+ rejectValue: {
15
+ error: RequestError;
16
+ page: AuthType;
17
+ };
18
+ }>;
19
+ export declare const resetAnnouncements: import("@reduxjs/toolkit").ActionCreatorWithoutPayload<string>;
20
+ export declare const selectAnnouncements: (state: AppState) => AnnouncementsState;
21
+ export declare const selectAnnouncementsPage: (page: AuthType) => (state: AppState) => {
22
+ settings: import("@open-tender/types").AnnouncementSettings | null;
23
+ entities: Announcements;
24
+ loading: RequestStatus;
25
+ error: RequestError;
26
+ };
27
+ export declare const selectHasAnnouncementsPage: (page: AuthType) => (state: AppState) => boolean;
28
+ export declare const announcementsReducer: import("redux").Reducer<AnnouncementsState, import("redux").AnyAction>;
@@ -0,0 +1,77 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.announcementsReducer = exports.selectHasAnnouncementsPage = exports.selectAnnouncementsPage = exports.selectAnnouncements = exports.resetAnnouncements = exports.fetchAnnouncementPage = exports.AnnouncementsActionType = void 0;
4
+ const tslib_1 = require("tslib");
5
+ const toolkit_1 = require("@reduxjs/toolkit");
6
+ const types_1 = require("./types");
7
+ const initialState = {
8
+ entities: [],
9
+ pages: [],
10
+ loading: 'idle',
11
+ error: null
12
+ };
13
+ var AnnouncementsActionType;
14
+ (function (AnnouncementsActionType) {
15
+ AnnouncementsActionType["FetchAnnouncementPage"] = "announcements/fetchAnnouncementPage";
16
+ })(AnnouncementsActionType = exports.AnnouncementsActionType || (exports.AnnouncementsActionType = {}));
17
+ exports.fetchAnnouncementPage = (0, toolkit_1.createAsyncThunk)(AnnouncementsActionType.FetchAnnouncementPage, (page, { getState, rejectWithValue }) => tslib_1.__awaiter(void 0, void 0, void 0, function* () {
18
+ try {
19
+ const api = getState().config.api;
20
+ const response = yield api.getAnnouncementPage(page);
21
+ const settings = Object.assign({}, response);
22
+ delete settings.announcements;
23
+ const entities = response.announcements;
24
+ const payload = { settings, entities, page };
25
+ return payload;
26
+ }
27
+ catch (err) {
28
+ return rejectWithValue({ error: err, page });
29
+ }
30
+ }));
31
+ const announcementsSlice = (0, toolkit_1.createSlice)({
32
+ name: types_1.ReducerType.Announcements,
33
+ initialState,
34
+ reducers: {
35
+ resetAnnouncements: () => initialState
36
+ },
37
+ extraReducers: builder => {
38
+ builder
39
+ .addCase(exports.fetchAnnouncementPage.fulfilled, (state, action) => {
40
+ const { page } = action.payload;
41
+ const pages = state.pages
42
+ ? state.pages.filter(i => i.page !== page)
43
+ : [];
44
+ state.pages = [...pages, action.payload];
45
+ state.loading = 'idle';
46
+ state.error = null;
47
+ })
48
+ .addCase(exports.fetchAnnouncementPage.pending, state => {
49
+ state.loading = 'pending';
50
+ })
51
+ .addCase(exports.fetchAnnouncementPage.rejected, (state, action) => {
52
+ const { error, page } = action.payload || {};
53
+ state.error = error;
54
+ (state.pages = state.pages.filter(i => i.page !== page)),
55
+ (state.loading = 'idle');
56
+ });
57
+ }
58
+ });
59
+ exports.resetAnnouncements = announcementsSlice.actions.resetAnnouncements;
60
+ const selectAnnouncements = (state) => state.announcements;
61
+ exports.selectAnnouncements = selectAnnouncements;
62
+ const selectAnnouncementsPage = (page) => (state) => {
63
+ const { pages, loading, error } = state.announcements;
64
+ const data = pages ? pages.find(i => i.page === page) : undefined;
65
+ const { settings = null, entities = [] } = data || {};
66
+ return { settings, entities, loading, error };
67
+ };
68
+ exports.selectAnnouncementsPage = selectAnnouncementsPage;
69
+ const selectHasAnnouncementsPage = (page) => (state) => {
70
+ const { pages, loading } = state.announcements;
71
+ const data = pages ? pages.find(i => i.page === page) : undefined;
72
+ const { entities = [] } = data || {};
73
+ const hasAnnouncements = entities && entities.length;
74
+ return loading === 'pending' || hasAnnouncements ? true : false;
75
+ };
76
+ exports.selectHasAnnouncementsPage = selectHasAnnouncementsPage;
77
+ exports.announcementsReducer = announcementsSlice.reducer;
@@ -0,0 +1,38 @@
1
+ import { AppState } from '../app';
2
+ import { CheckoutCheck, CheckoutForm, CompletedOrder, Order, RequestStatus } from '@open-tender/types';
3
+ export interface CheckoutState {
4
+ check: CheckoutCheck | null;
5
+ form: CheckoutForm;
6
+ submitting: boolean;
7
+ isGuest: boolean;
8
+ completedOrder: CompletedOrder | null;
9
+ errors: any;
10
+ loading: RequestStatus;
11
+ }
12
+ export declare enum CheckoutActionType {
13
+ FetchCheckout = "checkout/fetchCheckout",
14
+ ValidateOrder = "checkout/validateOrder",
15
+ SubmitOrder = "checkout/SubmitOrder",
16
+ SubmitOrderPay = "checkout/SubmitOrderPay"
17
+ }
18
+ export declare const validateOrder: import("@reduxjs/toolkit").AsyncThunk<{
19
+ check: CheckoutCheck;
20
+ errors: any;
21
+ }, Partial<Order>, {
22
+ state: AppState;
23
+ rejectValue: any;
24
+ }>;
25
+ export declare const submitOrder: import("@reduxjs/toolkit").AsyncThunk<CompletedOrder, void, {
26
+ state: AppState;
27
+ rejectValue: any;
28
+ }>;
29
+ export declare const submitOrderPay: import("@reduxjs/toolkit").AsyncThunk<CompletedOrder, boolean, {
30
+ state: AppState;
31
+ rejectValue: any;
32
+ }>;
33
+ export declare const resetCheckout: import("@reduxjs/toolkit").ActionCreatorWithoutPayload<string>, resetCheck: import("@reduxjs/toolkit").ActionCreatorWithoutPayload<string>, resetCompletedOrder: import("@reduxjs/toolkit").ActionCreatorWithoutPayload<string>, resetErrors: import("@reduxjs/toolkit").ActionCreatorWithoutPayload<string>, resetTip: import("@reduxjs/toolkit").ActionCreatorWithoutPayload<string>, setCompletedOrder: import("@reduxjs/toolkit").ActionCreatorWithPayload<any, string>, setGuest: import("@reduxjs/toolkit").ActionCreatorWithPayload<any, string>, setSubmitting: import("@reduxjs/toolkit").ActionCreatorWithPayload<any, string>, updateCheckoutCustomer: import("@reduxjs/toolkit").ActionCreatorWithPayload<any, string>, updateForm: import("@reduxjs/toolkit").ActionCreatorWithPayload<any, string>;
34
+ export declare const selectCheckout: (state: AppState) => CheckoutState;
35
+ export declare const selectCheck: (state: AppState) => CheckoutCheck | null;
36
+ export declare const selectCompletedOrder: (state: AppState) => CompletedOrder | null;
37
+ export declare const selectDiscounts: (state: AppState) => import("@open-tender/types").OrderDiscounts;
38
+ export declare const checkoutReducer: import("redux").Reducer<CheckoutState, import("redux").AnyAction>;
@@ -0,0 +1,276 @@
1
+ "use strict";
2
+ var _a;
3
+ Object.defineProperty(exports, "__esModule", { value: true });
4
+ exports.checkoutReducer = exports.selectDiscounts = exports.selectCompletedOrder = exports.selectCheck = exports.selectCheckout = exports.updateForm = exports.updateCheckoutCustomer = exports.setSubmitting = exports.setGuest = exports.setCompletedOrder = exports.resetTip = exports.resetErrors = exports.resetCompletedOrder = exports.resetCheck = exports.resetCheckout = exports.submitOrderPay = exports.submitOrder = exports.validateOrder = exports.CheckoutActionType = void 0;
5
+ const tslib_1 = require("tslib");
6
+ const toolkit_1 = require("@reduxjs/toolkit");
7
+ const types_1 = require("./types");
8
+ const customer_1 = require("./customer");
9
+ const utils_1 = require("@open-tender/utils");
10
+ const order_1 = require("./order");
11
+ const menu_1 = require("./menu");
12
+ const initialState = {
13
+ check: null,
14
+ form: {
15
+ details: {},
16
+ customer: {},
17
+ address: {},
18
+ surcharges: [],
19
+ discounts: [],
20
+ promoCodes: [],
21
+ points: [],
22
+ tenders: [],
23
+ tip: null
24
+ },
25
+ submitting: false,
26
+ isGuest: false,
27
+ completedOrder: null,
28
+ errors: {},
29
+ loading: 'idle'
30
+ };
31
+ var CheckoutActionType;
32
+ (function (CheckoutActionType) {
33
+ CheckoutActionType["FetchCheckout"] = "checkout/fetchCheckout";
34
+ CheckoutActionType["ValidateOrder"] = "checkout/validateOrder";
35
+ CheckoutActionType["SubmitOrder"] = "checkout/SubmitOrder";
36
+ CheckoutActionType["SubmitOrderPay"] = "checkout/SubmitOrderPay";
37
+ })(CheckoutActionType = exports.CheckoutActionType || (exports.CheckoutActionType = {}));
38
+ const assembleOrder = (orderData) => {
39
+ const { order, checkout, groupOrder } = orderData;
40
+ const { orderId, revenueCenter, serviceType, requestedAt, cart, deviceType, prepType, table } = order;
41
+ const { revenue_center_id: revenueCenterId } = revenueCenter || {};
42
+ const { form } = checkout;
43
+ const { customer, address, details, surcharges, discounts, promoCodes, points, tenders, tip } = form;
44
+ // const defaultTip = check ? getDefaultTip(check.config) : null
45
+ const fullAddress = Object.assign(Object.assign({}, order.address), address);
46
+ const data = {
47
+ orderId,
48
+ revenueCenterId,
49
+ serviceType,
50
+ requestedAt,
51
+ cart,
52
+ customer,
53
+ address: (0, utils_1.isEmpty)(fullAddress) ? null : fullAddress,
54
+ details,
55
+ surcharges,
56
+ discounts,
57
+ promoCodes,
58
+ points,
59
+ tip,
60
+ tenders,
61
+ cartId: groupOrder.cartId || null,
62
+ deviceType,
63
+ prepType,
64
+ table
65
+ };
66
+ const preparedOrder = (0, utils_1.prepareOrder)(data);
67
+ return preparedOrder;
68
+ };
69
+ const refreshKeys = ['revenue_center_id', 'service_type', 'requested_at'];
70
+ const makeRefreshArgs = (order) => ({
71
+ revenueCenterId: order.revenue_center_id,
72
+ serviceType: order.service_type,
73
+ requestedAt: order.requested_at
74
+ });
75
+ exports.validateOrder = (0, toolkit_1.createAsyncThunk)(CheckoutActionType.FetchCheckout, (order, { dispatch, getState, rejectWithValue }) => tslib_1.__awaiter(void 0, void 0, void 0, function* () {
76
+ try {
77
+ const { api } = getState().config;
78
+ if (!order)
79
+ order = assembleOrder(getState());
80
+ const check = yield api.postOrderValidate(order);
81
+ const errMessages = (0, utils_1.handleCheckoutErrors)({ params: check.errors });
82
+ const errors = {};
83
+ const keys = Object.keys(errMessages);
84
+ const args = makeRefreshArgs(order);
85
+ if ((0, utils_1.contains)(keys, refreshKeys)) {
86
+ dispatch((0, order_1.refreshRevenueCenter)(args));
87
+ }
88
+ else if ((0, utils_1.contains)(keys, ['cart'])) {
89
+ const cartError = errMessages.cart;
90
+ if ((0, utils_1.isString)(cartError)) {
91
+ dispatch((0, menu_1.fetchMenu)(args));
92
+ }
93
+ else {
94
+ const alert = { type: 'cartCounts', args: { errors: cartError } };
95
+ dispatch((0, order_1.setAlert)(alert));
96
+ }
97
+ }
98
+ else if ((0, utils_1.contains)(keys, ['promo_codes'])) {
99
+ errors['promo_codes'] = errMessages.promo_codes;
100
+ }
101
+ return { check, errors };
102
+ }
103
+ catch (err) {
104
+ return rejectWithValue(err);
105
+ }
106
+ }));
107
+ const handleOrderErrors = (err, preparedOrder, dispatch, rejectWithValue) => {
108
+ const errors = (0, utils_1.handleCheckoutErrors)(err);
109
+ const keys = Object.keys(errors);
110
+ const args = makeRefreshArgs(preparedOrder);
111
+ if ((0, utils_1.contains)(keys, refreshKeys)) {
112
+ dispatch((0, order_1.refreshRevenueCenter)(args));
113
+ return rejectWithValue({});
114
+ }
115
+ else if ((0, utils_1.contains)(keys, ['cart'])) {
116
+ const cartError = errors.cart;
117
+ if ((0, utils_1.isString)(cartError)) {
118
+ dispatch((0, menu_1.fetchMenu)(args));
119
+ }
120
+ else {
121
+ const alert = { type: 'cartCounts', args: { errors: cartError } };
122
+ setTimeout(() => {
123
+ dispatch((0, order_1.setAlert)(alert));
124
+ }, 500);
125
+ }
126
+ return rejectWithValue({});
127
+ }
128
+ else {
129
+ return rejectWithValue(errors);
130
+ }
131
+ };
132
+ exports.submitOrder = (0, toolkit_1.createAsyncThunk)(CheckoutActionType.SubmitOrder, (_, { dispatch, getState, rejectWithValue }) => tslib_1.__awaiter(void 0, void 0, void 0, function* () {
133
+ const { api } = getState().config;
134
+ if (!api)
135
+ return;
136
+ const alert = {
137
+ type: 'working',
138
+ args: { text: 'Submitting your order...' }
139
+ };
140
+ dispatch((0, order_1.setAlert)(alert));
141
+ const preparedOrder = assembleOrder(getState());
142
+ try {
143
+ const completedOrder = yield api.postOrder(preparedOrder);
144
+ const auth = getState().customer.account.auth;
145
+ const { email, password } = preparedOrder.customer || {};
146
+ if (password && !auth)
147
+ yield dispatch((0, customer_1.loginCustomer)({ email: email, password }));
148
+ dispatch((0, order_1.setAlert)({ type: 'close' }));
149
+ return completedOrder;
150
+ }
151
+ catch (err) {
152
+ dispatch((0, order_1.setAlert)({ type: 'close' }));
153
+ return rejectWithValue(err);
154
+ }
155
+ }));
156
+ exports.submitOrderPay = (0, toolkit_1.createAsyncThunk)(CheckoutActionType.SubmitOrderPay, (showAlert, { dispatch, getState, rejectWithValue }) => tslib_1.__awaiter(void 0, void 0, void 0, function* () {
157
+ const { api } = getState().config;
158
+ if (!api)
159
+ return;
160
+ dispatch((0, exports.setSubmitting)(true));
161
+ if (showAlert || false) {
162
+ const alert = {
163
+ type: 'working',
164
+ args: { text: 'Submitting your order...' }
165
+ };
166
+ dispatch((0, order_1.setAlert)(alert));
167
+ }
168
+ const preparedOrder = assembleOrder(getState());
169
+ try {
170
+ const completedOrder = yield api.postOrder(preparedOrder);
171
+ const auth = getState().customer.account.auth;
172
+ const { email, password } = preparedOrder.customer || {};
173
+ if (password && !auth)
174
+ yield dispatch((0, customer_1.loginCustomer)({ email: email, password }));
175
+ dispatch((0, order_1.setAlert)({ type: 'close' }));
176
+ return completedOrder;
177
+ }
178
+ catch (err) {
179
+ dispatch((0, order_1.setAlert)({ type: 'close' }));
180
+ handleOrderErrors(err, preparedOrder, dispatch, rejectWithValue);
181
+ }
182
+ }));
183
+ const checkoutSlice = (0, toolkit_1.createSlice)({
184
+ name: types_1.ReducerType.Checkout,
185
+ initialState,
186
+ reducers: {
187
+ resetCheckout: () => initialState,
188
+ resetCheck: state => {
189
+ state.check = null;
190
+ },
191
+ resetTip: state => {
192
+ state.form = Object.assign(Object.assign({}, state.form), { tip: null });
193
+ },
194
+ resetErrors: state => {
195
+ state.errors = {};
196
+ },
197
+ resetCompletedOrder: state => {
198
+ state.completedOrder = null;
199
+ },
200
+ setCompletedOrder: (state, action) => {
201
+ state.completedOrder = action.payload;
202
+ },
203
+ setSubmitting: (state, action) => {
204
+ state.submitting = action.payload;
205
+ },
206
+ setGuest: (state, action) => {
207
+ state.isGuest = action.payload;
208
+ },
209
+ updateForm: (state, action) => {
210
+ const errors = Object.assign({}, state.errors);
211
+ const { tenders } = action.payload;
212
+ if (tenders)
213
+ delete errors.tenders;
214
+ state.form = Object.assign(Object.assign({}, state.form), action.payload);
215
+ state.errors = errors;
216
+ },
217
+ updateCheckoutCustomer: (state, action) => {
218
+ const account = action.payload;
219
+ const customer = Object.assign({}, state.form.customer);
220
+ const customerId = customer ? customer.customer_id : null;
221
+ let form = Object.assign({}, state.form);
222
+ if (!account) {
223
+ if (customerId) {
224
+ form = Object.assign(Object.assign({}, form), { customer: {}, promoCodes: [], discounts: [], tenders: [] });
225
+ }
226
+ else {
227
+ form = Object.assign(Object.assign({}, form), { customer: {}, promoCodes: [] });
228
+ }
229
+ }
230
+ else if (customerId && account.customer_id !== customerId) {
231
+ form = Object.assign(Object.assign({}, form), { customer, discounts: [], tenders: [] });
232
+ }
233
+ else if (account && !customerId) {
234
+ form = Object.assign(Object.assign({}, form), { customer: account, discounts: [], tenders: [] });
235
+ }
236
+ state.form = Object.assign({}, form);
237
+ }
238
+ },
239
+ extraReducers: builder => {
240
+ builder
241
+ .addCase(exports.validateOrder.fulfilled, (state, action) => {
242
+ state.check = action.payload.check;
243
+ state.errors = action.payload.errors;
244
+ })
245
+ .addCase(exports.validateOrder.pending, state => {
246
+ state.loading = 'pending';
247
+ })
248
+ .addCase(exports.validateOrder.rejected, (state, action) => {
249
+ state.errors = {
250
+ form: action.payload
251
+ };
252
+ state.loading = 'idle';
253
+ })
254
+ .addCase(exports.submitOrder.fulfilled, (state, action) => {
255
+ state.completedOrder = action.payload;
256
+ })
257
+ .addCase(exports.submitOrder.pending, state => {
258
+ state.loading = 'pending';
259
+ })
260
+ .addCase(exports.submitOrder.rejected, (state, action) => {
261
+ state.loading = 'idle';
262
+ state.submitting = false;
263
+ state.errors = action.payload;
264
+ });
265
+ }
266
+ });
267
+ _a = checkoutSlice.actions, exports.resetCheckout = _a.resetCheckout, exports.resetCheck = _a.resetCheck, exports.resetCompletedOrder = _a.resetCompletedOrder, exports.resetErrors = _a.resetErrors, exports.resetTip = _a.resetTip, exports.setCompletedOrder = _a.setCompletedOrder, exports.setGuest = _a.setGuest, exports.setSubmitting = _a.setSubmitting, exports.updateCheckoutCustomer = _a.updateCheckoutCustomer, exports.updateForm = _a.updateForm;
268
+ const selectCheckout = (state) => state.checkout;
269
+ exports.selectCheckout = selectCheckout;
270
+ const selectCheck = (state) => state.checkout.check;
271
+ exports.selectCheck = selectCheck;
272
+ const selectCompletedOrder = (state) => state.checkout.completedOrder;
273
+ exports.selectCompletedOrder = selectCompletedOrder;
274
+ const selectDiscounts = (state) => state.checkout.form.discounts;
275
+ exports.selectDiscounts = selectDiscounts;
276
+ exports.checkoutReducer = checkoutSlice.reducer;