@r3l/app
Version:
260 lines (207 loc) • 9.83 kB
JavaScript
"use strict";
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
var _typeof = require("@babel/runtime/helpers/typeof");
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.CashoutHandler = void 0;
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 = _interopRequireWildcard(require("react"));
var _reactRedux = require("react-redux");
var _web = require("../../styled/web");
var _wallet = require("../wallet.actions");
var _earnings = require("../earnings.actions");
var _common = require("@r3l/common");
var _tooltip = _interopRequireDefault(require("../../tooltip/tooltip.component"));
var _price = require("../price.context");
var _cashoutFooter = require("./cashoutFooter");
var _styled = require("../../styled");
var _hooks = require("../../../web3/hooks");
var _utils = require("../../../web3/utils");
var _claimUtils = require("./claimUtils");
var _navigation = require("../../navigation/navigation.actions");
function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || _typeof(obj) !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
var CashoutHandler = function CashoutHandler(_ref) {
var canClaim = _ref.canClaim,
close = _ref.close;
var _useState = (0, _react.useState)(''),
_useState2 = (0, _slicedToArray2.default)(_useState, 2),
token = _useState2[0],
setToken = _useState2[1];
var user = (0, _reactRedux.useSelector)(function (state) {
return state.auth.user;
});
var _useWeb3React = (0, _hooks.useWeb3React)(),
account = _useWeb3React.account;
var unclaimedSig = (0, _claimUtils.useUnclaimedSig)(user, account);
var unclaimedVest = (0, _claimUtils.useUnclaimedVest)(account);
var unclaimedUnvestedTokens = ((unclaimedVest === null || unclaimedVest === void 0 ? void 0 : unclaimedVest.shortVest) || 0) + ((unclaimedVest === null || unclaimedVest === void 0 ? void 0 : unclaimedVest.longVest) || 0) || user.unvestedTokens;
var _useTx = (0, _hooks.useTx)(),
sendTx = _useTx.sendTx,
txStatus = _useTx.txStatus;
var rel = (0, _hooks.useRel)();
var maxClaim = Math.min(canClaim, Math.max(_common.CASHOUT_MAX - user.cashedOut + user.pendingCashout, 0));
var pendingTx = txStatus === _utils.TX_STATUS.PENDING;
var initAmnt = maxClaim;
var _useState3 = (0, _react.useState)(initAmnt),
_useState4 = (0, _slicedToArray2.default)(_useState3, 2),
amount = _useState4[0],
setAmount = _useState4[1];
var dispatch = (0, _reactRedux.useDispatch)();
var maxUSD = (0, _price.usePrice)(maxClaim);
var _useVerifyEmail = (0, _claimUtils.useVerifyEmail)(),
verifyEmail = _useVerifyEmail.verifyEmail,
sendEmail = _useVerifyEmail.sendEmail,
sendingEmail = _useVerifyEmail.sendingEmail,
emailError = _useVerifyEmail.emailError;
var startClaim = /*#__PURE__*/function () {
var _ref2 = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee() {
return _regenerator.default.wrap(function _callee$(_context) {
while (1) {
switch (_context.prev = _context.next) {
case 0:
if (!(user.email && user.confirmed && !token)) {
_context.next = 2;
break;
}
return _context.abrupt("return", verifyEmail());
case 2:
return _context.abrupt("return", cashOut());
case 3:
case "end":
return _context.stop();
}
}
}, _callee);
}));
return function startClaim() {
return _ref2.apply(this, arguments);
};
}();
var cashOut = /*#__PURE__*/function () {
var _ref3 = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee2() {
var res, amnt, sig;
return _regenerator.default.wrap(function _callee2$(_context2) {
while (1) {
switch (_context2.prev = _context2.next) {
case 0:
_context2.next = 2;
return dispatch((0, _wallet.cashOutCall)(amount, token));
case 2:
res = _context2.sent;
if (res) {
_context2.next = 5;
break;
}
return _context2.abrupt("return");
case 5:
amnt = res.amnt, sig = res.sig;
if (rel) {
_context2.next = 9;
break;
}
// eslint-disable-next-line no-console
console.error('Missing contract');
return _context2.abrupt("return");
case 9:
sendTx(rel, 'claimTokens', [amnt, sig]);
case 10:
case "end":
return _context2.stop();
}
}
}, _callee2);
}));
return function cashOut() {
return _ref3.apply(this, arguments);
};
}();
(0, _react.useEffect)(function () {
if (txStatus === _utils.TX_STATUS.CONFIRMED) {
var _user$cashOut;
dispatch((0, _earnings.updateCashoutLog)(user === null || user === void 0 ? void 0 : (_user$cashOut = user.cashOut) === null || _user$cashOut === void 0 ? void 0 : _user$cashOut.earning));
close();
}
}, [txStatus, dispatch]);
var minAmnt = (unclaimedSig === null || unclaimedSig === void 0 ? void 0 : unclaimedSig.amount) || 0;
var validateAmount = function validateAmount(value) {
return value < 0 ? 0 : value > maxClaim ? maxClaim : value;
}; // const showUnclamedWarning = unclaimedSig && !pendingTx;
if (sendEmail && !txStatus) return /*#__PURE__*/_react.default.createElement(_claimUtils.VerifyEmail, {
email: user.email,
cashOut: cashOut,
setToken: setToken,
token: token
});
return /*#__PURE__*/_react.default.createElement(_react.Fragment, null, (0, _claimUtils.renderWarnings)(false, emailError), /*#__PURE__*/_react.default.createElement(_styled.Row, null, /*#__PURE__*/_react.default.createElement(_styled.View, {
sx: {
flex: 1,
mr: 1
}
}, /*#__PURE__*/_react.default.createElement(_web.Input, {
sx: {
height: 5,
mt: 0,
flex: 1,
fontSize: amount ? 5 : 4,
px: 1,
py: 0,
fontWeight: 'bold'
},
type: "number",
onChange: function onChange(_ref4) {
var value = _ref4.target.value;
return setAmount(validateAmount(value));
},
value: amount
})), /*#__PURE__*/_react.default.createElement(_styled.Button, {
disabled: !amount || amount < minAmnt || amount === 0,
sx: {
height: 8,
mr: 'auto'
},
onPress: startClaim
}, "Transfer coins to wallet")), amount < minAmnt || amount == 0 ? /*#__PURE__*/_react.default.createElement(_styled.SmallText, {
sx: {
color: 'red'
}
}, "amount must be greater ", minAmnt, " REL") : null, ' ', /*#__PURE__*/_react.default.createElement(_styled.Row, null, /*#__PURE__*/_react.default.createElement(_styled.View, null, /*#__PURE__*/_react.default.createElement(_styled.SecondaryText, {
sx: {
mt: 1,
mr: 2
},
onPress: function onPress() {
return setAmount(maxClaim);
}
}, /*#__PURE__*/_react.default.createElement(_tooltip.default, {
data: {
text: 'This is the maximum amount of coins you can claim at this time.'
}
}), "Maximum claim: ", maxClaim, maxUSD, " Coins")), /*#__PURE__*/_react.default.createElement(_styled.View, null, /*#__PURE__*/_react.default.createElement(_styled.SecondaryText, {
sx: {
mt: 1
}
}, /*#__PURE__*/_react.default.createElement(_tooltip.default, {
data: {
text: 'Total unclaimed coins.'
}
}), "Unclaimed: ", canClaim, " Coins"))), unclaimedUnvestedTokens ? /*#__PURE__*/_react.default.createElement(_styled.Row, {
sx: {
mt: 4
}
}, /*#__PURE__*/_react.default.createElement(_styled.BodyText, null, "You have ", unclaimedUnvestedTokens, " unvested tokens. "), /*#__PURE__*/_react.default.createElement(_styled.BodyText, {
onPress: function onPress() {
return dispatch((0, _navigation.showModal)('vest'));
},
sx: {
color: 'blue'
}
}, "Claim Unvested Tokens")) : null, /*#__PURE__*/_react.default.createElement(_cashoutFooter.CashoutFooter, null), pendingTx || sendingEmail ? /*#__PURE__*/_react.default.createElement(_claimUtils.Progress, {
type: sendingEmail && !pendingTx ? _claimUtils.ProgressType.EMAIL : _claimUtils.ProgressType.TX
}) : null);
};
exports.CashoutHandler = CashoutHandler;
//# sourceMappingURL=cashoutHandler.js.map