@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,129 @@
1
+ import { __awaiter } from "tslib";
2
+ import { createAsyncThunk, createSlice } from '@reduxjs/toolkit';
3
+ import { ReducerType } from '../types';
4
+ import { MISSING_CUSTOMER } from '@open-tender/types';
5
+ import { checkAuth, selectToken } from './account';
6
+ import { showNotification } from '../notifications';
7
+ import { makeFormErrors } from '@open-tender/utils';
8
+ const initialState = {
9
+ entities: [],
10
+ lookup: {},
11
+ loading: 'idle',
12
+ error: null
13
+ };
14
+ export var CustomerAddressesActionType;
15
+ (function (CustomerAddressesActionType) {
16
+ CustomerAddressesActionType["FetchCustomerAddresses"] = "customer/fetchCustomerAddresses";
17
+ CustomerAddressesActionType["UpdateCustomerAddresses"] = "customer/updateCustomerAddresses";
18
+ CustomerAddressesActionType["RemoveCustomerAddress"] = "customer/removeCustomerAddress";
19
+ })(CustomerAddressesActionType || (CustomerAddressesActionType = {}));
20
+ export const fetchCustomerAddresses = createAsyncThunk(CustomerAddressesActionType.FetchCustomerAddresses, (limit, { dispatch, getState, rejectWithValue }) => __awaiter(void 0, void 0, void 0, function* () {
21
+ try {
22
+ const api = getState().config.api;
23
+ const token = selectToken(getState());
24
+ if (!token)
25
+ throw new Error(MISSING_CUSTOMER);
26
+ const addresses = yield api.getCustomerAddresses(token, limit);
27
+ return addresses;
28
+ }
29
+ catch (err) {
30
+ const error = err;
31
+ return checkAuth(error, dispatch, () => rejectWithValue(error));
32
+ }
33
+ }));
34
+ export const updateCustomerAddress = createAsyncThunk(CustomerAddressesActionType.UpdateCustomerAddresses, (data, { dispatch, getState, rejectWithValue }) => __awaiter(void 0, void 0, void 0, function* () {
35
+ try {
36
+ const api = getState().config.api;
37
+ const token = selectToken(getState());
38
+ if (!token)
39
+ throw new Error(MISSING_CUSTOMER);
40
+ yield api.putCustomerAddress(token, data.addressId, data.data);
41
+ const limit = getState().customer.addresses.entities.length;
42
+ const { data: addresses } = yield api.getCustomerAddresses(token, limit);
43
+ dispatch(showNotification('Address updated!'));
44
+ if (data.callback)
45
+ data.callback();
46
+ return addresses;
47
+ }
48
+ catch (err) {
49
+ const errors = makeFormErrors(err);
50
+ const error = err;
51
+ return checkAuth(error, dispatch, () => rejectWithValue(errors));
52
+ }
53
+ }));
54
+ export const removeCustomerAddress = createAsyncThunk(CustomerAddressesActionType.RemoveCustomerAddress, (data, { dispatch, getState, rejectWithValue }) => __awaiter(void 0, void 0, void 0, function* () {
55
+ try {
56
+ const api = getState().config.api;
57
+ const token = selectToken(getState());
58
+ if (!token)
59
+ throw new Error(MISSING_CUSTOMER);
60
+ yield api.deleteCustomerAddress(token, data.addressId);
61
+ const limit = getState().customer.addresses.entities.length;
62
+ const { data: addresses } = yield api.getCustomerAddresses(token, limit);
63
+ dispatch(showNotification('Address removed!'));
64
+ if (data.callback)
65
+ data.callback();
66
+ return addresses;
67
+ }
68
+ catch (err) {
69
+ const error = err;
70
+ return checkAuth(error, dispatch, () => rejectWithValue(error));
71
+ }
72
+ }));
73
+ const customerAddressesSlice = createSlice({
74
+ name: ReducerType.CustomerAddresses,
75
+ initialState,
76
+ reducers: {
77
+ resetCustomerAddresses: () => initialState,
78
+ setCustomerAddresses: (state, action) => {
79
+ state.entities = action.payload;
80
+ state.error = null;
81
+ },
82
+ resetCustomerAddressesError: state => {
83
+ state.error = null;
84
+ state.loading = 'idle';
85
+ }
86
+ },
87
+ extraReducers: builder => {
88
+ builder
89
+ .addCase(fetchCustomerAddresses.fulfilled, (state, action) => {
90
+ state.entities = action.payload;
91
+ state.loading = 'idle';
92
+ state.error = null;
93
+ })
94
+ .addCase(fetchCustomerAddresses.pending, state => {
95
+ state.loading = 'pending';
96
+ })
97
+ .addCase(fetchCustomerAddresses.rejected, (state, action) => {
98
+ state.error = action.payload;
99
+ state.loading = 'idle';
100
+ })
101
+ .addCase(updateCustomerAddress.fulfilled, (state, action) => {
102
+ state.entities = action.payload;
103
+ state.loading = 'idle';
104
+ state.error = null;
105
+ })
106
+ .addCase(updateCustomerAddress.pending, state => {
107
+ state.loading = 'pending';
108
+ })
109
+ .addCase(updateCustomerAddress.rejected, (state, action) => {
110
+ state.error = action.payload;
111
+ state.loading = 'idle';
112
+ })
113
+ .addCase(removeCustomerAddress.fulfilled, (state, action) => {
114
+ state.entities = action.payload;
115
+ state.loading = 'idle';
116
+ state.error = null;
117
+ })
118
+ .addCase(removeCustomerAddress.pending, state => {
119
+ state.loading = 'pending';
120
+ })
121
+ .addCase(removeCustomerAddress.rejected, (state, action) => {
122
+ state.error = action.payload;
123
+ state.loading = 'idle';
124
+ });
125
+ }
126
+ });
127
+ export const { resetCustomerAddresses, setCustomerAddresses } = customerAddressesSlice.actions;
128
+ export const selectCustomerAddresses = (state) => state.customer.addresses;
129
+ export const customerAddressesReducer = customerAddressesSlice.reducer;
@@ -0,0 +1,25 @@
1
+ import { AppState } from '../../app';
2
+ import { Allergens, RequestError, RequestStatus } from '@open-tender/types';
3
+ export interface CustomerAllergensState {
4
+ entities: Allergens;
5
+ error: RequestError;
6
+ loading: RequestStatus;
7
+ lookup: {
8
+ [key: number]: number;
9
+ };
10
+ }
11
+ export declare enum CustomerAllergensActionType {
12
+ FetchCustomerAllergens = "customer/fetchCustomerAllergens",
13
+ UpdateCustomerAllergens = "customer/updateCustomerAllergens"
14
+ }
15
+ export declare const fetchCustomerAllergens: import("@reduxjs/toolkit").AsyncThunk<Allergens, void, {
16
+ state: AppState;
17
+ rejectValue: RequestError;
18
+ }>;
19
+ export declare const updateCustomerAllergens: import("@reduxjs/toolkit").AsyncThunk<Allergens, Allergens, {
20
+ state: AppState;
21
+ rejectValue: RequestError;
22
+ }>;
23
+ export declare const resetCustomerAllergens: import("@reduxjs/toolkit").ActionCreatorWithoutPayload<string>, setCustomerAllergens: import("@reduxjs/toolkit").ActionCreatorWithPayload<any, string>;
24
+ export declare const selectCustomerAllergens: (state: AppState) => CustomerAllergensState;
25
+ export declare const customerAllergensReducer: import("redux").Reducer<CustomerAllergensState, import("redux").AnyAction>;
@@ -0,0 +1,89 @@
1
+ import { __awaiter } from "tslib";
2
+ import { createAsyncThunk, createSlice } from '@reduxjs/toolkit';
3
+ import { ReducerType } from '../types';
4
+ import { MISSING_CUSTOMER } from '@open-tender/types';
5
+ import { checkAuth, selectToken } from './account';
6
+ import { setSelectedAllergens } from '../allergens';
7
+ import { showNotification } from '../notifications';
8
+ const initialState = {
9
+ entities: [],
10
+ lookup: {},
11
+ loading: 'idle',
12
+ error: null
13
+ };
14
+ export var CustomerAllergensActionType;
15
+ (function (CustomerAllergensActionType) {
16
+ CustomerAllergensActionType["FetchCustomerAllergens"] = "customer/fetchCustomerAllergens";
17
+ CustomerAllergensActionType["UpdateCustomerAllergens"] = "customer/updateCustomerAllergens";
18
+ })(CustomerAllergensActionType || (CustomerAllergensActionType = {}));
19
+ export const fetchCustomerAllergens = createAsyncThunk(CustomerAllergensActionType.FetchCustomerAllergens, (_, { dispatch, getState, rejectWithValue }) => __awaiter(void 0, void 0, void 0, function* () {
20
+ try {
21
+ const api = getState().config.api;
22
+ const token = selectToken(getState());
23
+ if (!token)
24
+ throw new Error(MISSING_CUSTOMER);
25
+ const allergens = yield api.getCustomerAllergens(token);
26
+ return allergens;
27
+ }
28
+ catch (err) {
29
+ const error = err;
30
+ return checkAuth(error, dispatch, () => rejectWithValue(error));
31
+ }
32
+ }));
33
+ export const updateCustomerAllergens = createAsyncThunk(CustomerAllergensActionType.UpdateCustomerAllergens, (data, { dispatch, getState, rejectWithValue }) => __awaiter(void 0, void 0, void 0, function* () {
34
+ try {
35
+ const api = getState().config.api;
36
+ const token = selectToken(getState());
37
+ if (!token)
38
+ throw new Error(MISSING_CUSTOMER);
39
+ const allergens = yield api.putCustomerAllergens(token, data);
40
+ dispatch(setSelectedAllergens(allergens || []));
41
+ dispatch(showNotification('Allergens updated!'));
42
+ return allergens;
43
+ }
44
+ catch (err) {
45
+ const error = err;
46
+ return checkAuth(error, dispatch, () => rejectWithValue(error));
47
+ }
48
+ }));
49
+ const customerAllergensSlice = createSlice({
50
+ name: ReducerType.CustomerAllergens,
51
+ initialState,
52
+ reducers: {
53
+ resetCustomerAllergens: () => initialState,
54
+ setCustomerAllergens: (state, action) => {
55
+ state.entities = action.payload;
56
+ state.error = null;
57
+ }
58
+ },
59
+ extraReducers: builder => {
60
+ builder
61
+ .addCase(fetchCustomerAllergens.fulfilled, (state, action) => {
62
+ state.entities = action.payload;
63
+ state.loading = 'idle';
64
+ state.error = null;
65
+ })
66
+ .addCase(fetchCustomerAllergens.pending, state => {
67
+ state.loading = 'pending';
68
+ })
69
+ .addCase(fetchCustomerAllergens.rejected, (state, action) => {
70
+ state.error = action.payload;
71
+ state.loading = 'idle';
72
+ })
73
+ .addCase(updateCustomerAllergens.fulfilled, (state, action) => {
74
+ state.entities = action.payload;
75
+ state.loading = 'idle';
76
+ state.error = null;
77
+ })
78
+ .addCase(updateCustomerAllergens.pending, state => {
79
+ state.loading = 'pending';
80
+ })
81
+ .addCase(updateCustomerAllergens.rejected, (state, action) => {
82
+ state.error = action.payload;
83
+ state.loading = 'idle';
84
+ });
85
+ }
86
+ });
87
+ export const { resetCustomerAllergens, setCustomerAllergens } = customerAllergensSlice.actions;
88
+ export const selectCustomerAllergens = (state) => state.customer.allergens;
89
+ export const customerAllergensReducer = customerAllergensSlice.reducer;
@@ -0,0 +1,44 @@
1
+ import { AppState } from '../../app';
2
+ import { CustomerNotificationPrefs, NotificationArea, NotificationChannel, RequestError, RequestStatus } from '@open-tender/types';
3
+ export interface CustomerCommunicationPrefsState {
4
+ entities: CustomerNotificationPrefs;
5
+ error: RequestError;
6
+ loading: RequestStatus;
7
+ lookup: {
8
+ [key: number]: number;
9
+ };
10
+ }
11
+ export declare enum CustomerCommunicationPrefsActionType {
12
+ FetchCustomerCommunicationPreferences = "customer/fetchCustomerCommunicationPreferences",
13
+ AddCustomerCommunicationPreference = "customer/addCustomerCommunicationPreference",
14
+ RemoveCustomerCommunicationPreference = "customer/removeCustomerCommunicationPreference",
15
+ SetCustomerCommunicationDefaultPreferences = "customer/setCustomerCommunicationDefaultPreferences"
16
+ }
17
+ export declare const fetchCustomerCommunicationPreferences: import("@reduxjs/toolkit").AsyncThunk<CustomerNotificationPrefs, void, {
18
+ state: AppState;
19
+ rejectValue: RequestError;
20
+ }>;
21
+ export declare const addCustomerCommunicationPreference: import("@reduxjs/toolkit").AsyncThunk<CustomerNotificationPrefs, {
22
+ area: NotificationArea;
23
+ channel: NotificationChannel;
24
+ callback?: (() => void) | undefined;
25
+ }, {
26
+ state: AppState;
27
+ rejectValue: RequestError;
28
+ }>;
29
+ export declare const removeCustomerCommunicationPreference: import("@reduxjs/toolkit").AsyncThunk<CustomerNotificationPrefs, {
30
+ prefId: number;
31
+ callback?: (() => void) | undefined;
32
+ }, {
33
+ state: AppState;
34
+ rejectValue: RequestError;
35
+ }>;
36
+ export declare const setCustomerCommunicationDefaultPreferences: import("@reduxjs/toolkit").AsyncThunk<CustomerNotificationPrefs, {
37
+ prefs: CustomerNotificationPrefs;
38
+ callback?: (() => void) | undefined;
39
+ }, {
40
+ state: AppState;
41
+ rejectValue: RequestError;
42
+ }>;
43
+ export declare const resetCustomerCommunicationPreferences: import("@reduxjs/toolkit").ActionCreatorWithoutPayload<string>, resetCustomerCommunicationPreferencesError: import("@reduxjs/toolkit").ActionCreatorWithoutPayload<string>, setCustomerCommunicationPreferences: import("@reduxjs/toolkit").ActionCreatorWithPayload<any, string>;
44
+ export declare const customerCommunicationPrefsReducer: import("redux").Reducer<CustomerCommunicationPrefsState, import("redux").AnyAction>;
@@ -0,0 +1,161 @@
1
+ import { __awaiter } from "tslib";
2
+ import { createAsyncThunk, createSlice } from '@reduxjs/toolkit';
3
+ import { ReducerType } from '../types';
4
+ import { MISSING_CUSTOMER } from '@open-tender/types';
5
+ import { checkAuth, selectToken } from './account';
6
+ import { showNotification } from '../notifications';
7
+ import { makeFormErrors } from '@open-tender/utils';
8
+ const initialState = {
9
+ entities: [],
10
+ lookup: {},
11
+ loading: 'idle',
12
+ error: null
13
+ };
14
+ export var CustomerCommunicationPrefsActionType;
15
+ (function (CustomerCommunicationPrefsActionType) {
16
+ CustomerCommunicationPrefsActionType["FetchCustomerCommunicationPreferences"] = "customer/fetchCustomerCommunicationPreferences";
17
+ CustomerCommunicationPrefsActionType["AddCustomerCommunicationPreference"] = "customer/addCustomerCommunicationPreference";
18
+ CustomerCommunicationPrefsActionType["RemoveCustomerCommunicationPreference"] = "customer/removeCustomerCommunicationPreference";
19
+ CustomerCommunicationPrefsActionType["SetCustomerCommunicationDefaultPreferences"] = "customer/setCustomerCommunicationDefaultPreferences";
20
+ })(CustomerCommunicationPrefsActionType || (CustomerCommunicationPrefsActionType = {}));
21
+ export const fetchCustomerCommunicationPreferences = createAsyncThunk(CustomerCommunicationPrefsActionType.FetchCustomerCommunicationPreferences, (_, { dispatch, getState, rejectWithValue }) => __awaiter(void 0, void 0, void 0, function* () {
22
+ try {
23
+ const api = getState().config.api;
24
+ const token = selectToken(getState());
25
+ if (!token)
26
+ throw new Error(MISSING_CUSTOMER);
27
+ const { data: communicationPreferences } = yield api.getCustomerCommunicationPreferences(token);
28
+ return communicationPreferences;
29
+ }
30
+ catch (err) {
31
+ const error = err;
32
+ return checkAuth(error, dispatch, () => rejectWithValue(error));
33
+ }
34
+ }));
35
+ export const addCustomerCommunicationPreference = createAsyncThunk(CustomerCommunicationPrefsActionType.AddCustomerCommunicationPreference, (requestData, { dispatch, getState, rejectWithValue }) => __awaiter(void 0, void 0, void 0, function* () {
36
+ try {
37
+ const api = getState().config.api;
38
+ const token = selectToken(getState());
39
+ if (!token)
40
+ throw new Error(MISSING_CUSTOMER);
41
+ const data = {
42
+ notification_area: requestData.area,
43
+ notification_channel: requestData.channel
44
+ };
45
+ yield api.postCustomerCommunicationPreference(token, data);
46
+ const { data: communicationPreferences } = yield api.getCustomerCommunicationPreferences(token);
47
+ dispatch(showNotification('Preference added!'));
48
+ if (requestData.callback)
49
+ requestData.callback();
50
+ return communicationPreferences;
51
+ }
52
+ catch (err) {
53
+ const error = err;
54
+ const errors = makeFormErrors(error);
55
+ return checkAuth(error, dispatch, () => rejectWithValue(errors));
56
+ }
57
+ }));
58
+ export const removeCustomerCommunicationPreference = createAsyncThunk(CustomerCommunicationPrefsActionType.RemoveCustomerCommunicationPreference, (requestData, { dispatch, getState, rejectWithValue }) => __awaiter(void 0, void 0, void 0, function* () {
59
+ try {
60
+ const api = getState().config.api;
61
+ const token = selectToken(getState());
62
+ if (!token)
63
+ throw new Error(MISSING_CUSTOMER);
64
+ yield api.deleteCustomerCommunicationPreference(token, requestData.prefId);
65
+ const { data: communicationPreferences } = yield api.getCustomerCommunicationPreferences(token);
66
+ dispatch(showNotification('Preference removed!'));
67
+ if (requestData.callback)
68
+ requestData.callback();
69
+ return communicationPreferences;
70
+ }
71
+ catch (err) {
72
+ const error = err;
73
+ return checkAuth(error, dispatch, () => rejectWithValue(error));
74
+ }
75
+ }));
76
+ export const setCustomerCommunicationDefaultPreferences = createAsyncThunk(CustomerCommunicationPrefsActionType.SetCustomerCommunicationDefaultPreferences, (requestData, { dispatch, getState, rejectWithValue }) => __awaiter(void 0, void 0, void 0, function* () {
77
+ try {
78
+ const api = getState().config.api;
79
+ const token = selectToken(getState());
80
+ if (!token)
81
+ throw new Error(MISSING_CUSTOMER);
82
+ yield api.putCustomerCommunicationPreference(token, requestData.prefs);
83
+ const { data: communicationPreferences } = yield api.getCustomerCommunicationPreferences(token);
84
+ if (requestData.callback)
85
+ requestData.callback();
86
+ return communicationPreferences;
87
+ }
88
+ catch (err) {
89
+ const error = err;
90
+ const errors = makeFormErrors(error);
91
+ return checkAuth(error, dispatch, () => rejectWithValue(errors));
92
+ }
93
+ }));
94
+ const customerCommunicationPrefsSlice = createSlice({
95
+ name: ReducerType.CommunicationPrefs,
96
+ initialState,
97
+ reducers: {
98
+ resetCustomerCommunicationPreferences: () => initialState,
99
+ resetCustomerCommunicationPreferencesError: state => {
100
+ state.error = null;
101
+ state.loading = 'idle';
102
+ },
103
+ setCustomerCommunicationPreferences: (state, action) => {
104
+ state.entities = action.payload;
105
+ state.error = null;
106
+ }
107
+ },
108
+ extraReducers: builder => {
109
+ builder
110
+ .addCase(fetchCustomerCommunicationPreferences.fulfilled, (state, action) => {
111
+ state.entities = action.payload;
112
+ state.loading = 'idle';
113
+ state.error = null;
114
+ })
115
+ .addCase(fetchCustomerCommunicationPreferences.pending, state => {
116
+ state.loading = 'pending';
117
+ })
118
+ .addCase(fetchCustomerCommunicationPreferences.rejected, (state, action) => {
119
+ state.error = action.payload;
120
+ state.loading = 'idle';
121
+ })
122
+ .addCase(addCustomerCommunicationPreference.fulfilled, (state, action) => {
123
+ state.entities = action.payload;
124
+ state.loading = 'idle';
125
+ state.error = null;
126
+ })
127
+ .addCase(addCustomerCommunicationPreference.pending, state => {
128
+ state.loading = 'pending';
129
+ })
130
+ .addCase(addCustomerCommunicationPreference.rejected, (state, action) => {
131
+ state.error = action.payload;
132
+ state.loading = 'idle';
133
+ })
134
+ .addCase(removeCustomerCommunicationPreference.fulfilled, (state, action) => {
135
+ state.entities = action.payload;
136
+ state.loading = 'idle';
137
+ state.error = null;
138
+ })
139
+ .addCase(removeCustomerCommunicationPreference.pending, state => {
140
+ state.loading = 'pending';
141
+ })
142
+ .addCase(removeCustomerCommunicationPreference.rejected, (state, action) => {
143
+ state.error = action.payload;
144
+ state.loading = 'idle';
145
+ })
146
+ .addCase(setCustomerCommunicationDefaultPreferences.fulfilled, (state, action) => {
147
+ state.entities = action.payload;
148
+ state.loading = 'idle';
149
+ state.error = null;
150
+ })
151
+ .addCase(setCustomerCommunicationDefaultPreferences.pending, state => {
152
+ state.loading = 'pending';
153
+ })
154
+ .addCase(setCustomerCommunicationDefaultPreferences.rejected, (state, action) => {
155
+ state.error = action.payload;
156
+ state.loading = 'idle';
157
+ });
158
+ }
159
+ });
160
+ export const { resetCustomerCommunicationPreferences, resetCustomerCommunicationPreferencesError, setCustomerCommunicationPreferences } = customerCommunicationPrefsSlice.actions;
161
+ export const customerCommunicationPrefsReducer = customerCommunicationPrefsSlice.reducer;
@@ -0,0 +1,46 @@
1
+ import { AppState } from '../../app';
2
+ import { CreditCard, CreditCards, RequestError, RequestStatus } from '@open-tender/types';
3
+ export interface CustomerCreditCardsState {
4
+ entities: CreditCards;
5
+ error: RequestError;
6
+ loading: RequestStatus;
7
+ lookup: {
8
+ [key: number]: number;
9
+ };
10
+ }
11
+ export declare enum CustomerCreditCardsActionType {
12
+ FetchCustomerCreditCards = "customer/fetchCustomerCreditCards",
13
+ UpdateCustomerCreditCard = "customer/updateCustomerCreditCard",
14
+ RemoveCustomerCreditCard = "customer/removeCustomerCreditCard",
15
+ AddCustomerCreditCard = "customer/addCustomerCreditCard"
16
+ }
17
+ export declare const fetchCustomerCreditCards: import("@reduxjs/toolkit").AsyncThunk<CreditCards, boolean, {
18
+ state: AppState;
19
+ rejectValue: RequestError;
20
+ }>;
21
+ export declare const updateCustomerCreditCard: import("@reduxjs/toolkit").AsyncThunk<CreditCards, {
22
+ cardId: number;
23
+ data: CreditCard;
24
+ callback?: (() => void) | undefined;
25
+ }, {
26
+ state: AppState;
27
+ rejectValue: RequestError;
28
+ }>;
29
+ export declare const removeCustomerCreditCard: import("@reduxjs/toolkit").AsyncThunk<CreditCards, {
30
+ cardId: number;
31
+ callback?: (() => void) | undefined;
32
+ }, {
33
+ state: AppState;
34
+ rejectValue: RequestError;
35
+ }>;
36
+ export declare const addCustomerCreditCard: import("@reduxjs/toolkit").AsyncThunk<CreditCards, {
37
+ data: CreditCard;
38
+ callback?: (() => void) | undefined;
39
+ }, {
40
+ state: AppState;
41
+ rejectValue: RequestError;
42
+ }>;
43
+ export declare const resetCustomerCreditCards: import("@reduxjs/toolkit").ActionCreatorWithoutPayload<string>, resetCustomerCreditCardsError: import("@reduxjs/toolkit").ActionCreatorWithoutPayload<string>, setCustomerCreditCards: import("@reduxjs/toolkit").ActionCreatorWithPayload<any, string>;
44
+ export declare const selectCustomerCreditCards: (state: AppState) => CustomerCreditCardsState;
45
+ export declare const selectCustomerCreditCardsForPayment: (state: AppState) => CreditCard[];
46
+ export declare const customerCreditCardsReducer: import("redux").Reducer<CustomerCreditCardsState, import("redux").AnyAction>;
@@ -0,0 +1,166 @@
1
+ import { __awaiter } from "tslib";
2
+ import { createAsyncThunk, createSlice } from '@reduxjs/toolkit';
3
+ import { ReducerType } from '../types';
4
+ import { MISSING_CUSTOMER } from '@open-tender/types';
5
+ import { checkAuth, selectToken } from './account';
6
+ import { showNotification } from '../notifications';
7
+ import { makeFormErrors } from '@open-tender/utils';
8
+ const initialState = {
9
+ entities: [],
10
+ lookup: {},
11
+ loading: 'idle',
12
+ error: null
13
+ };
14
+ export var CustomerCreditCardsActionType;
15
+ (function (CustomerCreditCardsActionType) {
16
+ CustomerCreditCardsActionType["FetchCustomerCreditCards"] = "customer/fetchCustomerCreditCards";
17
+ CustomerCreditCardsActionType["UpdateCustomerCreditCard"] = "customer/updateCustomerCreditCard";
18
+ CustomerCreditCardsActionType["RemoveCustomerCreditCard"] = "customer/removeCustomerCreditCard";
19
+ CustomerCreditCardsActionType["AddCustomerCreditCard"] = "customer/addCustomerCreditCard";
20
+ })(CustomerCreditCardsActionType || (CustomerCreditCardsActionType = {}));
21
+ export const fetchCustomerCreditCards = createAsyncThunk(CustomerCreditCardsActionType.FetchCustomerCreditCards, (includeLinked, { dispatch, getState, rejectWithValue }) => __awaiter(void 0, void 0, void 0, function* () {
22
+ try {
23
+ const api = getState().config.api;
24
+ const token = selectToken(getState());
25
+ if (!token)
26
+ throw new Error(MISSING_CUSTOMER);
27
+ const creditCards = yield api.getCustomerCreditCards(token, includeLinked);
28
+ return creditCards;
29
+ }
30
+ catch (err) {
31
+ const error = err;
32
+ return checkAuth(error, dispatch, () => rejectWithValue(error));
33
+ }
34
+ }));
35
+ export const updateCustomerCreditCard = createAsyncThunk(CustomerCreditCardsActionType.UpdateCustomerCreditCard, (requestData, { dispatch, getState, rejectWithValue }) => __awaiter(void 0, void 0, void 0, function* () {
36
+ try {
37
+ const api = getState().config.api;
38
+ const token = selectToken(getState());
39
+ if (!token)
40
+ throw new Error(MISSING_CUSTOMER);
41
+ yield api.putCustomerCreditCard(token, requestData.cardId, requestData.data);
42
+ const includeLinked = true;
43
+ const creditCards = yield api.getCustomerCreditCards(token, includeLinked);
44
+ dispatch(showNotification('Credit card updated!'));
45
+ if (requestData.callback)
46
+ requestData.callback();
47
+ return creditCards;
48
+ }
49
+ catch (err) {
50
+ const error = err;
51
+ const errors = makeFormErrors(error);
52
+ return checkAuth(error, dispatch, () => rejectWithValue(errors));
53
+ }
54
+ }));
55
+ export const removeCustomerCreditCard = createAsyncThunk(CustomerCreditCardsActionType.RemoveCustomerCreditCard, (requestData, { dispatch, getState, rejectWithValue }) => __awaiter(void 0, void 0, void 0, function* () {
56
+ try {
57
+ const api = getState().config.api;
58
+ const token = selectToken(getState());
59
+ if (!token)
60
+ throw new Error(MISSING_CUSTOMER);
61
+ yield api.deleteCustomerCreditCard(token, requestData.cardId);
62
+ const includeLinked = true;
63
+ const creditCards = yield api.getCustomerCreditCards(token, includeLinked);
64
+ dispatch(showNotification('Credit card removed!'));
65
+ if (requestData.callback)
66
+ requestData.callback();
67
+ return creditCards;
68
+ }
69
+ catch (err) {
70
+ const error = err;
71
+ return checkAuth(error, dispatch, () => rejectWithValue(error));
72
+ }
73
+ }));
74
+ export const addCustomerCreditCard = createAsyncThunk(CustomerCreditCardsActionType.AddCustomerCreditCard, (requestData, { dispatch, getState, rejectWithValue }) => __awaiter(void 0, void 0, void 0, function* () {
75
+ try {
76
+ const api = getState().config.api;
77
+ const token = selectToken(getState());
78
+ if (!token)
79
+ throw new Error(MISSING_CUSTOMER);
80
+ yield api.postCustomerCreditCard(token, requestData.data);
81
+ const includeLinked = true;
82
+ const creditCards = yield api.getCustomerCreditCards(token, includeLinked);
83
+ dispatch(showNotification('Credit card added!'));
84
+ if (requestData.callback)
85
+ requestData.callback();
86
+ return creditCards;
87
+ }
88
+ catch (err) {
89
+ const error = err;
90
+ const errors = makeFormErrors(error);
91
+ return checkAuth(error, dispatch, () => rejectWithValue(errors));
92
+ }
93
+ }));
94
+ const customerCreditCardsSlice = createSlice({
95
+ name: ReducerType.CreditCards,
96
+ initialState,
97
+ reducers: {
98
+ resetCustomerCreditCards: () => initialState,
99
+ resetCustomerCreditCardsError: state => {
100
+ state.error = null;
101
+ state.loading = 'idle';
102
+ },
103
+ setCustomerCreditCards: (state, action) => {
104
+ state.entities = action.payload;
105
+ state.error = null;
106
+ }
107
+ },
108
+ extraReducers: builder => {
109
+ builder
110
+ .addCase(fetchCustomerCreditCards.fulfilled, (state, action) => {
111
+ state.entities = action.payload;
112
+ state.loading = 'idle';
113
+ state.error = null;
114
+ })
115
+ .addCase(fetchCustomerCreditCards.pending, state => {
116
+ state.loading = 'pending';
117
+ })
118
+ .addCase(fetchCustomerCreditCards.rejected, (state, action) => {
119
+ state.error = action.payload;
120
+ state.loading = 'idle';
121
+ })
122
+ .addCase(updateCustomerCreditCard.fulfilled, (state, action) => {
123
+ state.entities = action.payload;
124
+ state.loading = 'idle';
125
+ state.error = null;
126
+ })
127
+ .addCase(updateCustomerCreditCard.pending, state => {
128
+ state.loading = 'pending';
129
+ })
130
+ .addCase(updateCustomerCreditCard.rejected, (state, action) => {
131
+ state.error = action.payload;
132
+ state.loading = 'idle';
133
+ })
134
+ .addCase(removeCustomerCreditCard.fulfilled, (state, action) => {
135
+ state.entities = action.payload;
136
+ state.loading = 'idle';
137
+ state.error = null;
138
+ })
139
+ .addCase(removeCustomerCreditCard.pending, state => {
140
+ state.loading = 'pending';
141
+ })
142
+ .addCase(removeCustomerCreditCard.rejected, (state, action) => {
143
+ state.error = action.payload;
144
+ state.loading = 'idle';
145
+ })
146
+ .addCase(addCustomerCreditCard.fulfilled, (state, action) => {
147
+ state.entities = action.payload;
148
+ state.loading = 'idle';
149
+ state.error = null;
150
+ })
151
+ .addCase(addCustomerCreditCard.pending, state => {
152
+ state.loading = 'pending';
153
+ })
154
+ .addCase(addCustomerCreditCard.rejected, (state, action) => {
155
+ state.error = action.payload;
156
+ state.loading = 'idle';
157
+ });
158
+ }
159
+ });
160
+ export const { resetCustomerCreditCards, resetCustomerCreditCardsError, setCustomerCreditCards } = customerCreditCardsSlice.actions;
161
+ export const selectCustomerCreditCards = (state) => state.customer.creditCards;
162
+ export const selectCustomerCreditCardsForPayment = (state) => {
163
+ const creditCards = state.customer.creditCards.entities;
164
+ return creditCards.filter(i => i.has_profile);
165
+ };
166
+ export const customerCreditCardsReducer = customerCreditCardsSlice.reducer;