Files
Eventment/app/actions/auction.js

55 lines
1.4 KiB
JavaScript

import { placeBid as placeBidApi } from '../api/bid.js';
import {
BID_FAILURE,
BID_SUCCESS,
PLACE_BID,
SET_AUCTION_FILTER,
SET_AUCTION_VIEW_MODE,
} from '../constants/actionTypes.js';
import { getActiveEventId } from '../selectors/activeEvent.js';
import { getAuthToken } from '../selectors/auth.js';
const placeBidFailure = (payload) => ({
type: BID_FAILURE,
payload,
});
const placeBidSuccess = (payload) => ({
type: BID_SUCCESS,
payload,
});
const handleBidFailure = (error) => (dispatch) => {
console.error('[postBid]', error);
dispatch(placeBidFailure(error));
};
const handleBidSuccess = (result) => (dispatch) => {
dispatch(placeBidSuccess(result));
};
const startPlacingBid = (itemId) => ({
type: PLACE_BID,
payload: itemId,
});
export const changeFilterMode = (payload) => ({
type: SET_AUCTION_FILTER,
payload,
});
export const changeViewMode = (payload) => ({
type: SET_AUCTION_VIEW_MODE,
payload,
});
export const placeBid = ({ bidAmount, itemId, maxAmount }) => (dispatch, getState) => {
const authToken = getAuthToken(getState());
const eventId = getActiveEventId(getState());
dispatch(startPlacingBid(itemId));
placeBidApi({ bidAmount, eventId, itemId, maxAmount }, authToken)
.then((payload) => dispatch(handleBidSuccess(payload)))
.catch((err) => dispatch(handleBidFailure(err)));
};