@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.
66 lines (65 loc) • 2.46 kB
JavaScript
;
var _a;
Object.defineProperty(exports, "__esModule", { value: true });
exports.quoteReducer = exports.selectQuote = exports.setQuote = exports.resetQuoteError = exports.resetQuote = exports.fetchQuote = exports.QuoteActionType = void 0;
const tslib_1 = require("tslib");
const toolkit_1 = require("@reduxjs/toolkit");
const customer_1 = require("./customer");
const types_1 = require("./types");
const initialState = {
entity: null,
error: null,
loading: 'idle'
};
var QuoteActionType;
(function (QuoteActionType) {
QuoteActionType["FetchQuote"] = "customer/fetchQuote";
})(QuoteActionType = exports.QuoteActionType || (exports.QuoteActionType = {}));
exports.fetchQuote = (0, toolkit_1.createAsyncThunk)(QuoteActionType.FetchQuote, (orderUuid, { 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());
return yield api.getQuote(token, orderUuid);
}
catch (err) {
return rejectWithValue(err);
}
}));
const quoteSlice = (0, toolkit_1.createSlice)({
name: types_1.ReducerType.Quote,
initialState,
reducers: {
resetQuote: () => initialState,
resetQuoteError: state => {
state.error = null;
state.loading = 'idle';
},
setQuote: (state, action) => {
state.entity = action.payload;
state.error = null;
}
},
extraReducers: builder => {
builder
.addCase(exports.fetchQuote.fulfilled, (state, action) => {
state.entity = action.payload;
state.loading = 'idle';
state.error = null;
})
.addCase(exports.fetchQuote.pending, state => {
state.loading = 'pending';
})
.addCase(exports.fetchQuote.rejected, (state, action) => {
state.error = action.payload;
state.loading = 'idle';
});
}
});
_a = quoteSlice.actions, exports.resetQuote = _a.resetQuote, exports.resetQuoteError = _a.resetQuoteError, exports.setQuote = _a.setQuote;
exports.selectQuote = (0, toolkit_1.createSelector)((state) => {
const { entity: order, loading, error } = state.quote;
return { order, loading, error };
}, ({ order, loading, error }) => {
return { order, loading, error };
});
exports.quoteReducer = quoteSlice.reducer;