@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.
- package/LICENSE.md +21 -0
- package/README.md +3 -0
- package/dist/cjs/app/hooks.d.ts +50 -0
- package/dist/cjs/app/hooks.js +8 -0
- package/dist/cjs/app/index.d.ts +1 -0
- package/dist/cjs/app/index.js +4 -0
- package/dist/cjs/app/store.d.ts +146 -0
- package/dist/cjs/app/store.js +51 -0
- package/dist/cjs/index.d.ts +3 -0
- package/dist/cjs/index.js +7 -0
- package/dist/cjs/services/api.d.ts +162 -0
- package/dist/cjs/services/api.js +691 -0
- package/dist/cjs/services/errors.d.ts +50 -0
- package/dist/cjs/services/errors.js +53 -0
- package/dist/cjs/services/index.d.ts +2 -0
- package/dist/cjs/services/index.js +6 -0
- package/dist/cjs/slices/alerts.d.ts +5 -0
- package/dist/cjs/slices/alerts.js +28 -0
- package/dist/cjs/slices/allergens.d.ts +19 -0
- package/dist/cjs/slices/allergens.js +66 -0
- package/dist/cjs/slices/announcements.d.ts +28 -0
- package/dist/cjs/slices/announcements.js +77 -0
- package/dist/cjs/slices/checkout.d.ts +38 -0
- package/dist/cjs/slices/checkout.js +276 -0
- package/dist/cjs/slices/completedOrders.d.ts +25 -0
- package/dist/cjs/slices/completedOrders.js +61 -0
- package/dist/cjs/slices/config.d.ts +87 -0
- package/dist/cjs/slices/config.js +121 -0
- package/dist/cjs/slices/confirmation.d.ts +8 -0
- package/dist/cjs/slices/confirmation.js +22 -0
- package/dist/cjs/slices/customer/account.d.ts +59 -0
- package/dist/cjs/slices/customer/account.js +288 -0
- package/dist/cjs/slices/customer/addresses.d.ts +37 -0
- package/dist/cjs/slices/customer/addresses.js +134 -0
- package/dist/cjs/slices/customer/allergens.d.ts +25 -0
- package/dist/cjs/slices/customer/allergens.js +94 -0
- package/dist/cjs/slices/customer/communicationPreferences.d.ts +44 -0
- package/dist/cjs/slices/customer/communicationPreferences.js +165 -0
- package/dist/cjs/slices/customer/creditCards.d.ts +46 -0
- package/dist/cjs/slices/customer/creditCards.js +172 -0
- package/dist/cjs/slices/customer/favorites.d.ts +45 -0
- package/dist/cjs/slices/customer/favorites.js +176 -0
- package/dist/cjs/slices/customer/fcmToken.d.ts +31 -0
- package/dist/cjs/slices/customer/fcmToken.js +110 -0
- package/dist/cjs/slices/customer/giftCards.d.ts +62 -0
- package/dist/cjs/slices/customer/giftCards.js +196 -0
- package/dist/cjs/slices/customer/groupOrders.d.ts +33 -0
- package/dist/cjs/slices/customer/groupOrders.js +148 -0
- package/dist/cjs/slices/customer/houseAccounts.d.ts +20 -0
- package/dist/cjs/slices/customer/houseAccounts.js +67 -0
- package/dist/cjs/slices/customer/index.d.ts +29 -0
- package/dist/cjs/slices/customer/index.js +52 -0
- package/dist/cjs/slices/customer/levelup.d.ts +36 -0
- package/dist/cjs/slices/customer/levelup.js +128 -0
- package/dist/cjs/slices/customer/loyalty.d.ts +27 -0
- package/dist/cjs/slices/customer/loyalty.js +87 -0
- package/dist/cjs/slices/customer/order.d.ts +25 -0
- package/dist/cjs/slices/customer/order.js +84 -0
- package/dist/cjs/slices/customer/orders.d.ts +20 -0
- package/dist/cjs/slices/customer/orders.js +67 -0
- package/dist/cjs/slices/customer/qrCode.d.ts +17 -0
- package/dist/cjs/slices/customer/qrCode.js +57 -0
- package/dist/cjs/slices/customer/rewards.d.ts +20 -0
- package/dist/cjs/slices/customer/rewards.js +67 -0
- package/dist/cjs/slices/customer/thanx.d.ts +17 -0
- package/dist/cjs/slices/customer/thanx.js +57 -0
- package/dist/cjs/slices/deals.d.ts +19 -0
- package/dist/cjs/slices/deals.js +97 -0
- package/dist/cjs/slices/donations.d.ts +26 -0
- package/dist/cjs/slices/donations.js +62 -0
- package/dist/cjs/slices/giftCards.d.ts +26 -0
- package/dist/cjs/slices/giftCards.js +63 -0
- package/dist/cjs/slices/groupOrder.d.ts +80 -0
- package/dist/cjs/slices/groupOrder.js +226 -0
- package/dist/cjs/slices/guest.d.ts +38 -0
- package/dist/cjs/slices/guest.js +101 -0
- package/dist/cjs/slices/index.d.ts +27 -0
- package/dist/cjs/slices/index.js +30 -0
- package/dist/cjs/slices/levelup.d.ts +18 -0
- package/dist/cjs/slices/levelup.js +51 -0
- package/dist/cjs/slices/menu.d.ts +22 -0
- package/dist/cjs/slices/menu.js +86 -0
- package/dist/cjs/slices/menuDisplay.d.ts +26 -0
- package/dist/cjs/slices/menuDisplay.js +59 -0
- package/dist/cjs/slices/menuItems.d.ts +20 -0
- package/dist/cjs/slices/menuItems.js +57 -0
- package/dist/cjs/slices/notifications.d.ts +5 -0
- package/dist/cjs/slices/notifications.js +27 -0
- package/dist/cjs/slices/order.d.ts +77 -0
- package/dist/cjs/slices/order.js +426 -0
- package/dist/cjs/slices/orderFulfillment.d.ts +29 -0
- package/dist/cjs/slices/orderFulfillment.js +83 -0
- package/dist/cjs/slices/orderRating.d.ts +34 -0
- package/dist/cjs/slices/orderRating.js +108 -0
- package/dist/cjs/slices/orders.d.ts +86 -0
- package/dist/cjs/slices/orders.js +311 -0
- package/dist/cjs/slices/resetPassword.d.ts +29 -0
- package/dist/cjs/slices/resetPassword.js +83 -0
- package/dist/cjs/slices/revenueCenters.d.ts +35 -0
- package/dist/cjs/slices/revenueCenters.js +95 -0
- package/dist/cjs/slices/signUp.d.ts +19 -0
- package/dist/cjs/slices/signUp.js +52 -0
- package/dist/cjs/slices/types.d.ts +43 -0
- package/dist/cjs/slices/types.js +47 -0
- package/dist/cjs/slices/validTimes.d.ts +17 -0
- package/dist/cjs/slices/validTimes.js +57 -0
- package/dist/cjs/slices/verifyAccount.d.ts +17 -0
- package/dist/cjs/slices/verifyAccount.js +54 -0
- package/dist/esm/app/hooks.d.ts +50 -0
- package/dist/esm/app/hooks.js +4 -0
- package/dist/esm/app/index.d.ts +1 -0
- package/dist/esm/app/index.js +1 -0
- package/dist/esm/app/store.d.ts +146 -0
- package/dist/esm/app/store.js +48 -0
- package/dist/esm/index.d.ts +3 -0
- package/dist/esm/index.js +3 -0
- package/dist/esm/services/api.d.ts +162 -0
- package/dist/esm/services/api.js +689 -0
- package/dist/esm/services/errors.d.ts +50 -0
- package/dist/esm/services/errors.js +50 -0
- package/dist/esm/services/index.d.ts +2 -0
- package/dist/esm/services/index.js +2 -0
- package/dist/esm/slices/alerts.d.ts +5 -0
- package/dist/esm/slices/alerts.js +23 -0
- package/dist/esm/slices/allergens.d.ts +19 -0
- package/dist/esm/slices/allergens.js +60 -0
- package/dist/esm/slices/announcements.d.ts +28 -0
- package/dist/esm/slices/announcements.js +71 -0
- package/dist/esm/slices/checkout.d.ts +38 -0
- package/dist/esm/slices/checkout.js +268 -0
- package/dist/esm/slices/completedOrders.d.ts +25 -0
- package/dist/esm/slices/completedOrders.js +57 -0
- package/dist/esm/slices/config.d.ts +87 -0
- package/dist/esm/slices/config.js +102 -0
- package/dist/esm/slices/confirmation.d.ts +8 -0
- package/dist/esm/slices/confirmation.js +18 -0
- package/dist/esm/slices/customer/account.d.ts +59 -0
- package/dist/esm/slices/customer/account.js +282 -0
- package/dist/esm/slices/customer/addresses.d.ts +37 -0
- package/dist/esm/slices/customer/addresses.js +129 -0
- package/dist/esm/slices/customer/allergens.d.ts +25 -0
- package/dist/esm/slices/customer/allergens.js +89 -0
- package/dist/esm/slices/customer/communicationPreferences.d.ts +44 -0
- package/dist/esm/slices/customer/communicationPreferences.js +161 -0
- package/dist/esm/slices/customer/creditCards.d.ts +46 -0
- package/dist/esm/slices/customer/creditCards.js +166 -0
- package/dist/esm/slices/customer/favorites.d.ts +45 -0
- package/dist/esm/slices/customer/favorites.js +171 -0
- package/dist/esm/slices/customer/fcmToken.d.ts +31 -0
- package/dist/esm/slices/customer/fcmToken.js +106 -0
- package/dist/esm/slices/customer/giftCards.d.ts +62 -0
- package/dist/esm/slices/customer/giftCards.js +191 -0
- package/dist/esm/slices/customer/groupOrders.d.ts +33 -0
- package/dist/esm/slices/customer/groupOrders.js +143 -0
- package/dist/esm/slices/customer/houseAccounts.d.ts +20 -0
- package/dist/esm/slices/customer/houseAccounts.js +62 -0
- package/dist/esm/slices/customer/index.d.ts +29 -0
- package/dist/esm/slices/customer/index.js +48 -0
- package/dist/esm/slices/customer/levelup.d.ts +36 -0
- package/dist/esm/slices/customer/levelup.js +123 -0
- package/dist/esm/slices/customer/loyalty.d.ts +27 -0
- package/dist/esm/slices/customer/loyalty.js +79 -0
- package/dist/esm/slices/customer/order.d.ts +25 -0
- package/dist/esm/slices/customer/order.js +79 -0
- package/dist/esm/slices/customer/orders.d.ts +20 -0
- package/dist/esm/slices/customer/orders.js +62 -0
- package/dist/esm/slices/customer/qrCode.d.ts +17 -0
- package/dist/esm/slices/customer/qrCode.js +53 -0
- package/dist/esm/slices/customer/rewards.d.ts +20 -0
- package/dist/esm/slices/customer/rewards.js +62 -0
- package/dist/esm/slices/customer/thanx.d.ts +17 -0
- package/dist/esm/slices/customer/thanx.js +53 -0
- package/dist/esm/slices/deals.d.ts +19 -0
- package/dist/esm/slices/deals.js +91 -0
- package/dist/esm/slices/donations.d.ts +26 -0
- package/dist/esm/slices/donations.js +58 -0
- package/dist/esm/slices/giftCards.d.ts +26 -0
- package/dist/esm/slices/giftCards.js +59 -0
- package/dist/esm/slices/groupOrder.d.ts +80 -0
- package/dist/esm/slices/groupOrder.js +216 -0
- package/dist/esm/slices/guest.d.ts +38 -0
- package/dist/esm/slices/guest.js +97 -0
- package/dist/esm/slices/index.d.ts +27 -0
- package/dist/esm/slices/index.js +27 -0
- package/dist/esm/slices/levelup.d.ts +18 -0
- package/dist/esm/slices/levelup.js +48 -0
- package/dist/esm/slices/menu.d.ts +22 -0
- package/dist/esm/slices/menu.js +81 -0
- package/dist/esm/slices/menuDisplay.d.ts +26 -0
- package/dist/esm/slices/menuDisplay.js +55 -0
- package/dist/esm/slices/menuItems.d.ts +20 -0
- package/dist/esm/slices/menuItems.js +52 -0
- package/dist/esm/slices/notifications.d.ts +5 -0
- package/dist/esm/slices/notifications.js +22 -0
- package/dist/esm/slices/order.d.ts +77 -0
- package/dist/esm/slices/order.js +423 -0
- package/dist/esm/slices/orderFulfillment.d.ts +29 -0
- package/dist/esm/slices/orderFulfillment.js +79 -0
- package/dist/esm/slices/orderRating.d.ts +34 -0
- package/dist/esm/slices/orderRating.js +104 -0
- package/dist/esm/slices/orders.d.ts +86 -0
- package/dist/esm/slices/orders.js +302 -0
- package/dist/esm/slices/resetPassword.d.ts +29 -0
- package/dist/esm/slices/resetPassword.js +79 -0
- package/dist/esm/slices/revenueCenters.d.ts +35 -0
- package/dist/esm/slices/revenueCenters.js +89 -0
- package/dist/esm/slices/signUp.d.ts +19 -0
- package/dist/esm/slices/signUp.js +48 -0
- package/dist/esm/slices/types.d.ts +43 -0
- package/dist/esm/slices/types.js +44 -0
- package/dist/esm/slices/validTimes.d.ts +17 -0
- package/dist/esm/slices/validTimes.js +52 -0
- package/dist/esm/slices/verifyAccount.d.ts +17 -0
- package/dist/esm/slices/verifyAccount.js +50 -0
- 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;
|