@ape.swap/bonds-sdk 6.0.7 → 6.1.0-test.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/config/abi/Vault_Shares.json.js +1540 -0
- package/dist/config/abi/Vault_Shares.json.js.map +1 -0
- package/dist/state/bonds/fetchBondsData/fetchBondsDataPreTGE.js +25 -2
- package/dist/state/bonds/fetchBondsData/fetchBondsDataPreTGE.js.map +1 -1
- package/dist/state/bonds/useBondsData.js +2 -1
- package/dist/state/bonds/useBondsData.js.map +1 -1
- package/dist/state/bonds/useBondsList.js +0 -20
- package/dist/state/bonds/useBondsList.js.map +1 -1
- package/dist/state/bonds/useBondsListPreTGE.d.ts +2 -2
- package/dist/state/bonds/useBondsListPreTGE.js +8 -20
- package/dist/state/bonds/useBondsListPreTGE.js.map +1 -1
- package/dist/state/bonds/useUserBondsPreTGE.d.ts +3 -0
- package/dist/state/bonds/useUserBondsPreTGE.js +74 -2
- package/dist/state/bonds/useUserBondsPreTGE.js.map +1 -1
- package/dist/types/bonds.d.ts +10 -0
- package/dist/utils/dates/formatDate.d.ts +1 -1
- package/dist/utils/dates/formatDate.js +7 -8
- package/dist/utils/dates/formatDate.js.map +1 -1
- package/dist/views/Bonds/Bonds.js +2 -0
- package/dist/views/Bonds/Bonds.js.map +1 -1
- package/dist/views/Bonds/components/BondRows/ActiveBondRows.js +1 -1
- package/dist/views/Bonds/components/BondRows/ActiveBondRows.js.map +1 -1
- package/dist/views/Bonds/components/BondRows/SoldOutRows.js +3 -1
- package/dist/views/Bonds/components/BondRows/SoldOutRows.js.map +1 -1
- package/dist/views/BuyBond/BuyComponentPreTGE.js +7 -2
- package/dist/views/BuyBond/BuyComponentPreTGE.js.map +1 -1
- package/dist/views/BuyBond/ParticipationSuccessful.js +20 -6
- package/dist/views/BuyBond/ParticipationSuccessful.js.map +1 -1
- package/dist/views/BuyBond/components/BondCards/BondCardsPreTGE.js +20 -4
- package/dist/views/BuyBond/components/BondCards/BondCardsPreTGE.js.map +1 -1
- package/dist/views/TransactionModal/TransactionModal.js +15 -4
- package/dist/views/TransactionModal/TransactionModal.js.map +1 -1
- package/dist/views/YourBonds/YourBonds.js +7 -1
- package/dist/views/YourBonds/YourBonds.js.map +1 -1
- package/dist/views/YourBonds/components/UserBondRow/PreTGEActions.js +23 -5
- package/dist/views/YourBonds/components/UserBondRow/PreTGEActions.js.map +1 -1
- package/dist/views/YourBonds/components/UserBondRow/UserBondRowYield.d.ts +6 -0
- package/dist/views/YourBonds/components/UserBondRow/UserBondRowYield.js +50 -0
- package/dist/views/YourBonds/components/UserBondRow/UserBondRowYield.js.map +1 -0
- package/dist/views/YourBondsModalYield/YourBondsModalYield.d.ts +7 -0
- package/dist/views/YourBondsModalYield/YourBondsModalYield.js +219 -0
- package/dist/views/YourBondsModalYield/YourBondsModalYield.js.map +1 -0
- package/dist/views/YourBondsModalYield/components/UnstakeModalYield/UnstakeModalYield.d.ts +8 -0
- package/dist/views/YourBondsModalYield/components/UnstakeModalYield/UnstakeModalYield.js +71 -0
- package/dist/views/YourBondsModalYield/components/UnstakeModalYield/UnstakeModalYield.js.map +1 -0
- package/dist/views/YourBondsModalYield/components/YourBondModalHeader/YourBondModalHeader.d.ts +7 -0
- package/dist/views/YourBondsModalYield/components/YourBondModalHeader/YourBondModalHeader.js +32 -0
- package/dist/views/YourBondsModalYield/components/YourBondModalHeader/YourBondModalHeader.js.map +1 -0
- package/package.json +2 -2
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
import { jsx, jsxs } from 'theme-ui/jsx-runtime';
|
|
2
|
+
import TokenInfoAndName from '../../../../components/TokenInfoAndName/index.js';
|
|
3
|
+
import Svg from '../../../../components/uikit-sdk/Svg/index.js';
|
|
4
|
+
import TooltipBubble from '../../../../components/uikit-sdk/TooltipBubble/index.js';
|
|
5
|
+
import BondInfoTooltip from '../../../../components/Tooltip/Tooltip.js';
|
|
6
|
+
import { Flex } from 'theme-ui';
|
|
7
|
+
import { formatTimeLeft, getTimePeriods } from '../../../../utils/getTimePeriods.js';
|
|
8
|
+
import useModal from '../../../../hooks/useModal.js';
|
|
9
|
+
import YourBondsModalYield from '../../../YourBondsModalYield/YourBondsModalYield.js';
|
|
10
|
+
import Button from '../../../../components/uikit-sdk/Button/Button.js';
|
|
11
|
+
import { formatNumberSI } from '../../../../utils/formatNumber.js';
|
|
12
|
+
import { getBalanceNumber } from '../../../../utils/getBalanceNumber.js';
|
|
13
|
+
|
|
14
|
+
const UserBondRowYield = ({ userBond }) => {
|
|
15
|
+
const saleFinalized = userBond.finalized;
|
|
16
|
+
const hasRedeemed = userBond?.accountInfo?.hasRedeemed;
|
|
17
|
+
const isRedeemable = !hasRedeemed && saleFinalized;
|
|
18
|
+
const redeemableIn = formatTimeLeft((userBond?.redeemTime ?? 0) - new Date().getTime() / 1000, true, true);
|
|
19
|
+
const timeLeftForFullyVested = (userBond.yieldData?.rewardDistributionEnd ?? 0) - Date.now() / 1000;
|
|
20
|
+
const timePeriods = getTimePeriods(timeLeftForFullyVested, true);
|
|
21
|
+
const vestingString = isRedeemable && userBond.yieldBond
|
|
22
|
+
? ''
|
|
23
|
+
: hasRedeemed
|
|
24
|
+
? `${timePeriods.days}d ${timePeriods.hours}h ${timePeriods.minutes}m`
|
|
25
|
+
: '';
|
|
26
|
+
const earnTokenPrice = userBond?.earnTokenPrice ?? 0;
|
|
27
|
+
const pending = userBond?.yieldData?.depositedAssets ?? 0;
|
|
28
|
+
const pendingUSD = pending * earnTokenPrice;
|
|
29
|
+
const claimable = getBalanceNumber(userBond?.yieldData?.claimableRewards ?? '0');
|
|
30
|
+
const claimableUSD = claimable * earnTokenPrice;
|
|
31
|
+
const endTimeFinished = Date.now() > (userBond?.endTime ?? 0) * 1000;
|
|
32
|
+
const [onOpenPurchasedBond] = useModal(jsx(YourBondsModalYield, { userBill: userBond }), false, false, `yourBondsModalYield${userBond.contractAddress[userBond.chainId]}`);
|
|
33
|
+
return (jsxs("div", { className: "your-bonds", onClick: onOpenPurchasedBond, children: [jsxs("div", { className: "token-info-container", children: [jsx(TokenInfoAndName, { tokenSymbol: userBond?.underlyingEarnToken?.symbol, chain: userBond.chainId, tag: userBond.tags?.[0], vestEnds: isRedeemable ? 'Activate Yield!' : !hasRedeemed ? `Claim in ${redeemableIn}` : `Ends in ${vestingString}`, isHotBond: true }), jsx("div", { className: "tooltip-column", children: jsx(TooltipBubble, { className: "tooltip-bubble", body: jsx(BondInfoTooltip, { earnTokenContract: userBond?.earnToken.address[userBond?.chainId] || '', earnTokenSymbol: userBond?.earnToken.symbol || '', bondContract: userBond?.contractAddress?.[userBond?.chainId] || '', projectLink: userBond?.projectLink, twitter: userBond?.twitter, chain: userBond?.chainId }), width: "205px", placement: "bottomRight", transformTip: "translate(5%, 0%)", children: jsx(Flex, { sx: {
|
|
34
|
+
opacity: 0.8,
|
|
35
|
+
}, children: jsx(Svg, { icon: "more", width: "25px" }) }) }) })] }), jsxs("div", { className: "your-bonds-columns-container", children: [jsx(Flex, { sx: { display: ['none', 'none', 'none', 'flex'], width: '125px' } }), jsxs("div", { className: "your-bonds-content", children: [jsx("div", { className: "your-bonds-content-title", children: "Claimable" }), jsxs("div", { className: "your-bonds-content-tokens-amount", children: [hasRedeemed ? formatNumberSI(claimable) : '', jsx("div", { className: "your-bonds-content-tokens-usd-amount", children: hasRedeemed ? `($${formatNumberSI(claimableUSD)})` : '-' })] })] }), jsxs("div", { className: "your-bonds-content", children: [jsx("div", { className: "your-bonds-content-title", children: "Pending" }), jsxs("div", { className: "your-bonds-content-tokens-amount", children: [hasRedeemed ? formatNumberSI(pending) : '', jsx("div", { className: "your-bonds-content-tokens-usd-amount", children: hasRedeemed ? `($${formatNumberSI(pendingUSD)})` : '-' })] })] }), jsx("div", { className: "your-bonds-content hide-mobile", children: vestingString }), jsx("div", { className: "your-bonds-column-button", children: jsx(Button, { sx: {
|
|
36
|
+
fontSize: '14px',
|
|
37
|
+
height: '30px',
|
|
38
|
+
background: !saleFinalized && 'var(--theme-ui-colors-white4) !important',
|
|
39
|
+
width: '100%',
|
|
40
|
+
}, disabled: !saleFinalized, children: isRedeemable
|
|
41
|
+
? 'Activate Yield'
|
|
42
|
+
: endTimeFinished && !saleFinalized
|
|
43
|
+
? 'Claim enabled soon'
|
|
44
|
+
: !hasRedeemed
|
|
45
|
+
? `Claim in ${redeemableIn}`
|
|
46
|
+
: `Claim` }) })] })] }));
|
|
47
|
+
};
|
|
48
|
+
|
|
49
|
+
export { UserBondRowYield as default };
|
|
50
|
+
//# sourceMappingURL=UserBondRowYield.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"UserBondRowYield.js","sources":["../../../../../src/views/YourBonds/components/UserBondRow/UserBondRowYield.tsx"],"sourcesContent":["import React from 'react'\nimport TokenInfoAndName from '../../../../components/TokenInfoAndName'\nimport Svg from '../../../../components/uikit-sdk/Svg'\nimport TooltipBubble from '../../../../components/uikit-sdk/TooltipBubble'\nimport Tooltip from '../../../../components/Tooltip/Tooltip'\nimport { Flex } from 'theme-ui'\nimport { formatTimeLeft, getTimePeriods } from '../../../../utils/getTimePeriods'\nimport { PreTGEUserBonds } from '../../../../state/bonds/useUserBondsPreTGE'\nimport useModal from '../../../../hooks/useModal'\nimport YourBondsModalYield from '../../../YourBondsModalYield/YourBondsModalYield'\nimport Button from '../../../../components/uikit-sdk/Button/Button'\nimport { formatNumberSI } from '../../../../utils/formatNumber'\nimport { getBalanceNumber } from '../../../../utils/getBalanceNumber'\n\nconst UserBondRowYield = ({ userBond }: { userBond: PreTGEUserBonds }) => {\n const saleFinalized = userBond.finalized\n const hasRedeemed = userBond?.accountInfo?.hasRedeemed\n const isRedeemable = !hasRedeemed && saleFinalized\n\n const redeemableIn = formatTimeLeft((userBond?.redeemTime ?? 0) - new Date().getTime() / 1000, true, true)\n const timeLeftForFullyVested = (userBond.yieldData?.rewardDistributionEnd ?? 0) - Date.now() / 1000\n const timePeriods = getTimePeriods(timeLeftForFullyVested, true)\n const vestingString =\n isRedeemable && userBond.yieldBond\n ? ''\n : hasRedeemed\n ? `${timePeriods.days}d ${timePeriods.hours}h ${timePeriods.minutes}m`\n : ''\n\n const earnTokenPrice = userBond?.earnTokenPrice ?? 0\n const pending = userBond?.yieldData?.depositedAssets ?? 0\n const pendingUSD = pending * earnTokenPrice\n const claimable = getBalanceNumber(userBond?.yieldData?.claimableRewards ?? '0')\n const claimableUSD = claimable * earnTokenPrice\n const endTimeFinished = Date.now() > (userBond?.endTime ?? 0) * 1000\n\n const [onOpenPurchasedBond] = useModal(\n <YourBondsModalYield userBill={userBond} />,\n false,\n false,\n `yourBondsModalYield${userBond.contractAddress[userBond.chainId]}`,\n )\n\n return (\n <div className=\"your-bonds\" onClick={onOpenPurchasedBond}>\n <div className=\"token-info-container\">\n <TokenInfoAndName\n tokenSymbol={userBond?.underlyingEarnToken?.symbol}\n chain={userBond.chainId}\n tag={userBond.tags?.[0]}\n vestEnds={\n isRedeemable ? 'Activate Yield!' : !hasRedeemed ? `Claim in ${redeemableIn}` : `Ends in ${vestingString}`\n }\n isHotBond\n />\n <div className=\"tooltip-column\">\n <TooltipBubble\n className=\"tooltip-bubble\"\n body={\n <Tooltip\n earnTokenContract={userBond?.earnToken.address[userBond?.chainId] || ''}\n earnTokenSymbol={userBond?.earnToken.symbol || ''}\n bondContract={userBond?.contractAddress?.[userBond?.chainId] || ''}\n projectLink={userBond?.projectLink}\n twitter={userBond?.twitter}\n chain={userBond?.chainId}\n />\n }\n width=\"205px\"\n placement=\"bottomRight\"\n transformTip=\"translate(5%, 0%)\"\n >\n <Flex\n sx={{\n opacity: 0.8,\n }}\n >\n <Svg icon=\"more\" width=\"25px\" />\n </Flex>\n </TooltipBubble>\n </div>\n </div>\n <div className=\"your-bonds-columns-container\">\n <Flex sx={{ display: ['none', 'none', 'none', 'flex'], width: '125px' }} />\n <div className=\"your-bonds-content\">\n <div className=\"your-bonds-content-title\">Claimable</div>\n <div className=\"your-bonds-content-tokens-amount\">\n {hasRedeemed ? formatNumberSI(claimable) : ''}\n <div className=\"your-bonds-content-tokens-usd-amount\">\n {hasRedeemed ? `($${formatNumberSI(claimableUSD)})` : '-'}\n </div>\n </div>\n </div>\n <div className=\"your-bonds-content\">\n <div className=\"your-bonds-content-title\">Pending</div>\n <div className=\"your-bonds-content-tokens-amount\">\n {hasRedeemed ? formatNumberSI(pending) : ''}\n <div className=\"your-bonds-content-tokens-usd-amount\">\n {hasRedeemed ? `($${formatNumberSI(pendingUSD)})` : '-'}\n </div>\n </div>\n </div>\n <div className=\"your-bonds-content hide-mobile\">{vestingString}</div>\n <div className=\"your-bonds-column-button\">\n <Button\n sx={{\n fontSize: '14px',\n height: '30px',\n background: !saleFinalized && 'var(--theme-ui-colors-white4) !important',\n width: '100%',\n }}\n disabled={!saleFinalized}\n >\n {isRedeemable\n ? 'Activate Yield'\n : endTimeFinished && !saleFinalized\n ? 'Claim enabled soon'\n : !hasRedeemed\n ? `Claim in ${redeemableIn}`\n : `Claim`}\n </Button>\n </div>\n </div>\n </div>\n )\n}\n\nexport default UserBondRowYield\n"],"names":["_jsx","_jsxs","Tooltip"],"mappings":"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"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import { PreTGEUserBonds } from '../../state/bonds/useUserBondsPreTGE';
|
|
3
|
+
declare const YourBondsModalYield: ({ userBill, onDismiss }: {
|
|
4
|
+
userBill?: PreTGEUserBonds;
|
|
5
|
+
onDismiss?: () => void;
|
|
6
|
+
}) => React.JSX.Element;
|
|
7
|
+
export default YourBondsModalYield;
|
|
@@ -0,0 +1,219 @@
|
|
|
1
|
+
import { jsx, jsxs, Fragment } from 'theme-ui/jsx-runtime';
|
|
2
|
+
import { useState, useCallback, useEffect } from 'react';
|
|
3
|
+
import TokenImage from '../../components/uikit-sdk/TokenImage/index.js';
|
|
4
|
+
import { formatNumberSI } from '../../utils/formatNumber.js';
|
|
5
|
+
import { UserBillTooltipText } from '../../config/constants/tooltips.js';
|
|
6
|
+
import YourBondModalHeader from './components/YourBondModalHeader/YourBondModalHeader.js';
|
|
7
|
+
import Modal from '../../components/uikit-sdk/Modal/index.js';
|
|
8
|
+
import Flex from '../../components/uikit-sdk/Flex/index.js';
|
|
9
|
+
import Svg from '../../components/uikit-sdk/Svg/index.js';
|
|
10
|
+
import Button from '../../components/uikit-sdk/Button/Button.js';
|
|
11
|
+
import TooltipBubble from '../../components/uikit-sdk/TooltipBubble/index.js';
|
|
12
|
+
import Text from '../../components/uikit-sdk/Text/index.js';
|
|
13
|
+
import useUserBondsPreTGE from '../../state/bonds/useUserBondsPreTGE.js';
|
|
14
|
+
import { getBalanceNumber } from '../../utils/getBalanceNumber.js';
|
|
15
|
+
import { formatUTCDate } from '../../utils/dates/formatDate.js';
|
|
16
|
+
import useEVMAccount from '../../hooks/accounts/useEVMAccount.js';
|
|
17
|
+
import { useSwitchChain, useWriteContract } from 'wagmi';
|
|
18
|
+
import LaunchBondABI_V_2_4_1 from '../../config/abi/launchBond_v2_4_1.json.js';
|
|
19
|
+
import Vault_Shares_ABI from '../../config/abi/Vault_Shares.json.js';
|
|
20
|
+
import { reportError } from '../../utils/reportError.js';
|
|
21
|
+
import { useSDKConfig } from '../../state/useSDKConfig.js';
|
|
22
|
+
import { usePopups } from '../../state/popups/usePopups.js';
|
|
23
|
+
import { useMonitorTx } from '../../hooks/useMonitorTx.js';
|
|
24
|
+
import { formatTimeLeft } from '../../utils/getTimePeriods.js';
|
|
25
|
+
import useModal from '../../hooks/useModal.js';
|
|
26
|
+
import UnstakeModalYield from './components/UnstakeModalYield/UnstakeModalYield.js';
|
|
27
|
+
|
|
28
|
+
const YourBondsModalYield = ({ userBill, onDismiss }) => {
|
|
29
|
+
// Hooks
|
|
30
|
+
const { refetch } = useUserBondsPreTGE();
|
|
31
|
+
const { address: account, chainId } = useEVMAccount();
|
|
32
|
+
const { switchChainAsync } = useSwitchChain();
|
|
33
|
+
const { writeContractAsync } = useWriteContract();
|
|
34
|
+
const SDKConfig = useSDKConfig();
|
|
35
|
+
const { addToastError } = usePopups();
|
|
36
|
+
//State
|
|
37
|
+
const [loading, setLoading] = useState(false);
|
|
38
|
+
const [hash, setHash] = useState('');
|
|
39
|
+
const [useLocal, setUseLocal] = useState(false);
|
|
40
|
+
const { isLoading: isLoadingOnChain, isSuccess } = useMonitorTx(hash, userBill?.chainId);
|
|
41
|
+
// Static Data
|
|
42
|
+
const depositUSD = getBalanceNumber(userBill?.accountInfo?.depositAmount ?? '0'); // assumes raise is in stables
|
|
43
|
+
const payoutSymbol = userBill?.underlyingEarnToken?.symbol;
|
|
44
|
+
const claimableRewards = getBalanceNumber(userBill?.yieldData?.claimableRewards ?? '0');
|
|
45
|
+
const claimableRewardsUSD = claimableRewards * (userBill?.earnTokenPrice ?? 0);
|
|
46
|
+
const claimedUSD = (userBill?.yieldData?.claimed ?? 0) * (userBill?.earnTokenPrice ?? 0);
|
|
47
|
+
const saleFinalized = userBill?.finalized;
|
|
48
|
+
const hasRedeemed = userBill?.accountInfo?.hasRedeemed;
|
|
49
|
+
const canRedeem = saleFinalized && !hasRedeemed;
|
|
50
|
+
const endTimeFinished = Date.now() > (userBill?.endTime ?? 0) * 1000;
|
|
51
|
+
const depositedAssets = userBill?.yieldData?.depositedAssets ?? 0;
|
|
52
|
+
const depositedAssetsUSD = depositedAssets * (userBill?.earnTokenPrice ?? 0);
|
|
53
|
+
const redeemableInLong = formatTimeLeft((userBill?.redeemTime ?? 0) - new Date().getTime() / 1000, true, false);
|
|
54
|
+
const redeemableInShort = formatTimeLeft((userBill?.redeemTime ?? 0) - new Date().getTime() / 1000, true, true);
|
|
55
|
+
// Handlers
|
|
56
|
+
const handleRedeemBond = async () => {
|
|
57
|
+
setLoading(true);
|
|
58
|
+
writeContractAsync({
|
|
59
|
+
address: userBill?.contractAddress[userBill?.chainId],
|
|
60
|
+
abi: LaunchBondABI_V_2_4_1,
|
|
61
|
+
functionName: 'redeem',
|
|
62
|
+
chain: userBill?.chainId,
|
|
63
|
+
account,
|
|
64
|
+
})
|
|
65
|
+
.then((r) => {
|
|
66
|
+
setHash(r);
|
|
67
|
+
})
|
|
68
|
+
.catch((e) => {
|
|
69
|
+
console.error(e.message);
|
|
70
|
+
reportError({
|
|
71
|
+
apiUrl: SDKConfig?.urls?.apiV2,
|
|
72
|
+
error: e.message,
|
|
73
|
+
extraInfo: { type: 'redeemLaunchBond', error: e.message },
|
|
74
|
+
chainId: userBill?.chainId,
|
|
75
|
+
account,
|
|
76
|
+
});
|
|
77
|
+
addToastError(e.shortMessage);
|
|
78
|
+
})
|
|
79
|
+
.finally(() => setLoading(false));
|
|
80
|
+
};
|
|
81
|
+
const handleClaim = async () => {
|
|
82
|
+
setLoading(true);
|
|
83
|
+
setHash('');
|
|
84
|
+
if (!userBill?.userOwnedBillsData?.id)
|
|
85
|
+
return;
|
|
86
|
+
writeContractAsync({
|
|
87
|
+
address: userBill?.earnToken.address[userBill?.chainId],
|
|
88
|
+
abi: Vault_Shares_ABI,
|
|
89
|
+
functionName: 'withdraw',
|
|
90
|
+
args: [userBill?.yieldData?.claimableRewards, account, account],
|
|
91
|
+
chain: userBill?.chainId,
|
|
92
|
+
account,
|
|
93
|
+
})
|
|
94
|
+
.then((r) => {
|
|
95
|
+
setHash(r);
|
|
96
|
+
})
|
|
97
|
+
.catch((e) => {
|
|
98
|
+
console.error(e.message);
|
|
99
|
+
reportError({
|
|
100
|
+
apiUrl: SDKConfig?.urls?.apiV2,
|
|
101
|
+
error: e.message,
|
|
102
|
+
extraInfo: { type: 'claimLaunchBond', error: e.message },
|
|
103
|
+
chainId: userBill?.chainId,
|
|
104
|
+
account,
|
|
105
|
+
});
|
|
106
|
+
addToastError(e.shortMessage);
|
|
107
|
+
})
|
|
108
|
+
.finally(() => setLoading(false));
|
|
109
|
+
};
|
|
110
|
+
const handleClick = () => {
|
|
111
|
+
if (hasRedeemed) {
|
|
112
|
+
handleClaim();
|
|
113
|
+
}
|
|
114
|
+
else {
|
|
115
|
+
handleRedeemBond();
|
|
116
|
+
}
|
|
117
|
+
};
|
|
118
|
+
const handleModalClose = useCallback(() => {
|
|
119
|
+
console.log('refetch!');
|
|
120
|
+
refetch();
|
|
121
|
+
setTimeout(() => onDismiss?.(), 1500);
|
|
122
|
+
}, [refetch, onDismiss]);
|
|
123
|
+
const [onOpenUnstakeModal] = useModal(jsx(UnstakeModalYield, { userBill: userBill, onSuccessFullTx: handleModalClose }), false, false, `unstakeModalYield${userBill?.contractAddress[userBill?.chainId]}`);
|
|
124
|
+
useEffect(() => {
|
|
125
|
+
if (isSuccess) {
|
|
126
|
+
console.log('refetch!');
|
|
127
|
+
refetch();
|
|
128
|
+
}
|
|
129
|
+
}, [isSuccess, refetch]);
|
|
130
|
+
return (jsx(Modal, { sx: {
|
|
131
|
+
width: '400px',
|
|
132
|
+
overflowY: 'unset !important',
|
|
133
|
+
background: 'white2',
|
|
134
|
+
p: '0px',
|
|
135
|
+
top: '56%',
|
|
136
|
+
}, onDismiss: onDismiss, children: jsx(Flex, { sx: {
|
|
137
|
+
flexDirection: 'column',
|
|
138
|
+
borderRadius: 'normal',
|
|
139
|
+
position: 'relative',
|
|
140
|
+
background: 'white2',
|
|
141
|
+
p: '20px',
|
|
142
|
+
}, children: jsxs(Flex, { sx: { flexDirection: 'column' }, children: [jsx(YourBondModalHeader, { userBill: userBill, onDismiss: onDismiss }), jsxs(Flex, { sx: { mt: '10px', flexDirection: 'column', gap: '10px' }, children: [jsxs(Flex, { sx: { width: '100%', gap: '15px', position: 'relative' }, children: [jsxs(Flex, { sx: {
|
|
143
|
+
background: 'white3',
|
|
144
|
+
borderRadius: 'normal',
|
|
145
|
+
justifyContent: 'space-between',
|
|
146
|
+
p: '10px',
|
|
147
|
+
width: '65%',
|
|
148
|
+
alignItems: 'center',
|
|
149
|
+
fontSize: '14px',
|
|
150
|
+
}, children: [jsx(Flex, { children: "Deposit" }), jsx(Flex, { sx: { alignItems: 'center', gap: '5px' }, children: saleFinalized && hasRedeemed ? (jsxs(Fragment, { children: [jsx(TokenImage, { symbol: userBill?.underlyingEarnToken?.symbol, size: 18 }), formatNumberSI(depositedAssets), jsxs("span", { sx: { color: 'textDisabledButton', fontSize: '12px' }, children: ["($", formatNumberSI(depositedAssetsUSD), ")"] })] })) : (jsxs(Fragment, { children: [jsx(TokenImage, { symbol: userBill?.lpToken.symbol, size: 18 }), formatNumberSI(depositUSD)] })) })] }), jsx(Flex, { sx: { position: 'absolute', top: '50%', left: '65%', transform: 'translateY(-50%) translateX(-50%)' }, children: jsx(Svg, { icon: "arrow", direction: "right", width: '5px' }) }), jsxs(Flex, { sx: {
|
|
151
|
+
background: 'white3',
|
|
152
|
+
borderRadius: 'normal',
|
|
153
|
+
justifyContent: 'space-between',
|
|
154
|
+
p: '10px',
|
|
155
|
+
width: '34%',
|
|
156
|
+
alignItems: 'center',
|
|
157
|
+
fontSize: '14px',
|
|
158
|
+
}, children: [jsx(Flex, { children: "APR" }), jsxs(Flex, { sx: { color: 'success', fontWeight: 700 }, children: [userBill?.yieldData?.apr?.toFixed(), "%"] })] })] }), jsxs(Flex, { sx: {
|
|
159
|
+
flexDirection: 'column',
|
|
160
|
+
fontSize: '12px',
|
|
161
|
+
fontWeight: 400,
|
|
162
|
+
}, children: [jsx(Flex, { sx: {
|
|
163
|
+
width: '100%',
|
|
164
|
+
justifyContent: 'space-between',
|
|
165
|
+
alignItems: 'center',
|
|
166
|
+
p: '4px 10px',
|
|
167
|
+
background: 'white4',
|
|
168
|
+
height: '26px',
|
|
169
|
+
borderRadius: '10px 10px 0 0',
|
|
170
|
+
}, children: hasRedeemed ? (jsxs(Fragment, { children: [jsxs(Flex, { sx: { alignItems: 'center', gap: '5px' }, children: [jsx(Flex, { sx: { opacity: 0.6 }, children: "Vault Ends" }), jsx(TooltipBubble, { className: "tooltip-bubble", body: jsx(Flex, { children: "This is the date when reward distribution finishes." }), width: "230px", placement: "bottomLeft", transformTip: "translate(-5%, 0%)", children: jsx(Flex, { className: "block-header icon", children: jsx(Svg, { icon: "questionCircle", width: "12px", color: 'textDisabledButton' }) }) })] }), jsx(Flex, { sx: { alignItems: 'center' }, children: formatUTCDate(new Date((userBill?.yieldData?.rewardDistributionEnd ?? 0) * 1000)) })] })) : (jsxs(Fragment, { children: [jsxs(Flex, { sx: { alignItems: 'center', gap: '5px' }, children: [jsx(Flex, { sx: { opacity: 0.6 }, children: "Yield starts in" }), jsx(TooltipBubble, { className: "tooltip-bubble", body: jsx(Flex, { children: "Time left for the vault to start accruing rewards." }), width: "230px", placement: "bottomLeft", transformTip: "translate(-5%, 0%)", children: jsx(Flex, { className: "block-header icon", children: jsx(Svg, { icon: "questionCircle", width: "12px", color: 'textDisabledButton' }) }) })] }), endTimeFinished && !canRedeem ? ('Soon...') : canRedeem ? ('Activate Yield') : (jsxs(Flex, { sx: { alignItems: 'center', gap: '5px' }, children: [redeemableInLong, jsx(TooltipBubble, { className: "tooltip-bubble", body: jsxs(Flex, { onClick: () => setUseLocal(!useLocal), sx: { cursor: 'pointer' }, children: ["Claimable at", ' ', formatUTCDate(new Date((userBill?.redeemTime ?? 0) * 1000), false, useLocal), ' ', useLocal ? 'Local' : 'UTC'] }), width: "230px", placement: "bottomRight", transformTip: "translate(10%, 0%)", children: jsx(Flex, { className: "block-header icon", children: jsx(Svg, { icon: "questionCircle", width: "12px", color: 'textDisabledButton' }) }) })] }))] })) }), jsxs(Flex, { sx: {
|
|
171
|
+
width: '100%',
|
|
172
|
+
justifyContent: 'space-between',
|
|
173
|
+
alignItems: 'center',
|
|
174
|
+
p: '4px 10px',
|
|
175
|
+
background: 'white3',
|
|
176
|
+
height: '26px',
|
|
177
|
+
}, children: [jsxs(Flex, { sx: { alignItems: 'center', gap: '5px' }, children: [jsx(Flex, { sx: { opacity: 0.6 }, children: "Claimable Rewards" }), jsx(TooltipBubble, { className: "tooltip-bubble", body: jsx(Flex, { children: "Amount of tokens that can be claimed in this moment" }), width: "230px", placement: "bottomLeft", transformTip: "translate(-5%, 0%)", children: jsx(Flex, { className: "block-header icon", children: jsx(Svg, { icon: "questionCircle", width: "12px", color: 'textDisabledButton' }) }) })] }), jsxs(Flex, { sx: { alignItems: 'center' }, children: [jsx(TokenImage, { symbol: payoutSymbol, size: 18 }), jsx(Text, { sx: { fontSize: '12px', fontWeight: 700, ml: '10px' }, children: formatNumberSI(claimableRewards, 4) }), jsxs(Text, { sx: {
|
|
178
|
+
fontSize: ['10px', '10px', '10px', '12px'],
|
|
179
|
+
fontWeight: 400,
|
|
180
|
+
ml: '10px',
|
|
181
|
+
opacity: 0.6,
|
|
182
|
+
}, children: ["($", formatNumberSI(claimableRewardsUSD), ")"] })] })] }), jsxs(Flex, { sx: {
|
|
183
|
+
width: '100%',
|
|
184
|
+
justifyContent: 'space-between',
|
|
185
|
+
alignItems: 'center',
|
|
186
|
+
p: '4px 10px',
|
|
187
|
+
background: 'white4',
|
|
188
|
+
height: '26px',
|
|
189
|
+
borderRadius: '0px 0px 10px 10px',
|
|
190
|
+
}, children: [jsxs(Flex, { sx: { alignItems: 'center', gap: '5px' }, children: [jsx(Flex, { sx: { opacity: 0.6 }, children: "Claimed " }), jsx(TooltipBubble, { className: "tooltip-bubble", body: jsx(Flex, { children: UserBillTooltipText.Claimed }), width: "230px", placement: "bottomLeft", transformTip: "translate(-5%, 0%)", children: jsx(Flex, { className: "block-header icon", children: jsx(Svg, { icon: "questionCircle", width: "12px", color: 'textDisabledButton' }) }) })] }), jsxs(Flex, { sx: { alignItems: 'center' }, children: [jsx(TokenImage, { symbol: payoutSymbol, size: 18 }), jsx(Text, { sx: { fontSize: '12px', fontWeight: 700, ml: '10px' }, children: formatNumberSI(userBill?.yieldData?.claimed, 4) }), jsxs(Text, { sx: {
|
|
191
|
+
fontSize: ['10px', '10px', '10px', '12px'],
|
|
192
|
+
fontWeight: 400,
|
|
193
|
+
ml: '10px',
|
|
194
|
+
opacity: 0.6,
|
|
195
|
+
}, children: ["($", formatNumberSI(claimedUSD), ")"] })] })] })] }), jsxs(Flex, { sx: {
|
|
196
|
+
width: '100%',
|
|
197
|
+
justifyContent: 'space-between',
|
|
198
|
+
gap: ['10px', '10px', '10px', '15px'],
|
|
199
|
+
height: '40px',
|
|
200
|
+
}, children: [jsx(Button, { sx: { width: '65%' }, disabled: !saleFinalized || loading || isLoadingOnChain, load: loading || isLoadingOnChain, onClick: () => {
|
|
201
|
+
if (chainId !== userBill?.chainId) {
|
|
202
|
+
switchChainAsync({ chainId: userBill?.chainId })
|
|
203
|
+
.then(() => {
|
|
204
|
+
handleClick();
|
|
205
|
+
})
|
|
206
|
+
.catch();
|
|
207
|
+
}
|
|
208
|
+
else {
|
|
209
|
+
handleClick();
|
|
210
|
+
}
|
|
211
|
+
}, children: canRedeem
|
|
212
|
+
? 'Activate yield'
|
|
213
|
+
: hasRedeemed
|
|
214
|
+
? 'Claim rewards'
|
|
215
|
+
: `Claimable ${endTimeFinished && !saleFinalized ? 'soon' : `in ${redeemableInShort}`}` }), jsx(Button, { sx: { width: '34%' }, disabled: !saleFinalized || !hasRedeemed, variant: "secondary", onClick: onOpenUnstakeModal, children: "Unstake" })] })] })] }) }) }));
|
|
216
|
+
};
|
|
217
|
+
|
|
218
|
+
export { YourBondsModalYield as default };
|
|
219
|
+
//# sourceMappingURL=YourBondsModalYield.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"YourBondsModalYield.js","sources":["../../../src/views/YourBondsModalYield/YourBondsModalYield.tsx"],"sourcesContent":["import React, { useCallback, useEffect, useState } from 'react'\nimport TokenImage from '../../components/uikit-sdk/TokenImage'\nimport { formatNumberSI } from '../../utils/formatNumber'\nimport { UserBillTooltipText } from '../../config/constants/tooltips'\nimport YourBondModalHeader from './components/YourBondModalHeader/YourBondModalHeader'\nimport Modal from '../../components/uikit-sdk/Modal'\nimport Flex from '../../components/uikit-sdk/Flex'\nimport Svg from '../../components/uikit-sdk/Svg'\nimport Button from '../../components/uikit-sdk/Button/Button'\nimport TooltipBubble from '../../components/uikit-sdk/TooltipBubble'\nimport Text from '../../components/uikit-sdk/Text'\nimport useUserBondsPreTGE, { PreTGEUserBonds } from '../../state/bonds/useUserBondsPreTGE'\nimport { getBalanceNumber } from '../../utils/getBalanceNumber'\nimport { formatUTCDate } from '../../utils/dates/formatDate'\nimport useEVMAccount from '../../hooks/accounts/useEVMAccount'\nimport { useSwitchChain, useWriteContract } from 'wagmi'\nimport LaunchBondABI_V_2_4_1 from '../../config/abi/launchBond_v2_4_1.json'\nimport Vault_Shares_ABI from '../../config/abi/Vault_Shares.json'\nimport { reportError } from '../../utils/reportError'\nimport { useSDKConfig } from '../../state/useSDKConfig'\nimport { usePopups } from '../../state/popups/usePopups'\nimport { useMonitorTx } from '../../hooks/useMonitorTx'\nimport { formatTimeLeft } from '../../utils/getTimePeriods'\nimport useModal from '../../hooks/useModal'\nimport UnstakeModalYield from './components/UnstakeModalYield/UnstakeModalYield'\n\nconst YourBondsModalYield = ({ userBill, onDismiss }: { userBill?: PreTGEUserBonds; onDismiss?: () => void }) => {\n // Hooks\n const { refetch } = useUserBondsPreTGE()\n const { address: account, chainId } = useEVMAccount()\n const { switchChainAsync } = useSwitchChain()\n const { writeContractAsync } = useWriteContract()\n const SDKConfig = useSDKConfig()\n const { addToastError } = usePopups()\n\n //State\n const [loading, setLoading] = useState(false)\n const [hash, setHash] = useState('')\n const [useLocal, setUseLocal] = useState(false)\n const { isLoading: isLoadingOnChain, isSuccess } = useMonitorTx(hash, userBill?.chainId)\n\n // Static Data\n const depositUSD = getBalanceNumber(userBill?.accountInfo?.depositAmount ?? '0') // assumes raise is in stables\n const payoutSymbol = userBill?.underlyingEarnToken?.symbol\n const claimableRewards = getBalanceNumber(userBill?.yieldData?.claimableRewards ?? '0')\n const claimableRewardsUSD = claimableRewards * (userBill?.earnTokenPrice ?? 0)\n const claimedUSD = (userBill?.yieldData?.claimed ?? 0) * (userBill?.earnTokenPrice ?? 0)\n const saleFinalized = userBill?.finalized\n const hasRedeemed = userBill?.accountInfo?.hasRedeemed\n const canRedeem = saleFinalized && !hasRedeemed\n const endTimeFinished = Date.now() > (userBill?.endTime ?? 0) * 1000\n const depositedAssets = userBill?.yieldData?.depositedAssets ?? 0\n const depositedAssetsUSD = depositedAssets * (userBill?.earnTokenPrice ?? 0)\n\n const redeemableInLong = formatTimeLeft((userBill?.redeemTime ?? 0) - new Date().getTime() / 1000, true, false)\n const redeemableInShort = formatTimeLeft((userBill?.redeemTime ?? 0) - new Date().getTime() / 1000, true, true)\n\n // Handlers\n const handleRedeemBond = async () => {\n setLoading(true)\n writeContractAsync({\n address: userBill?.contractAddress[userBill?.chainId] as `0x${string}`,\n abi: LaunchBondABI_V_2_4_1,\n functionName: 'redeem',\n chain: userBill?.chainId as any,\n account,\n })\n .then((r) => {\n setHash(r)\n })\n .catch((e) => {\n console.error(e.message)\n reportError({\n apiUrl: SDKConfig?.urls?.apiV2,\n error: e.message,\n extraInfo: { type: 'redeemLaunchBond', error: e.message },\n chainId: userBill?.chainId,\n account,\n })\n addToastError(e.shortMessage)\n })\n .finally(() => setLoading(false))\n }\n\n const handleClaim = async () => {\n setLoading(true)\n setHash('')\n if (!userBill?.userOwnedBillsData?.id) return\n writeContractAsync({\n address: userBill?.earnToken.address[userBill?.chainId] as `0x${string}`,\n abi: Vault_Shares_ABI,\n functionName: 'withdraw',\n args: [userBill?.yieldData?.claimableRewards, account, account],\n chain: userBill?.chainId as any,\n account,\n })\n .then((r) => {\n setHash(r)\n })\n .catch((e) => {\n console.error(e.message)\n reportError({\n apiUrl: SDKConfig?.urls?.apiV2,\n error: e.message,\n extraInfo: { type: 'claimLaunchBond', error: e.message },\n chainId: userBill?.chainId,\n account,\n })\n addToastError(e.shortMessage)\n })\n .finally(() => setLoading(false))\n }\n\n const handleClick = () => {\n if (hasRedeemed) {\n handleClaim()\n } else {\n handleRedeemBond()\n }\n }\n\n const handleModalClose = useCallback(() => {\n console.log('refetch!')\n refetch()\n setTimeout(() => onDismiss?.(), 1500)\n }, [refetch, onDismiss])\n\n const [onOpenUnstakeModal] = useModal(\n <UnstakeModalYield userBill={userBill} onSuccessFullTx={handleModalClose} />,\n false,\n false,\n `unstakeModalYield${userBill?.contractAddress[userBill?.chainId]}`,\n )\n\n useEffect(() => {\n if (isSuccess) {\n console.log('refetch!')\n refetch()\n }\n }, [isSuccess, refetch])\n\n return (\n <Modal\n sx={{\n width: '400px',\n overflowY: 'unset !important',\n background: 'white2',\n p: '0px',\n top: '56%',\n }}\n onDismiss={onDismiss}\n >\n <Flex\n sx={{\n flexDirection: 'column',\n borderRadius: 'normal',\n position: 'relative',\n background: 'white2',\n p: '20px',\n }}\n >\n <Flex sx={{ flexDirection: 'column' }}>\n <YourBondModalHeader userBill={userBill} onDismiss={onDismiss} />\n <Flex sx={{ mt: '10px', flexDirection: 'column', gap: '10px' }}>\n <Flex sx={{ width: '100%', gap: '15px', position: 'relative' }}>\n <Flex\n sx={{\n background: 'white3',\n borderRadius: 'normal',\n justifyContent: 'space-between',\n p: '10px',\n width: '65%',\n alignItems: 'center',\n fontSize: '14px',\n }}\n >\n <Flex>Deposit</Flex>\n <Flex sx={{ alignItems: 'center', gap: '5px' }}>\n {saleFinalized && hasRedeemed ? (\n <>\n <TokenImage symbol={userBill?.underlyingEarnToken?.symbol} size={18} />\n {formatNumberSI(depositedAssets)}\n <span sx={{ color: 'textDisabledButton', fontSize: '12px' }}>\n (${formatNumberSI(depositedAssetsUSD)})\n </span>\n </>\n ) : (\n <>\n <TokenImage symbol={userBill?.lpToken.symbol} size={18} />\n {formatNumberSI(depositUSD)}\n </>\n )}\n </Flex>\n </Flex>\n <Flex\n sx={{ position: 'absolute', top: '50%', left: '65%', transform: 'translateY(-50%) translateX(-50%)' }}\n >\n <Svg icon=\"arrow\" direction=\"right\" width={'5px'} />\n </Flex>\n <Flex\n sx={{\n background: 'white3',\n borderRadius: 'normal',\n justifyContent: 'space-between',\n p: '10px',\n width: '34%',\n alignItems: 'center',\n fontSize: '14px',\n }}\n >\n <Flex>APR</Flex>\n <Flex sx={{ color: 'success', fontWeight: 700 }}>{userBill?.yieldData?.apr?.toFixed()}%</Flex>\n </Flex>\n </Flex>\n <Flex\n sx={{\n flexDirection: 'column',\n fontSize: '12px',\n fontWeight: 400,\n }}\n >\n <Flex\n sx={{\n width: '100%',\n justifyContent: 'space-between',\n alignItems: 'center',\n p: '4px 10px',\n background: 'white4',\n height: '26px',\n borderRadius: '10px 10px 0 0',\n }}\n >\n {hasRedeemed ? (\n <>\n <Flex sx={{ alignItems: 'center', gap: '5px' }}>\n <Flex sx={{ opacity: 0.6 }}>Vault Ends</Flex>\n <TooltipBubble\n className=\"tooltip-bubble\"\n body={<Flex>This is the date when reward distribution finishes.</Flex>}\n width=\"230px\"\n placement=\"bottomLeft\"\n transformTip=\"translate(-5%, 0%)\"\n >\n <Flex className=\"block-header icon\">\n <Svg icon=\"questionCircle\" width=\"12px\" color={'textDisabledButton'} />\n </Flex>\n </TooltipBubble>\n </Flex>\n <Flex sx={{ alignItems: 'center' }}>\n {formatUTCDate(new Date((userBill?.yieldData?.rewardDistributionEnd ?? 0) * 1000))}\n </Flex>\n </>\n ) : (\n <>\n <Flex sx={{ alignItems: 'center', gap: '5px' }}>\n <Flex sx={{ opacity: 0.6 }}>Yield starts in</Flex>\n <TooltipBubble\n className=\"tooltip-bubble\"\n body={<Flex>Time left for the vault to start accruing rewards.</Flex>}\n width=\"230px\"\n placement=\"bottomLeft\"\n transformTip=\"translate(-5%, 0%)\"\n >\n <Flex className=\"block-header icon\">\n <Svg icon=\"questionCircle\" width=\"12px\" color={'textDisabledButton'} />\n </Flex>\n </TooltipBubble>\n </Flex>\n {endTimeFinished && !canRedeem ? (\n 'Soon...'\n ) : canRedeem ? (\n 'Activate Yield'\n ) : (\n <Flex sx={{ alignItems: 'center', gap: '5px' }}>\n {redeemableInLong}\n <TooltipBubble\n className=\"tooltip-bubble\"\n body={\n <Flex onClick={() => setUseLocal(!useLocal)} sx={{ cursor: 'pointer' }}>\n Claimable at{' '}\n {formatUTCDate(new Date((userBill?.redeemTime ?? 0) * 1000), false, useLocal)}{' '}\n {useLocal ? 'Local' : 'UTC'}\n </Flex>\n }\n width=\"230px\"\n placement=\"bottomRight\"\n transformTip=\"translate(10%, 0%)\"\n >\n <Flex className=\"block-header icon\">\n <Svg icon=\"questionCircle\" width=\"12px\" color={'textDisabledButton'} />\n </Flex>\n </TooltipBubble>\n </Flex>\n )}\n </>\n )}\n </Flex>\n <Flex\n sx={{\n width: '100%',\n justifyContent: 'space-between',\n alignItems: 'center',\n p: '4px 10px',\n background: 'white3',\n height: '26px',\n }}\n >\n <Flex sx={{ alignItems: 'center', gap: '5px' }}>\n <Flex sx={{ opacity: 0.6 }}>Claimable Rewards</Flex>\n <TooltipBubble\n className=\"tooltip-bubble\"\n body={<Flex>Amount of tokens that can be claimed in this moment</Flex>}\n width=\"230px\"\n placement=\"bottomLeft\"\n transformTip=\"translate(-5%, 0%)\"\n >\n <Flex className=\"block-header icon\">\n <Svg icon=\"questionCircle\" width=\"12px\" color={'textDisabledButton'} />\n </Flex>\n </TooltipBubble>\n </Flex>\n <Flex sx={{ alignItems: 'center' }}>\n <TokenImage symbol={payoutSymbol} size={18} />\n <Text sx={{ fontSize: '12px', fontWeight: 700, ml: '10px' }}>\n {formatNumberSI(claimableRewards, 4)}\n </Text>\n <Text\n sx={{\n fontSize: ['10px', '10px', '10px', '12px'],\n fontWeight: 400,\n ml: '10px',\n opacity: 0.6,\n }}\n >\n (${formatNumberSI(claimableRewardsUSD)})\n </Text>\n </Flex>\n </Flex>\n <Flex\n sx={{\n width: '100%',\n justifyContent: 'space-between',\n alignItems: 'center',\n p: '4px 10px',\n background: 'white4',\n height: '26px',\n borderRadius: '0px 0px 10px 10px',\n }}\n >\n <Flex sx={{ alignItems: 'center', gap: '5px' }}>\n <Flex sx={{ opacity: 0.6 }}>Claimed </Flex>\n <TooltipBubble\n className=\"tooltip-bubble\"\n body={<Flex>{UserBillTooltipText.Claimed}</Flex>}\n width=\"230px\"\n placement=\"bottomLeft\"\n transformTip=\"translate(-5%, 0%)\"\n >\n <Flex className=\"block-header icon\">\n <Svg icon=\"questionCircle\" width=\"12px\" color={'textDisabledButton'} />\n </Flex>\n </TooltipBubble>\n </Flex>\n <Flex sx={{ alignItems: 'center' }}>\n <TokenImage symbol={payoutSymbol} size={18} />\n <Text sx={{ fontSize: '12px', fontWeight: 700, ml: '10px' }}>\n {formatNumberSI(userBill?.yieldData?.claimed, 4)}\n </Text>\n <Text\n sx={{\n fontSize: ['10px', '10px', '10px', '12px'],\n fontWeight: 400,\n ml: '10px',\n opacity: 0.6,\n }}\n >\n (${formatNumberSI(claimedUSD)})\n </Text>\n </Flex>\n </Flex>\n </Flex>\n <Flex\n sx={{\n width: '100%',\n justifyContent: 'space-between',\n gap: ['10px', '10px', '10px', '15px'],\n height: '40px',\n }}\n >\n <Button\n sx={{ width: '65%' }}\n disabled={!saleFinalized || loading || isLoadingOnChain}\n load={loading || isLoadingOnChain}\n onClick={() => {\n if (chainId !== userBill?.chainId) {\n switchChainAsync({ chainId: userBill?.chainId! })\n .then(() => {\n handleClick()\n })\n .catch()\n } else {\n handleClick()\n }\n }}\n >\n {canRedeem\n ? 'Activate yield'\n : hasRedeemed\n ? 'Claim rewards'\n : `Claimable ${endTimeFinished && !saleFinalized ? 'soon' : `in ${redeemableInShort}`}`}\n </Button>\n <Button\n sx={{ width: '34%' }}\n disabled={!saleFinalized || !hasRedeemed}\n variant=\"secondary\"\n onClick={onOpenUnstakeModal}\n >\n Unstake\n </Button>\n </Flex>\n </Flex>\n </Flex>\n </Flex>\n </Modal>\n )\n}\n\nexport default YourBondsModalYield\n"],"names":["_jsx","_jsxs","_Fragment"],"mappings":"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"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import { PreTGEUserBonds } from '../../../../state/bonds/useUserBondsPreTGE';
|
|
3
|
+
declare const UnstakeModalYield: ({ userBill, onSuccessFullTx, onDismiss, }: {
|
|
4
|
+
userBill?: PreTGEUserBonds;
|
|
5
|
+
onSuccessFullTx?: () => void;
|
|
6
|
+
onDismiss?: () => void;
|
|
7
|
+
}) => React.JSX.Element;
|
|
8
|
+
export default UnstakeModalYield;
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
import { jsx, jsxs } from 'theme-ui/jsx-runtime';
|
|
2
|
+
import { useState, useEffect } from 'react';
|
|
3
|
+
import Modal from '../../../../components/uikit-sdk/Modal/index.js';
|
|
4
|
+
import Flex from '../../../../components/uikit-sdk/Flex/index.js';
|
|
5
|
+
import Vault_Shares_ABI from '../../../../config/abi/Vault_Shares.json.js';
|
|
6
|
+
import { useWriteContract } from 'wagmi';
|
|
7
|
+
import useEVMAccount from '../../../../hooks/accounts/useEVMAccount.js';
|
|
8
|
+
import { useSDKConfig } from '../../../../state/useSDKConfig.js';
|
|
9
|
+
import { usePopups } from '../../../../state/popups/usePopups.js';
|
|
10
|
+
import Checkbox from '../../../../components/uikit-sdk/Checkbox/index.js';
|
|
11
|
+
import Button from '../../../../components/uikit-sdk/Button/Button.js';
|
|
12
|
+
import { formatNumberSI } from '../../../../utils/formatNumber.js';
|
|
13
|
+
import { useMonitorTx } from '../../../../hooks/useMonitorTx.js';
|
|
14
|
+
|
|
15
|
+
const UnstakeModalYield = ({ userBill, onSuccessFullTx, onDismiss, }) => {
|
|
16
|
+
// Hooks
|
|
17
|
+
const { writeContractAsync } = useWriteContract();
|
|
18
|
+
const { address: account } = useEVMAccount();
|
|
19
|
+
const SDKConfig = useSDKConfig();
|
|
20
|
+
const { addToastError } = usePopups();
|
|
21
|
+
// State
|
|
22
|
+
const [loading, setLoading] = useState(false);
|
|
23
|
+
const [hash, setHash] = useState('');
|
|
24
|
+
const [acknowledge, setAcknowledge] = useState(false);
|
|
25
|
+
const { isLoading: isLoadingOnChain, isSuccess } = useMonitorTx(hash, userBill?.chainId);
|
|
26
|
+
// Static Data
|
|
27
|
+
const futureRewards = userBill?.yieldData?.futureRewards ?? 0;
|
|
28
|
+
const handleUnstake = async () => {
|
|
29
|
+
setLoading(true);
|
|
30
|
+
setHash('');
|
|
31
|
+
if (!userBill?.userOwnedBillsData?.id)
|
|
32
|
+
return;
|
|
33
|
+
writeContractAsync({
|
|
34
|
+
address: userBill?.earnToken.address[userBill?.chainId],
|
|
35
|
+
abi: Vault_Shares_ABI,
|
|
36
|
+
functionName: 'redeem',
|
|
37
|
+
args: [userBill?.yieldData?.vaultTokenBalance, account, account],
|
|
38
|
+
chain: userBill?.chainId,
|
|
39
|
+
account,
|
|
40
|
+
})
|
|
41
|
+
.then((r) => {
|
|
42
|
+
setHash(r);
|
|
43
|
+
})
|
|
44
|
+
.catch((e) => {
|
|
45
|
+
console.error(e.message);
|
|
46
|
+
reportError({
|
|
47
|
+
apiUrl: SDKConfig?.urls?.apiV2,
|
|
48
|
+
error: e.message,
|
|
49
|
+
extraInfo: { type: 'claimLaunchBond', error: e.message },
|
|
50
|
+
chainId: userBill?.chainId,
|
|
51
|
+
account,
|
|
52
|
+
});
|
|
53
|
+
addToastError(e.shortMessage);
|
|
54
|
+
})
|
|
55
|
+
.finally(() => setLoading(false));
|
|
56
|
+
};
|
|
57
|
+
useEffect(() => {
|
|
58
|
+
if (isSuccess) {
|
|
59
|
+
onSuccessFullTx?.();
|
|
60
|
+
}
|
|
61
|
+
}, [isSuccess, onSuccessFullTx]);
|
|
62
|
+
return (jsx(Modal, { sx: {
|
|
63
|
+
width: '400px',
|
|
64
|
+
overflowY: 'unset !important',
|
|
65
|
+
background: 'white2',
|
|
66
|
+
top: '56%',
|
|
67
|
+
}, title: 'Confirm Unstake', onDismiss: onDismiss, children: jsxs(Flex, { sx: { width: '100%', flexDirection: 'column' }, children: [jsx(Flex, { sx: { fontSize: ['16px', '16px', '16px', '20px'], fontWeight: [600, 600, 600, 700] }, children: "Are you sure you want to unstake?" }), jsx(Flex, { sx: { fontSize: '14px', fontWeight: 400, mt: '10px' }, children: `You'll lose the rewards that have not been accrued yet (${formatNumberSI(futureRewards)} ${userBill?.underlyingEarnToken?.symbol}).` }), jsxs(Flex, { sx: { width: '100%', mt: '15px', fontWeight: 400, fontSize: '14px', alignItems: 'center' }, children: [jsx(Checkbox, { checked: acknowledge, onChange: () => setAcknowledge(!acknowledge), sx: { mr: '10px' } }), "I understand and I want to proceed to unstake."] }), jsxs(Flex, { sx: { width: '100%', gap: '10px', mt: '15px' }, children: [jsx(Button, { sx: { width: '100%', fontSize: '14px', height: '35px' }, disabled: !acknowledge || loading || isLoadingOnChain, load: loading, onClick: handleUnstake, children: "Unstake" }), jsx(Button, { variant: "secondary", sx: { width: '100%', height: '35px', fontSize: '14px' }, onClick: onDismiss, children: "Cancel" })] })] }) }));
|
|
68
|
+
};
|
|
69
|
+
|
|
70
|
+
export { UnstakeModalYield as default };
|
|
71
|
+
//# sourceMappingURL=UnstakeModalYield.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"UnstakeModalYield.js","sources":["../../../../../src/views/YourBondsModalYield/components/UnstakeModalYield/UnstakeModalYield.tsx"],"sourcesContent":["import React, { useEffect, useState } from 'react'\nimport Modal from '../../../../components/uikit-sdk/Modal'\nimport { PreTGEUserBonds } from '../../../../state/bonds/useUserBondsPreTGE'\nimport Flex from '../../../../components/uikit-sdk/Flex'\nimport Vault_Shares_ABI from '../../../../config/abi/Vault_Shares.json'\nimport { useWriteContract } from 'wagmi'\nimport useEVMAccount from '../../../../hooks/accounts/useEVMAccount'\nimport { useSDKConfig } from '../../../../state/useSDKConfig'\nimport { usePopups } from '../../../../state/popups/usePopups'\nimport Checkbox from '../../../../components/uikit-sdk/Checkbox'\nimport Button from '../../../../components/uikit-sdk/Button/Button'\nimport { formatNumberSI } from '../../../../utils/formatNumber'\nimport { useMonitorTx } from '../../../../hooks/useMonitorTx'\n\nconst UnstakeModalYield = ({\n userBill,\n onSuccessFullTx,\n onDismiss,\n}: {\n userBill?: PreTGEUserBonds\n onSuccessFullTx?: () => void\n onDismiss?: () => void\n}) => {\n // Hooks\n const { writeContractAsync } = useWriteContract()\n const { address: account } = useEVMAccount()\n const SDKConfig = useSDKConfig()\n const { addToastError } = usePopups()\n\n // State\n const [loading, setLoading] = useState(false)\n const [hash, setHash] = useState('')\n const [acknowledge, setAcknowledge] = useState(false)\n\n const { isLoading: isLoadingOnChain, isSuccess } = useMonitorTx(hash, userBill?.chainId)\n\n // Static Data\n const futureRewards = userBill?.yieldData?.futureRewards ?? 0\n\n const handleUnstake = async () => {\n setLoading(true)\n setHash('')\n if (!userBill?.userOwnedBillsData?.id) return\n writeContractAsync({\n address: userBill?.earnToken.address[userBill?.chainId] as `0x${string}`,\n abi: Vault_Shares_ABI,\n functionName: 'redeem',\n args: [userBill?.yieldData?.vaultTokenBalance, account, account],\n chain: userBill?.chainId as any,\n account,\n })\n .then((r) => {\n setHash(r)\n })\n .catch((e) => {\n console.error(e.message)\n reportError({\n apiUrl: SDKConfig?.urls?.apiV2,\n error: e.message,\n extraInfo: { type: 'claimLaunchBond', error: e.message },\n chainId: userBill?.chainId,\n account,\n })\n addToastError(e.shortMessage)\n })\n .finally(() => setLoading(false))\n }\n\n useEffect(() => {\n if (isSuccess) {\n onSuccessFullTx?.()\n }\n }, [isSuccess, onSuccessFullTx])\n\n return (\n <Modal\n sx={{\n width: '400px',\n overflowY: 'unset !important',\n background: 'white2',\n top: '56%',\n }}\n title={'Confirm Unstake'}\n onDismiss={onDismiss}\n >\n <Flex sx={{ width: '100%', flexDirection: 'column' }}>\n <Flex sx={{ fontSize: ['16px', '16px', '16px', '20px'], fontWeight: [600, 600, 600, 700] }}>\n Are you sure you want to unstake?\n </Flex>\n <Flex\n sx={{ fontSize: '14px', fontWeight: 400, mt: '10px' }}\n >{`You'll lose the rewards that have not been accrued yet (${formatNumberSI(futureRewards)} ${userBill?.underlyingEarnToken?.symbol}).`}</Flex>\n <Flex sx={{ width: '100%', mt: '15px', fontWeight: 400, fontSize: '14px', alignItems: 'center' }}>\n <Checkbox checked={acknowledge} onChange={() => setAcknowledge(!acknowledge)} sx={{ mr: '10px' }} />I\n understand and I want to proceed to unstake.\n </Flex>\n <Flex sx={{ width: '100%', gap: '10px', mt: '15px' }}>\n <Button\n sx={{ width: '100%', fontSize: '14px', height: '35px' }}\n disabled={!acknowledge || loading || isLoadingOnChain}\n load={loading}\n onClick={handleUnstake}\n >\n Unstake\n </Button>\n <Button variant=\"secondary\" sx={{ width: '100%', height: '35px', fontSize: '14px' }} onClick={onDismiss}>\n Cancel\n </Button>\n </Flex>\n </Flex>\n </Modal>\n )\n}\n\nexport default UnstakeModalYield\n"],"names":["_jsx","_jsxs"],"mappings":"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"}
|
package/dist/views/YourBondsModalYield/components/YourBondModalHeader/YourBondModalHeader.d.ts
ADDED
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import { PreTGEUserBonds } from '../../../../state/bonds/useUserBondsPreTGE';
|
|
3
|
+
declare const YourBondModalHeader: ({ userBill, onDismiss }: {
|
|
4
|
+
userBill?: PreTGEUserBonds;
|
|
5
|
+
onDismiss?: () => void;
|
|
6
|
+
}) => React.JSX.Element;
|
|
7
|
+
export default YourBondModalHeader;
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import { jsxs, jsx, Fragment } from 'theme-ui/jsx-runtime';
|
|
2
|
+
import TokenImage from '../../../../components/uikit-sdk/TokenImage/index.js';
|
|
3
|
+
import { Box } from 'theme-ui';
|
|
4
|
+
import Flex from '../../../../components/uikit-sdk/Flex/index.js';
|
|
5
|
+
import Skeleton from '../../../../components/uikit-sdk/Skeleton/index.js';
|
|
6
|
+
import Svg from '../../../../components/uikit-sdk/Svg/index.js';
|
|
7
|
+
import ListTag from '../../../../components/uikit-sdk/Tag/ListTag.js';
|
|
8
|
+
|
|
9
|
+
const YourBondModalHeader = ({ userBill, onDismiss }) => {
|
|
10
|
+
// Static Data
|
|
11
|
+
const payoutTokenSymbol = userBill?.underlyingEarnToken?.symbol;
|
|
12
|
+
return (jsxs(Flex, { sx: { width: '100%', justifyContent: 'space-between', alignItems: 'center' }, children: [jsx(Flex, { sx: { alignItems: 'center', gap: '7px' }, children: payoutTokenSymbol ? (jsxs(Fragment, { children: [jsx(TokenImage, { symbol: payoutTokenSymbol, size: 30, chain: userBill?.chainId }), jsx(Box, { sx: {
|
|
13
|
+
fontSize: ['16px', '16px', '16px', '18px'],
|
|
14
|
+
fontWeight: 700,
|
|
15
|
+
opacity: 0.7,
|
|
16
|
+
overflow: 'hidden',
|
|
17
|
+
whiteSpace: 'nowrap',
|
|
18
|
+
textOverflow: 'ellipsis',
|
|
19
|
+
maxWidth: '100px',
|
|
20
|
+
}, children: payoutTokenSymbol }), jsx(ListTag, { text: 'Yield Bond' })] })) : (jsxs(Fragment, { children: [jsx(Skeleton, { animation: "waves", sx: {
|
|
21
|
+
width: '30px',
|
|
22
|
+
height: '30px',
|
|
23
|
+
borderRadius: '55px',
|
|
24
|
+
mr: '10px',
|
|
25
|
+
} }), jsx(Skeleton, { animation: "waves", sx: {
|
|
26
|
+
width: '100px',
|
|
27
|
+
borderRadius: 'normal',
|
|
28
|
+
} })] })) }), jsx(Flex, { className: "svg-close", onClick: onDismiss, sx: { cursor: 'pointer', p: '2px 5px' }, children: jsx(Svg, { icon: "close", width: '16px' }) })] }));
|
|
29
|
+
};
|
|
30
|
+
|
|
31
|
+
export { YourBondModalHeader as default };
|
|
32
|
+
//# sourceMappingURL=YourBondModalHeader.js.map
|
package/dist/views/YourBondsModalYield/components/YourBondModalHeader/YourBondModalHeader.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"YourBondModalHeader.js","sources":["../../../../../src/views/YourBondsModalYield/components/YourBondModalHeader/YourBondModalHeader.tsx"],"sourcesContent":["import React from 'react'\nimport TokenImage from '../../../../components/uikit-sdk/TokenImage'\nimport { Box } from 'theme-ui'\nimport Flex from '../../../../components/uikit-sdk/Flex'\nimport Skeleton from '../../../../components/uikit-sdk/Skeleton'\nimport { PreTGEUserBonds } from '../../../../state/bonds/useUserBondsPreTGE'\nimport Svg from '../../../../components/uikit-sdk/Svg'\nimport ListTag from '../../../../components/uikit-sdk/Tag/ListTag'\n\nconst YourBondModalHeader = ({ userBill, onDismiss }: { userBill?: PreTGEUserBonds; onDismiss?: () => void }) => {\n // Static Data\n const payoutTokenSymbol = userBill?.underlyingEarnToken?.symbol\n\n return (\n <Flex sx={{ width: '100%', justifyContent: 'space-between', alignItems: 'center' }}>\n <Flex sx={{ alignItems: 'center', gap: '7px' }}>\n {payoutTokenSymbol ? (\n <>\n <TokenImage symbol={payoutTokenSymbol} size={30} chain={userBill?.chainId} />\n <Box\n sx={{\n fontSize: ['16px', '16px', '16px', '18px'],\n fontWeight: 700,\n opacity: 0.7,\n overflow: 'hidden',\n whiteSpace: 'nowrap',\n textOverflow: 'ellipsis',\n maxWidth: '100px',\n }}\n >\n {payoutTokenSymbol}\n </Box>\n <ListTag text={'Yield Bond'} />\n </>\n ) : (\n <>\n <Skeleton\n animation=\"waves\"\n sx={{\n width: '30px',\n height: '30px',\n borderRadius: '55px',\n mr: '10px',\n }}\n />\n <Skeleton\n animation=\"waves\"\n sx={{\n width: '100px',\n borderRadius: 'normal',\n }}\n />\n </>\n )}\n </Flex>\n <Flex className=\"svg-close\" onClick={onDismiss} sx={{ cursor: 'pointer', p: '2px 5px' }}>\n <Svg icon=\"close\" width={'16px'} />\n </Flex>\n </Flex>\n )\n}\n\nexport default YourBondModalHeader\n"],"names":["_jsxs","_jsx","_Fragment"],"mappings":";;;;;;;;AASA,MAAM,mBAAmB,GAAG,CAAC,EAAE,QAAQ,EAAE,SAAS,EAA0D,KAAI;;AAE9G,IAAA,MAAM,iBAAiB,GAAG,QAAQ,EAAE,mBAAmB,EAAE,MAAM;AAE/D,IAAA,QACEA,IAAA,CAAC,IAAI,EAAA,EAAC,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,cAAc,EAAE,eAAe,EAAE,UAAU,EAAE,QAAQ,EAAE,EAAA,QAAA,EAAA,CAChFC,GAAA,CAAC,IAAI,EAAA,EAAC,EAAE,EAAE,EAAE,UAAU,EAAE,QAAQ,EAAE,GAAG,EAAE,KAAK,EAAE,EAAA,QAAA,EAC3C,iBAAiB,IAChBD,IAAA,CAAAE,QAAA,EAAA,EAAA,QAAA,EAAA,CACED,GAAA,CAAC,UAAU,EAAA,EAAC,MAAM,EAAE,iBAAiB,EAAE,IAAI,EAAE,EAAE,EAAE,KAAK,EAAE,QAAQ,EAAE,OAAO,EAAA,CAAI,EAC7EA,GAAA,CAAC,GAAG,EAAA,EACF,EAAE,EAAE;gCACF,QAAQ,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC;AAC1C,gCAAA,UAAU,EAAE,GAAG;AACf,gCAAA,OAAO,EAAE,GAAG;AACZ,gCAAA,QAAQ,EAAE,QAAQ;AAClB,gCAAA,UAAU,EAAE,QAAQ;AACpB,gCAAA,YAAY,EAAE,UAAU;AACxB,gCAAA,QAAQ,EAAE,OAAO;6BAClB,EAAA,QAAA,EAEA,iBAAiB,EAAA,CACd,EACNA,GAAA,CAAC,OAAO,IAAC,IAAI,EAAE,YAAY,EAAA,CAAI,CAAA,EAAA,CAC9B,KAEHD,IAAA,CAAAE,QAAA,EAAA,EAAA,QAAA,EAAA,CACED,GAAA,CAAC,QAAQ,EAAA,EACP,SAAS,EAAC,OAAO,EACjB,EAAE,EAAE;AACF,gCAAA,KAAK,EAAE,MAAM;AACb,gCAAA,MAAM,EAAE,MAAM;AACd,gCAAA,YAAY,EAAE,MAAM;AACpB,gCAAA,EAAE,EAAE,MAAM;6BACX,EAAA,CACD,EACFA,IAAC,QAAQ,EAAA,EACP,SAAS,EAAC,OAAO,EACjB,EAAE,EAAE;AACF,gCAAA,KAAK,EAAE,OAAO;AACd,gCAAA,YAAY,EAAE,QAAQ;AACvB,6BAAA,EAAA,CACD,IACD,CACJ,EAAA,CACI,EACPA,GAAA,CAAC,IAAI,IAAC,SAAS,EAAC,WAAW,EAAC,OAAO,EAAE,SAAS,EAAE,EAAE,EAAE,EAAE,MAAM,EAAE,SAAS,EAAE,CAAC,EAAE,SAAS,EAAE,EAAA,QAAA,EACrFA,GAAA,CAAC,GAAG,EAAA,EAAC,IAAI,EAAC,OAAO,EAAC,KAAK,EAAE,MAAM,GAAI,EAAA,CAC9B,CAAA,EAAA,CACF;AAEX;;;;"}
|
package/package.json
CHANGED
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
"description": "Ape Bond SDK",
|
|
4
4
|
"author": "Ape Bond",
|
|
5
5
|
"license": "MIT",
|
|
6
|
-
"version": "6.0.
|
|
6
|
+
"version": "6.1.0-test.0",
|
|
7
7
|
"module": "dist/main.js",
|
|
8
8
|
"type": "module",
|
|
9
9
|
"types": "dist/main.d.ts",
|
|
@@ -153,7 +153,7 @@
|
|
|
153
153
|
"wagmi": "2.19.5"
|
|
154
154
|
},
|
|
155
155
|
"dependencies": {
|
|
156
|
-
"@ape.swap/apeswap-lists": "4.
|
|
156
|
+
"@ape.swap/apeswap-lists": "4.6.0-test.2",
|
|
157
157
|
"@emotion/react": "11.14.0",
|
|
158
158
|
"@jup-ag/api": "6.0.45",
|
|
159
159
|
"bignumber.js": "9.3.1",
|