occsn-checkout
Version:
Occasion checkout experience boilerplate component built using React-Redux and Mitragyna
139 lines (112 loc) • 2.77 kB
JavaScript
import occsn from '../libs/Occasion';
import actionTypes from '../constants/appConstants';
export function constructOrder(product) {
return dispatch => {
dispatch(constructOrderRequest());
return occsn.Order.construct({ product, status: 'initialized' }).then(order => {
dispatch(setOrder(order));
});
};
}
export function constructOrderRequest() {
return {
type: actionTypes.OCCSN_CONSTRUCT_ORDER_REQUEST
};
}
export function bookOrder(order) {
return async (dispatch) => {
dispatch(bookOrderRequest());
try {
order = await order.update({ status: 'reserved' });
} catch(invalidOrder) {
order = invalidOrder;
}
dispatch(setOrder(order));
dispatch(bookOrderRequestComplete());
};
}
export function bookOrderRequest() {
return {
type: actionTypes.OCCSN_BOOK_ORDER_REQUEST
};
}
export function bookOrderRequestComplete(order) {
return {
type: actionTypes.OCCSN_BOOK_ORDER_REQUEST_COMPLETE,
order
};
}
export function findRedeemable(product, code, onSuccess, onError) {
return dispatch => {
dispatch(findRedeemableRequest());
return product.redeemables().findBy({ code })
.then(onSuccess, onError)
.finally(() => {
dispatch(findRedeemableRequestComplete());
});
};
}
export function findRedeemableRequest() {
return {
type: actionTypes.OCCSN_FIND_REDEEMABLE_REQUEST
};
}
export function findRedeemableRequestComplete() {
return {
type: actionTypes.OCCSN_FIND_REDEEMABLE_REQUEST_COMPLETE
};
}
export function loadProduct(id) {
return dispatch => {
dispatch(loadProductRequest());
var query =
occsn.Product
.includes({ merchant: 'currency', venue: 'state' })
.find(id);
return query.then(product => {
dispatch(setProduct(product));
dispatch(constructOrder(product));
});
};
}
export function loadProductRequest() {
return {
type: actionTypes.OCCSN_LOAD_PRODUCT_REQUEST
};
}
export function saveOrder(order) {
return async (dispatch) => {
dispatch(saveOrderRequest());
order = await order.save();
dispatch(setOrder(order));
dispatch(saveOrderRequestComplete());
};
}
export function saveOrderRequest() {
return {
type: actionTypes.OCCSN_SAVE_ORDER_REQUEST
};
}
export function saveOrderRequestComplete() {
return {
type: actionTypes.OCCSN_SAVE_ORDER_REQUEST_COMPLETE,
};
}
export function setOrder(order) {
return {
type: actionTypes.OCCSN_SET_ORDER,
order
};
}
export function setProduct(product) {
return {
type: actionTypes.OCCSN_SET_PRODUCT,
product
};
}
export function setSkipAttendees(skipAttendees) {
return {
type: actionTypes.OCCSN_SET_SKIP_ATTENDEES,
skipAttendees
};
}