@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.
64 lines (63 loc) • 2.67 kB
JavaScript
;
var _a;
Object.defineProperty(exports, "__esModule", { value: true });
exports.rewardCodeReducer = exports.selectRewardCode = exports.resetRewardCode = exports.claimReward = exports.claimRewardCode = exports.ClaimRewardCodeActionType = void 0;
const tslib_1 = require("tslib");
const types_1 = require("@open-tender/types");
const toolkit_1 = require("@reduxjs/toolkit");
const customer_1 = require("./customer");
const notifications_1 = require("./notifications");
const initialState = {
error: null,
loading: 'idle'
};
var ClaimRewardCodeActionType;
(function (ClaimRewardCodeActionType) {
ClaimRewardCodeActionType["ClaimRewardCode"] = "rewardCode/claimRewardCode";
})(ClaimRewardCodeActionType = exports.ClaimRewardCodeActionType || (exports.ClaimRewardCodeActionType = {}));
exports.claimRewardCode = (0, toolkit_1.createAsyncThunk)(ClaimRewardCodeActionType.ClaimRewardCode, ({ rewardCode, callback }, { dispatch, getState, rejectWithValue }) => tslib_1.__awaiter(void 0, void 0, void 0, function* () {
try {
const api = getState().config.api;
const token = (0, customer_1.selectToken)(getState());
if (!token)
throw new Error(types_1.MISSING_CUSTOMER);
const discount = yield api.postClaimRewardCode(token, rewardCode);
dispatch((0, notifications_1.showNotification)('Reward Code Claimed!'));
if (callback)
callback();
return discount;
}
catch (err) {
const error = err;
return (0, customer_1.checkAuth)(error, dispatch, () => rejectWithValue(error));
}
}));
const rewardCodeSlice = (0, toolkit_1.createSlice)({
name: 'rewardCode',
initialState: initialState,
reducers: {
resetRewardCode: () => initialState,
claimReward: state => {
state.error = null;
state.loading = 'idle';
}
},
extraReducers: builder => {
builder.addCase(exports.claimRewardCode.pending, state => {
state.error = null;
state.loading = 'pending';
});
builder.addCase(exports.claimRewardCode.fulfilled, state => {
state.error = null;
state.loading = 'idle';
});
builder.addCase(exports.claimRewardCode.rejected, (state, action) => {
state.error = action.payload;
state.loading = 'idle';
});
}
});
_a = rewardCodeSlice.actions, exports.claimReward = _a.claimReward, exports.resetRewardCode = _a.resetRewardCode;
const selectRewardCode = (state) => state.rewardCode;
exports.selectRewardCode = selectRewardCode;
exports.rewardCodeReducer = rewardCodeSlice.reducer;