@open-tender/cloud
Version:
A library of hooks, reducers, utility functions, and types for use with Open Tender applications that utilize our cloud-based Order API.
70 lines (69 loc) • 3.09 kB
JavaScript
;
var _a;
Object.defineProperty(exports, "__esModule", { value: true });
exports.customerOrdersReducer = exports.selectHasOrders = exports.selectCustomerOrders = exports.setCustomerOrders = exports.resetCustomerOrdersError = exports.resetCustomerOrders = exports.fetchCustomerOrders = exports.CustomerOrdersActionType = void 0;
const tslib_1 = require("tslib");
const toolkit_1 = require("@reduxjs/toolkit");
const types_1 = require("../types");
const types_2 = require("@open-tender/types");
const account_1 = require("./account");
const initialState = {
entities: [],
error: null,
loading: 'idle',
lookup: {}
};
var CustomerOrdersActionType;
(function (CustomerOrdersActionType) {
CustomerOrdersActionType["FetchCustomerOrders"] = "customer/fetchCustomerOrders";
})(CustomerOrdersActionType = exports.CustomerOrdersActionType || (exports.CustomerOrdersActionType = {}));
exports.fetchCustomerOrders = (0, toolkit_1.createAsyncThunk)(CustomerOrdersActionType.FetchCustomerOrders, (limit, { dispatch, getState, rejectWithValue }) => tslib_1.__awaiter(void 0, void 0, void 0, function* () {
try {
const api = getState().config.api;
const token = (0, account_1.selectToken)(getState());
if (!token)
throw new Error(types_2.MISSING_CUSTOMER);
const { data: orders } = yield api.getCustomerOrders(token, limit);
return orders.filter((i) => i.cart.length > 0);
}
catch (err) {
const error = err;
return (0, account_1.checkAuth)(error, dispatch, () => rejectWithValue(error));
}
}));
const customerOrdersSlice = (0, toolkit_1.createSlice)({
name: types_1.ReducerType.Orders,
initialState,
reducers: {
resetCustomerOrders: () => initialState,
resetCustomerOrdersError: state => {
state.error = null;
state.loading = 'idle';
},
setCustomerOrders: (state, action) => {
state.entities = action.payload;
state.error = null;
}
},
extraReducers: builder => {
builder
.addCase(exports.fetchCustomerOrders.fulfilled, (state, action) => {
state.entities = action.payload;
state.loading = 'idle';
state.error = null;
})
.addCase(exports.fetchCustomerOrders.pending, state => {
state.loading = 'pending';
})
.addCase(exports.fetchCustomerOrders.rejected, (state, action) => {
state.error = action.payload;
state.loading = 'idle';
});
}
});
_a = customerOrdersSlice.actions, exports.resetCustomerOrders = _a.resetCustomerOrders, exports.resetCustomerOrdersError = _a.resetCustomerOrdersError, exports.setCustomerOrders = _a.setCustomerOrders;
const selectCustomerOrders = (state) => state.customer.orders;
exports.selectCustomerOrders = selectCustomerOrders;
const selectHasOrders = (state) => state.customer.orders.entities.length > 0;
exports.selectHasOrders = selectHasOrders;
exports.customerOrdersReducer = customerOrdersSlice.reducer;