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