@r3l/app
Version:
232 lines (188 loc) • 6.73 kB
JavaScript
;
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.useCastVote = useCastVote;
exports.useVoteAnimation = useVoteAnimation;
var _regenerator = _interopRequireDefault(require("@babel/runtime/regenerator"));
var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator"));
var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
var _react = require("react");
var _reactRedux = require("react-redux");
var _alert = require("../../../utils/alert");
var _navigation = require("../../navigation/navigation.actions");
var _hooks = require("../../auth/hooks");
var _utils = require("../../../utils");
var _launchAnimation = _interopRequireDefault(require("./launchAnimation"));
var _invest = require("../invest.actions");
var _Alert = (0, _alert.Alert)(),
alert = _Alert.alert;
var ReactGA;
if (process.env.WEB === 'true') {
ReactGA = require('react-ga').default;
}
function useCastVote(_ref) {
var post = _ref.post,
userId = _ref.userId,
canBet = _ref.canBet;
var dispatch = (0, _reactRedux.useDispatch)();
var _useState = (0, _react.useState)(false),
_useState2 = (0, _slicedToArray2.default)(_useState, 2),
processingVote = _useState2[0],
setProcessingVote = _useState2[1]; // const displayBetPrompt = showBetPrompt({ post, community, user });
var displayBetPrompt = false;
var hasAuth = (0, _hooks.useAuth)();
return (0, _react.useCallback)( /*#__PURE__*/function () {
var _ref2 = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee(e, vote, amount) {
var type, res;
return _regenerator.default.wrap(function _callee$(_context) {
while (1) {
switch (_context.prev = _context.next) {
case 0:
_context.prev = 0;
e.preventDefault();
e.stopPropagation();
if (!processingVote) {
_context.next = 5;
break;
}
return _context.abrupt("return");
case 5:
if (hasAuth()) {
_context.next = 7;
break;
}
return _context.abrupt("return");
case 7:
type = amount > 0 ? 'upvote' : 'downvote';
if (!(vote && vote.isManualBet && type === 'upvote' && canBet)) {
_context.next = 11;
break;
}
showBetModal({
dispatch: dispatch,
postId: post._id
});
return _context.abrupt("return");
case 11:
setProcessingVote(true);
_context.next = 14;
return dispatch((0, _invest.vote)({
amount: amount,
post: post,
userId: userId,
vote: vote,
displayBetPrompt: displayBetPrompt
}));
case 14:
res = _context.sent;
setProcessingVote(false);
if (!(!res || res.undoInvest)) {
_context.next = 18;
break;
}
return _context.abrupt("return");
case 18:
type === 'upvote' && canBet && showBetModal({
dispatch: dispatch,
postId: post._id
});
runAnalytics(type);
_context.next = 26;
break;
case 22:
_context.prev = 22;
_context.t0 = _context["catch"](0);
setProcessingVote(false);
alert(_context.t0.message);
case 26:
case "end":
return _context.stop();
}
}
}, _callee, null, [[0, 22]]);
}));
return function (_x, _x2, _x3) {
return _ref2.apply(this, arguments);
};
}(), [processingVote, hasAuth, dispatch, post, userId, displayBetPrompt, canBet]);
}
function useVoteAnimation(_ref3) {
var post = _ref3.post,
investButton = _ref3.investButton,
horizontal = _ref3.horizontal;
var dispatch = (0, _reactRedux.useDispatch)();
var newVote = (0, _reactRedux.useSelector)(function (state) {
var _vote$post;
var vote = state.investments.voteSuccess;
var postId = (vote === null || vote === void 0 ? void 0 : (_vote$post = vote.post) === null || _vote$post === void 0 ? void 0 : _vote$post._id) || (vote === null || vote === void 0 ? void 0 : vote.post);
return postId === post._id && vote;
});
(0, _react.useEffect)(function () {
if (!(newVote !== null && newVote !== void 0 && newVote._id)) return;
var rankChange = computeRankChange({
post: post,
rankChange: newVote.rankChange
});
var type = newVote.amount >= 0 ? 'upvote' : 'downvote';
var el = investButton;
var params = {
amount: rankChange,
horizontal: horizontal
};
if (newVote.isManualBet && newVote.stakedTokens > 0) {
params.amount = 0;
(0, _launchAnimation.default)({
type: 'bet',
params: params,
el: el,
dispatch: dispatch
});
} else {
(0, _launchAnimation.default)({
type: type,
params: params,
el: el,
dispatch: dispatch
});
} // clear new vote
dispatch((0, _invest.updatePostVote)());
}, [newVote]); // eslint-disable-line
} // function showBetPrompt({ post, community, user }) {
// if (!post) return false;
// const now = new Date();
// const bettingEnabled = community && community.betEnabled;
// const manualBet = user && user.notificationSettings.bet.manual;
// return (
// !manualBet &&
// bettingEnabled &&
// post.data &&
// post.data.eligibleForReward &&
// now.getTime() < new Date(post.data.payoutTime).getTime()
// );
// }
function showBetModal(_ref4) {
var dispatch = _ref4.dispatch,
postId = _ref4.postId;
setTimeout(function () {
return dispatch((0, _navigation.showModal)('investModal', {
postId: postId
}));
}, 1000);
}
function computeRankChange(_ref5) {
var post = _ref5.post,
rankChange = _ref5.rankChange;
var startRank = post.data ? post.data.pagerank : 0;
var total = startRank + rankChange + 1;
return Math.round(total) - Math.round(startRank);
}
function runAnalytics(type) {
_utils.Analytics && _utils.Analytics.logEvent(type);
ReactGA && ReactGA.event({
category: 'User',
action: "".concat(type, "ed a post")
});
}
//# sourceMappingURL=button.hooks.js.map