@ape.swap/bonds-sdk 5.1.48 → 5.1.49-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/README.md +14 -7
- package/dist/components/ConnectAptosWalletButton/ConnectAptosWalletButton.d.ts +4 -0
- package/dist/components/ConnectAptosWalletButton/ConnectAptosWalletButton.js +39 -0
- package/dist/components/ConnectAptosWalletButton/ConnectAptosWalletButton.js.map +1 -0
- package/dist/components/ConnectSuiWalletButton/ConnectSuiWalletButton.d.ts +5 -0
- package/dist/components/ConnectoToVmBanners/ConnectToAptosBanner.d.ts +1 -0
- package/dist/components/ConnectoToVmBanners/ConnectToAptosBanner.js +49 -0
- package/dist/components/ConnectoToVmBanners/ConnectToAptosBanner.js.map +1 -0
- package/dist/components/ConnectoToVmBanners/ConnectToEvmBanner.js +11 -15
- package/dist/components/ConnectoToVmBanners/ConnectToEvmBanner.js.map +1 -1
- package/dist/components/ConnectoToVmBanners/ConnectToSolanaBanner.js +13 -17
- package/dist/components/ConnectoToVmBanners/ConnectToSolanaBanner.js.map +1 -1
- package/dist/components/ConnectoToVmBanners/ConnectToSuiBanner.d.ts +1 -0
- package/dist/components/ConnectoToVmBanners/ConnectToSuiBanner.js +44 -0
- package/dist/components/ConnectoToVmBanners/ConnectToSuiBanner.js.map +1 -0
- package/dist/components/TokenInfoAndName/index.js +2 -0
- package/dist/components/TokenInfoAndName/index.js.map +1 -1
- package/dist/components/TokenSelectorPanel/index.js +11 -1
- package/dist/components/TokenSelectorPanel/index.js.map +1 -1
- package/dist/components/Tooltip/Tooltip.js +11 -3
- package/dist/components/Tooltip/Tooltip.js.map +1 -1
- package/dist/components/uikit-sdk/Svg/index.js +6 -0
- package/dist/components/uikit-sdk/Svg/index.js.map +1 -1
- package/dist/components/uikit-sdk/Svg/tokens/APTOS.d.ts +4 -0
- package/dist/components/uikit-sdk/Svg/tokens/APTOS.js +8 -0
- package/dist/components/uikit-sdk/Svg/tokens/APTOS.js.map +1 -0
- package/dist/components/uikit-sdk/Svg/tokens/SUI.d.ts +4 -0
- package/dist/components/uikit-sdk/Svg/tokens/SUI.js +8 -0
- package/dist/components/uikit-sdk/Svg/tokens/SUI.js.map +1 -0
- package/dist/components/uikit-sdk/Svg/types.d.ts +2 -0
- package/dist/components/uikit-sdk/Svg/types.js +2 -0
- package/dist/components/uikit-sdk/Svg/types.js.map +1 -1
- package/dist/components/uikit-sdk/TokenImage/index.js +15 -3
- package/dist/components/uikit-sdk/TokenImage/index.js.map +1 -1
- package/dist/config/constants/addresses.d.ts +1 -1
- package/dist/config/constants/addresses.js +2 -0
- package/dist/config/constants/addresses.js.map +1 -1
- package/dist/config/constants/aptosZapTokens.d.ts +23 -0
- package/dist/config/constants/aptosZapTokens.js +66 -0
- package/dist/config/constants/aptosZapTokens.js.map +1 -0
- package/dist/config/constants/chains.d.ts +3 -1
- package/dist/config/constants/chains.js +12 -0
- package/dist/config/constants/chains.js.map +1 -1
- package/dist/config/constants/networks.js +9 -0
- package/dist/config/constants/networks.js.map +1 -1
- package/dist/config/constants/queryKeys.js +23 -1
- package/dist/config/constants/queryKeys.js.map +1 -1
- package/dist/config/constants/suiZapTokens.d.ts +14 -0
- package/dist/config/constants/suiZapTokens.js +41 -0
- package/dist/config/constants/suiZapTokens.js.map +1 -0
- package/dist/config/constants/tokens.js +48 -0
- package/dist/config/constants/tokens.js.map +1 -0
- package/dist/config/constants/variables.d.ts +1 -1
- package/dist/config/constants/variables.js +2 -0
- package/dist/config/constants/variables.js.map +1 -1
- package/dist/constants/aptosConstants.d.ts +20 -0
- package/dist/constants/aptosConstants.js +78 -0
- package/dist/constants/aptosConstants.js.map +1 -0
- package/dist/constants/suiConstants.d.ts +18 -0
- package/dist/constants/suiConstants.js +61 -0
- package/dist/constants/suiConstants.js.map +1 -0
- package/dist/hooks/accounts/useAPTAccount.d.ts +30 -0
- package/dist/hooks/accounts/useAPTAccount.js +39 -0
- package/dist/hooks/accounts/useAPTAccount.js.map +1 -0
- package/dist/hooks/accounts/useSUIAccount.d.ts +7 -0
- package/dist/hooks/accounts/useSUIAccount.js +46 -0
- package/dist/hooks/accounts/useSUIAccount.js.map +1 -0
- package/dist/hooks/useMonitorTx.d.ts +2 -21
- package/dist/hooks/useMonitorTx.js.map +1 -1
- package/dist/hooks/useSortedZapList.js +7 -2
- package/dist/hooks/useSortedZapList.js.map +1 -1
- package/dist/hooks/useTokenFromZapList.js +1 -0
- package/dist/hooks/useTokenFromZapList.js.map +1 -1
- package/dist/providers/AptosWalletProvider.d.ts +5 -0
- package/dist/providers/SuiWalletProvider.d.ts +5 -0
- package/dist/state/balance/useCurrencyBalance.js +9 -0
- package/dist/state/balance/useCurrencyBalance.js.map +1 -1
- package/dist/state/balance/useCurrencyBalanceAptos.d.ts +14 -0
- package/dist/state/balance/useCurrencyBalanceAptos.js +75 -0
- package/dist/state/balance/useCurrencyBalanceAptos.js.map +1 -0
- package/dist/state/balance/useCurrencyBalanceSui.d.ts +14 -0
- package/dist/state/balance/useCurrencyBalanceSui.js +42 -0
- package/dist/state/balance/useCurrencyBalanceSui.js.map +1 -0
- package/dist/state/balance/useUserTokensBalance.js +19 -1
- package/dist/state/balance/useUserTokensBalance.js.map +1 -1
- package/dist/state/bonds/aptosBondsConfig.d.ts +4 -0
- package/dist/state/bonds/aptosBondsConfig.js +114 -0
- package/dist/state/bonds/aptosBondsConfig.js.map +1 -0
- package/dist/state/bonds/fetchBillsUserAptos.d.ts +4 -0
- package/dist/state/bonds/fetchBillsUserAptos.js +187 -0
- package/dist/state/bonds/fetchBillsUserAptos.js.map +1 -0
- package/dist/state/bonds/fetchBillsUserSui.d.ts +4 -0
- package/dist/state/bonds/fetchBillsUserSui.js +287 -0
- package/dist/state/bonds/fetchBillsUserSui.js.map +1 -0
- package/dist/state/bonds/fetchBondsDataAptos.d.ts +12 -0
- package/dist/state/bonds/fetchBondsDataAptos.js +114 -0
- package/dist/state/bonds/fetchBondsDataAptos.js.map +1 -0
- package/dist/state/bonds/fetchBondsDataSui.d.ts +13 -0
- package/dist/state/bonds/fetchBondsDataSui.js +205 -0
- package/dist/state/bonds/fetchBondsDataSui.js.map +1 -0
- package/dist/state/bonds/suiBondsConfig.d.ts +4 -0
- package/dist/state/bonds/suiBondsConfig.js +113 -0
- package/dist/state/bonds/suiBondsConfig.js.map +1 -0
- package/dist/state/bonds/useBondsData.js +32 -8
- package/dist/state/bonds/useBondsData.js.map +1 -1
- package/dist/state/bonds/useBondsList.js +15 -2
- package/dist/state/bonds/useBondsList.js.map +1 -1
- package/dist/state/bonds/useUserBonds.d.ts +1 -1
- package/dist/state/bonds/useUserBonds.js +34 -12
- package/dist/state/bonds/useUserBonds.js.map +1 -1
- package/dist/state/bonds/utils.js +8 -0
- package/dist/state/bonds/utils.js.map +1 -1
- package/dist/state/price/useCurrencyPrice.js +2 -1
- package/dist/state/price/useCurrencyPrice.js.map +1 -1
- package/dist/state/tiers/useTierPoints.js +1 -4
- package/dist/state/tiers/useTierPoints.js.map +1 -1
- package/dist/state/tokenPrices/useTokenPrices.js +16 -1
- package/dist/state/tokenPrices/useTokenPrices.js.map +1 -1
- package/dist/state/useSDKConfig.d.ts +4 -0
- package/dist/state/useSDKConfig.js.map +1 -1
- package/dist/state/zap/useAptosZapQuote.d.ts +28 -0
- package/dist/state/zap/useAptosZapQuote.js +83 -0
- package/dist/state/zap/useAptosZapQuote.js.map +1 -0
- package/dist/state/zap/useSoulZapBondQuote.js +1 -0
- package/dist/state/zap/useSoulZapBondQuote.js.map +1 -1
- package/dist/state/zap/useSuiZapQuote.d.ts +24 -0
- package/dist/state/zap/useSuiZapQuote.js +119 -0
- package/dist/state/zap/useSuiZapQuote.js.map +1 -0
- package/dist/types/aptosBonds.d.ts +152 -0
- package/dist/types/yourbonds.d.ts +3 -9
- package/dist/utils/aptosHelpers.d.ts +80 -0
- package/dist/utils/aptosHelpers.js +202 -0
- package/dist/utils/aptosHelpers.js.map +1 -0
- package/dist/utils/getNativeTicker.js +1 -0
- package/dist/utils/getNativeTicker.js.map +1 -1
- package/dist/utils/suiHelpers.d.ts +6 -0
- package/dist/utils/suiHelpers.js +106 -0
- package/dist/utils/suiHelpers.js.map +1 -0
- package/dist/views/Bonds/components/BondRows/ActiveBondRows.js +8 -2
- package/dist/views/Bonds/components/BondRows/ActiveBondRows.js.map +1 -1
- package/dist/views/Bonds/components/BondRows/ModalHandler.js +18 -1
- package/dist/views/Bonds/components/BondRows/ModalHandler.js.map +1 -1
- package/dist/views/Bonds/components/ChainBanner/ChainBanner.js +29 -0
- package/dist/views/Bonds/components/ChainBanner/ChainBanner.js.map +1 -1
- package/dist/views/BuyBond/BuyBondModal.js +4 -1
- package/dist/views/BuyBond/BuyBondModal.js.map +1 -1
- package/dist/views/BuyBond/BuyComponentAptos.d.ts +10 -0
- package/dist/views/BuyBond/BuyComponentAptos.js +349 -0
- package/dist/views/BuyBond/BuyComponentAptos.js.map +1 -0
- package/dist/views/BuyBond/BuyComponentSui.d.ts +10 -0
- package/dist/views/BuyBond/BuyComponentSui.js +459 -0
- package/dist/views/BuyBond/BuyComponentSui.js.map +1 -0
- package/dist/views/BuyBond/components/Estimations.js +2 -1
- package/dist/views/BuyBond/components/Estimations.js.map +1 -1
- package/dist/views/BuyBond/components/PointsLeftForNextTier/PointsLeftForNextTier.js +8 -23
- package/dist/views/BuyBond/components/PointsLeftForNextTier/PointsLeftForNextTier.js.map +1 -1
- package/dist/views/YourBonds/YourBonds.js +19 -2
- package/dist/views/YourBonds/YourBonds.js.map +1 -1
- package/dist/views/YourBonds/components/ClaimAll/ClaimAllModal.js +139 -5
- package/dist/views/YourBonds/components/ClaimAll/ClaimAllModal.js.map +1 -1
- package/dist/views/YourBonds/components/ClaimAll/index.js +6 -2
- package/dist/views/YourBonds/components/ClaimAll/index.js.map +1 -1
- package/dist/views/YourBonds/components/UserBondRow/UserBondRowAptos.d.ts +6 -0
- package/dist/views/YourBonds/components/UserBondRow/UserBondRowAptos.js +109 -0
- package/dist/views/YourBonds/components/UserBondRow/UserBondRowAptos.js.map +1 -0
- package/dist/views/YourBonds/components/UserBondRow/UserBondRowSui.d.ts +6 -0
- package/dist/views/YourBonds/components/UserBondRow/UserBondRowSui.js +126 -0
- package/dist/views/YourBonds/components/UserBondRow/UserBondRowSui.js.map +1 -0
- package/dist/views/YourBonds/components/UserBondRow/index.d.ts +2 -0
- package/dist/views/YourBondsModal/YourBondsModal.js +3 -1
- package/dist/views/YourBondsModal/YourBondsModal.js.map +1 -1
- package/dist/views/YourBondsModal/components/Actions/ActionsAptos.d.ts +6 -0
- package/dist/views/YourBondsModal/components/Actions/ActionsAptos.js +96 -0
- package/dist/views/YourBondsModal/components/Actions/ActionsAptos.js.map +1 -0
- package/dist/views/YourBondsModal/components/Actions/ActionsSui.d.ts +6 -0
- package/dist/views/YourBondsModal/components/Actions/ActionsSui.js +115 -0
- package/dist/views/YourBondsModal/components/Actions/ActionsSui.js.map +1 -0
- package/dist/views/YourBondsModal/components/TransferBondModal/TransferActionAptos.d.ts +8 -0
- package/dist/views/YourBondsModal/components/TransferBondModal/TransferActionAptos.js +18 -0
- package/dist/views/YourBondsModal/components/TransferBondModal/TransferActionAptos.js.map +1 -0
- package/dist/views/YourBondsModal/components/TransferBondModal/index.js +2 -1
- package/dist/views/YourBondsModal/components/TransferBondModal/index.js.map +1 -1
- package/package.json +7 -4
|
@@ -0,0 +1,126 @@
|
|
|
1
|
+
import { jsx, jsxs } from 'theme-ui/jsx-runtime';
|
|
2
|
+
import { useState } from 'react';
|
|
3
|
+
import { ChainId } from '@ape.swap/apeswap-lists';
|
|
4
|
+
import { Transaction } from '@mysten/sui/transactions';
|
|
5
|
+
import TokenInfoAndName from '../../../../components/TokenInfoAndName/index.js';
|
|
6
|
+
import { formatNumberSI } from '../../../../utils/formatNumber.js';
|
|
7
|
+
import Button from '../../../../components/uikit-sdk/Button/Button.js';
|
|
8
|
+
import Svg from '../../../../components/uikit-sdk/Svg/index.js';
|
|
9
|
+
import TooltipBubble from '../../../../components/uikit-sdk/TooltipBubble/index.js';
|
|
10
|
+
import Flex from '../../../../components/uikit-sdk/Flex/index.js';
|
|
11
|
+
import { NETWORK_LABEL } from '../../../../config/constants/chains.js';
|
|
12
|
+
import { getTimeLeftForFullyVested, getPendingVestingString, claimable, pending, getPercentageVested } from '../../../../utils/displayHelpers.js';
|
|
13
|
+
import useModal from '../../../../hooks/useModal.js';
|
|
14
|
+
import { usePopups } from '../../../../state/popups/usePopups.js';
|
|
15
|
+
import BondInfoTooltip from '../../../../components/Tooltip/Tooltip.js';
|
|
16
|
+
import { getTimePeriods } from '../../../../utils/getTimePeriods.js';
|
|
17
|
+
import ProfitCard from '../ProfitCard/ProfitCard.js';
|
|
18
|
+
import ProgressBar from '../../../../components/ProgressBar/ProgressBar.js';
|
|
19
|
+
import ProgressBarWrapper from '../../../../components/ProgressBar/ProgressBarWrapper.js';
|
|
20
|
+
import { useSDKConfig } from '../../../../state/useSDKConfig.js';
|
|
21
|
+
import YourBondsModal from '../../../YourBondsModal/YourBondsModal.js';
|
|
22
|
+
import { reportError } from '../../../../utils/reportError.js';
|
|
23
|
+
import { useQueryClient } from '@tanstack/react-query';
|
|
24
|
+
import useSUIAccount from '../../../../hooks/accounts/useSUIAccount.js';
|
|
25
|
+
import { SUI_BOND_MARKET, SUI_CLAIM_FUNCTION } from '../../../../constants/suiConstants.js';
|
|
26
|
+
import { getSuiClient, verifySuiTxSuccess } from '../../../../utils/suiHelpers.js';
|
|
27
|
+
import { QUERY_KEYS } from '../../../../config/constants/queryKeys.js';
|
|
28
|
+
|
|
29
|
+
// Row renderer for Sui user bonds. Structure and layout mirror
|
|
30
|
+
// `UserBondRowAptos` so the Your Bonds grid stays visually consistent
|
|
31
|
+
// across VMs. The only meaningful divergence is `handleClaim`, which
|
|
32
|
+
// builds a Sui `Transaction` with a moveCall for the claim function.
|
|
33
|
+
const UserBondRowSui = ({ bill }) => {
|
|
34
|
+
// Hooks
|
|
35
|
+
const SDKConfig = useSDKConfig();
|
|
36
|
+
const queryClient = useQueryClient();
|
|
37
|
+
const { address: suiAccount, signAndExecuteTransaction } = useSUIAccount();
|
|
38
|
+
const { addToastError, addToastSuccess } = usePopups();
|
|
39
|
+
// State
|
|
40
|
+
const [loadingTx, setLoadingTx] = useState(false);
|
|
41
|
+
// Static Data
|
|
42
|
+
const earnTokenPrice = parseFloat(bill?.bond?.payoutTokenPrice ?? '0');
|
|
43
|
+
const vestingCliff = bill?.bond?.vestingCliff;
|
|
44
|
+
const currentTime = Math.round(new Date().getTime() / 1000);
|
|
45
|
+
const vestingStartTimestamp = parseInt(bill?.vestingStartTimestamp ?? '0');
|
|
46
|
+
const isPendingCliff = vestingCliff ? currentTime - vestingStartTimestamp < vestingCliff : false;
|
|
47
|
+
const cliffCountdown = getTimePeriods(vestingStartTimestamp + (vestingCliff ?? 0) - currentTime, true);
|
|
48
|
+
const [onOpenPurchasedBond] = useModal(jsx(YourBondsModal, { userBill: bill }));
|
|
49
|
+
const handleClaim = async () => {
|
|
50
|
+
if (loadingTx || !suiAccount || !signAndExecuteTransaction)
|
|
51
|
+
return;
|
|
52
|
+
try {
|
|
53
|
+
setLoadingTx(true);
|
|
54
|
+
const market = bill?.bond?.contractAddress?.[bill?.bond?.chainId ?? 0] ?? SUI_BOND_MARKET;
|
|
55
|
+
if (!market)
|
|
56
|
+
throw new Error('Missing bond market address');
|
|
57
|
+
// The user's BondNFT object ID is stored in `bill.address`
|
|
58
|
+
const nftObjectId = bill?.address;
|
|
59
|
+
if (!nftObjectId)
|
|
60
|
+
throw new Error('Missing bond NFT object ID');
|
|
61
|
+
const payoutCoinType = bill?.bond?.earnToken?.address?.[bill?.bond?.chainId ?? 0];
|
|
62
|
+
const principalCoinType = bill?.bond?.lpToken?.address?.[bill?.bond?.chainId ?? 0];
|
|
63
|
+
if (!payoutCoinType || !principalCoinType)
|
|
64
|
+
throw new Error('Missing token type info');
|
|
65
|
+
const tx = new Transaction();
|
|
66
|
+
const [claimedCoin] = tx.moveCall({
|
|
67
|
+
target: SUI_CLAIM_FUNCTION,
|
|
68
|
+
typeArguments: [payoutCoinType, principalCoinType],
|
|
69
|
+
arguments: [
|
|
70
|
+
tx.object(market),
|
|
71
|
+
tx.object(nftObjectId),
|
|
72
|
+
tx.object('0x6'), // clock
|
|
73
|
+
],
|
|
74
|
+
});
|
|
75
|
+
tx.transferObjects([claimedCoin], tx.pure.address(suiAccount));
|
|
76
|
+
// Pre-build so the wallet receives fully-resolved bytes
|
|
77
|
+
tx.setSender(suiAccount);
|
|
78
|
+
tx.setGasBudget(50000000);
|
|
79
|
+
const suiClient = getSuiClient();
|
|
80
|
+
const builtBytes = await tx.build({ client: suiClient });
|
|
81
|
+
const prebuiltTx = Transaction.from(builtBytes);
|
|
82
|
+
const response = await signAndExecuteTransaction({
|
|
83
|
+
transaction: prebuiltTx,
|
|
84
|
+
});
|
|
85
|
+
const digest = response?.digest;
|
|
86
|
+
if (!digest)
|
|
87
|
+
throw new Error('No tx digest returned by wallet');
|
|
88
|
+
await suiClient.waitForTransaction({ digest });
|
|
89
|
+
await verifySuiTxSuccess(digest);
|
|
90
|
+
await queryClient.invalidateQueries({ queryKey: [QUERY_KEYS.USER_BONDS] });
|
|
91
|
+
addToastSuccess(digest, ChainId.SUI_MAINNET);
|
|
92
|
+
}
|
|
93
|
+
catch (error) {
|
|
94
|
+
console.error('Sui claim failed:', error);
|
|
95
|
+
addToastError(error?.message ?? 'Unknown error');
|
|
96
|
+
reportError({
|
|
97
|
+
apiUrl: SDKConfig?.urls?.apiV2,
|
|
98
|
+
error,
|
|
99
|
+
chainId: ChainId.SUI_MAINNET,
|
|
100
|
+
account: suiAccount ?? '',
|
|
101
|
+
extraInfo: { type: 'suiClaim', bill, error },
|
|
102
|
+
});
|
|
103
|
+
}
|
|
104
|
+
finally {
|
|
105
|
+
setLoadingTx(false);
|
|
106
|
+
}
|
|
107
|
+
};
|
|
108
|
+
return (jsxs("div", { className: "your-bonds", onClick: () => onOpenPurchasedBond(), children: [jsxs("div", { className: "token-info-container", children: [jsx(TokenInfoAndName, { tokenSymbol: bill.bond?.earnToken.symbol, chain: bill?.bond?.chainId, vestEnds: getTimeLeftForFullyVested(bill) > 0 ? `Ends in ${getPendingVestingString(bill)}` : `Fully Vested`, isHotBond: true }), jsx("div", { className: "tooltip-column", children: jsx(TooltipBubble, { className: "tooltip-bubble", body: jsx(BondInfoTooltip, { earnTokenContract: bill?.bond?.earnToken.address[bill?.bond.chainId] || '', earnTokenSymbol: bill?.bond?.earnToken.symbol || '', bondContract: bill?.address ?? '', projectLink: bill?.bond?.projectLink, twitter: bill?.bond?.twitter, chain: bill?.bond?.chainId, cgId: bill?.bond?.cgId, dexscreener: bill?.bond?.dexscreener }), width: "205px", placement: "bottomRight", transformTip: "translate(5%, 0%)", children: jsx(Flex, { sx: { opacity: 0.8 }, children: jsx(Svg, { icon: "more", width: "25px" }) }) }) })] }), jsxs("div", { className: "your-bonds-columns-container", children: [jsx(Flex, { sx: { width: '125px' }, children: jsx(ProfitCard, { userBond: bill }) }), 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: [formatNumberSI(claimable(bill), 4), jsx("div", { className: "your-bonds-content-tokens-usd-amount", children: `($${(claimable(bill) * earnTokenPrice).toFixed(2)})` })] })] }), 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: [formatNumberSI(pending(bill), 4), jsx("div", { className: "your-bonds-content-tokens-usd-amount", children: `($${(pending(bill) * earnTokenPrice).toFixed(2)})` })] })] }), jsx("div", { className: "your-bonds-content hide-mobile", children: jsx(ProgressBarWrapper, { title: '', value: jsx(ProgressBar, { value: getPercentageVested(bill) }), style: {
|
|
109
|
+
width: '127px',
|
|
110
|
+
height: '25px',
|
|
111
|
+
flexDirection: 'column',
|
|
112
|
+
justifyContent: 'center',
|
|
113
|
+
display: ['none', 'none', 'none', 'flex'],
|
|
114
|
+
}, showTooltip: true, toolTip: getTimeLeftForFullyVested(bill) > 0
|
|
115
|
+
? `Fully vested in ${getPendingVestingString(bill)}.`
|
|
116
|
+
: `Fully Vested.` }) }), jsx("div", { className: "your-bonds-column-button", children: !suiAccount ? (jsxs(Button, { className: "button", disabled: true, fullWidth: true, children: ["Connect to ", NETWORK_LABEL[ChainId.SUI_MAINNET]] })) : (jsx(Button, { className: "button", disabled: claimable(bill) === 0 || loadingTx || isPendingCliff, load: loadingTx, onClick: (event) => {
|
|
117
|
+
event.stopPropagation();
|
|
118
|
+
if (!loadingTx)
|
|
119
|
+
handleClaim();
|
|
120
|
+
}, fullWidth: true, children: isPendingCliff
|
|
121
|
+
? `Claimable in ${cliffCountdown.days !== 0 ? `${cliffCountdown.days} days` : cliffCountdown.hours !== 0 ? `${cliffCountdown.hours} hours` : `${cliffCountdown.minutes} mins`}`
|
|
122
|
+
: 'Claim' })) })] })] }));
|
|
123
|
+
};
|
|
124
|
+
|
|
125
|
+
export { UserBondRowSui as default };
|
|
126
|
+
//# sourceMappingURL=UserBondRowSui.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"UserBondRowSui.js","sources":["../../../../../src/views/YourBonds/components/UserBondRow/UserBondRowSui.tsx"],"sourcesContent":["import React, { useState } from 'react'\nimport { ChainId } from '@ape.swap/apeswap-lists'\nimport { Transaction } from '@mysten/sui/transactions'\n\nimport TokenInfoAndName from '../../../../components/TokenInfoAndName'\nimport { formatNumberSI } from '../../../../utils/formatNumber'\nimport Button from '../../../../components/uikit-sdk/Button/Button'\nimport Svg from '../../../../components/uikit-sdk/Svg'\nimport TooltipBubble from '../../../../components/uikit-sdk/TooltipBubble'\nimport Flex from '../../../../components/uikit-sdk/Flex'\nimport { NETWORK_LABEL } from '../../../../config/constants/chains'\nimport { UserBill } from '../../../../types/yourbonds'\nimport {\n claimable,\n getPendingVestingString,\n getPercentageVested,\n getTimeLeftForFullyVested,\n pending,\n} from '../../../../utils/displayHelpers'\nimport useModal from '../../../../hooks/useModal'\nimport { usePopups } from '../../../../state/popups/usePopups'\nimport Tooltip from '../../../../components/Tooltip/Tooltip'\nimport { getTimePeriods } from '../../../../utils/getTimePeriods'\nimport ProfitCard from '../ProfitCard/ProfitCard'\nimport ProgressBar from '../../../../components/ProgressBar/ProgressBar'\nimport ProgressBarWrapper from '../../../../components/ProgressBar/ProgressBarWrapper'\nimport { useSDKConfig } from '../../../../state/useSDKConfig'\nimport YourBondsModal from '../../../YourBondsModal/YourBondsModal'\nimport { reportError } from '../../../../utils/reportError'\n\nimport { useQueryClient } from '@tanstack/react-query'\nimport useSUIAccount from '../../../../hooks/accounts/useSUIAccount'\nimport { SUI_CLAIM_FUNCTION, SUI_BOND_MARKET } from '../../../../constants/suiConstants'\nimport { getSuiClient, verifySuiTxSuccess } from '../../../../utils/suiHelpers'\nimport { QUERY_KEYS } from '../../../../config/constants/queryKeys'\n\n// Row renderer for Sui user bonds. Structure and layout mirror\n// `UserBondRowAptos` so the Your Bonds grid stays visually consistent\n// across VMs. The only meaningful divergence is `handleClaim`, which\n// builds a Sui `Transaction` with a moveCall for the claim function.\nconst UserBondRowSui = ({ bill }: { bill: UserBill }) => {\n // Hooks\n const SDKConfig = useSDKConfig()\n const queryClient = useQueryClient()\n const { address: suiAccount, signAndExecuteTransaction } = useSUIAccount()\n const { addToastError, addToastSuccess } = usePopups()\n\n // State\n const [loadingTx, setLoadingTx] = useState(false)\n\n // Static Data\n const earnTokenPrice = parseFloat(bill?.bond?.payoutTokenPrice ?? '0')\n const vestingCliff = bill?.bond?.vestingCliff\n const currentTime = Math.round(new Date().getTime() / 1000)\n const vestingStartTimestamp = parseInt(bill?.vestingStartTimestamp ?? '0')\n const isPendingCliff = vestingCliff ? currentTime - vestingStartTimestamp < vestingCliff : false\n const cliffCountdown = getTimePeriods(vestingStartTimestamp + (vestingCliff ?? 0) - currentTime, true)\n\n const [onOpenPurchasedBond] = useModal(<YourBondsModal userBill={bill} />)\n\n const handleClaim = async () => {\n if (loadingTx || !suiAccount || !signAndExecuteTransaction) return\n\n try {\n setLoadingTx(true)\n\n const market = bill?.bond?.contractAddress?.[bill?.bond?.chainId ?? 0] ?? SUI_BOND_MARKET\n if (!market) throw new Error('Missing bond market address')\n\n // The user's BondNFT object ID is stored in `bill.address`\n const nftObjectId = bill?.address\n if (!nftObjectId) throw new Error('Missing bond NFT object ID')\n\n const payoutCoinType = bill?.bond?.earnToken?.address?.[bill?.bond?.chainId ?? 0]\n const principalCoinType = bill?.bond?.lpToken?.address?.[bill?.bond?.chainId ?? 0]\n if (!payoutCoinType || !principalCoinType) throw new Error('Missing token type info')\n\n const tx = new Transaction()\n const [claimedCoin] = tx.moveCall({\n target: SUI_CLAIM_FUNCTION,\n typeArguments: [payoutCoinType, principalCoinType],\n arguments: [\n tx.object(market),\n tx.object(nftObjectId),\n tx.object('0x6'), // clock\n ],\n })\n tx.transferObjects([claimedCoin], tx.pure.address(suiAccount))\n\n // Pre-build so the wallet receives fully-resolved bytes\n tx.setSender(suiAccount)\n tx.setGasBudget(50_000_000)\n const suiClient = getSuiClient()\n const builtBytes = await tx.build({ client: suiClient })\n const prebuiltTx = Transaction.from(builtBytes)\n\n const response = await signAndExecuteTransaction({\n transaction: prebuiltTx,\n })\n\n const digest = response?.digest\n if (!digest) throw new Error('No tx digest returned by wallet')\n\n await suiClient.waitForTransaction({ digest })\n await verifySuiTxSuccess(digest)\n\n await queryClient.invalidateQueries({ queryKey: [QUERY_KEYS.USER_BONDS] })\n addToastSuccess(digest, ChainId.SUI_MAINNET)\n } catch (error: any) {\n console.error('Sui claim failed:', error)\n addToastError(error?.message ?? 'Unknown error')\n reportError({\n apiUrl: SDKConfig?.urls?.apiV2,\n error,\n chainId: ChainId.SUI_MAINNET,\n account: suiAccount ?? '',\n extraInfo: { type: 'suiClaim', bill, error },\n })\n } finally {\n setLoadingTx(false)\n }\n }\n\n return (\n <div className=\"your-bonds\" onClick={() => onOpenPurchasedBond()}>\n <div className=\"token-info-container\">\n <TokenInfoAndName\n tokenSymbol={bill.bond?.earnToken.symbol}\n chain={bill?.bond?.chainId}\n vestEnds={getTimeLeftForFullyVested(bill) > 0 ? `Ends in ${getPendingVestingString(bill)}` : `Fully Vested`}\n isHotBond\n />\n <div className=\"tooltip-column\">\n <TooltipBubble\n className=\"tooltip-bubble\"\n body={\n <Tooltip\n earnTokenContract={bill?.bond?.earnToken.address[bill?.bond.chainId] || ''}\n earnTokenSymbol={bill?.bond?.earnToken.symbol || ''}\n bondContract={bill?.address ?? ''}\n projectLink={bill?.bond?.projectLink}\n twitter={bill?.bond?.twitter}\n chain={bill?.bond?.chainId as number}\n cgId={bill?.bond?.cgId}\n dexscreener={bill?.bond?.dexscreener}\n />\n }\n width=\"205px\"\n placement=\"bottomRight\"\n transformTip=\"translate(5%, 0%)\"\n >\n <Flex sx={{ opacity: 0.8 }}>\n <Svg icon=\"more\" width=\"25px\" />\n </Flex>\n </TooltipBubble>\n </div>\n </div>\n <div className=\"your-bonds-columns-container\">\n <Flex sx={{ width: '125px' }}>\n <ProfitCard userBond={bill} />\n </Flex>\n <div className=\"your-bonds-content\">\n <div className=\"your-bonds-content-title\">Claimable</div>\n <div className=\"your-bonds-content-tokens-amount\">\n {formatNumberSI(claimable(bill), 4)}\n <div className=\"your-bonds-content-tokens-usd-amount\">\n {`($${(claimable(bill) * earnTokenPrice).toFixed(2)})`}\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 {formatNumberSI(pending(bill), 4)}\n <div className=\"your-bonds-content-tokens-usd-amount\">\n {`($${(pending(bill) * earnTokenPrice).toFixed(2)})`}\n </div>\n </div>\n </div>\n <div className=\"your-bonds-content hide-mobile\">\n <ProgressBarWrapper\n title={''}\n value={<ProgressBar value={getPercentageVested(bill)} />}\n style={{\n width: '127px',\n height: '25px',\n flexDirection: 'column',\n justifyContent: 'center',\n display: ['none', 'none', 'none', 'flex'],\n }}\n showTooltip={true}\n toolTip={\n getTimeLeftForFullyVested(bill) > 0\n ? `Fully vested in ${getPendingVestingString(bill)}.`\n : `Fully Vested.`\n }\n />\n </div>\n <div className=\"your-bonds-column-button\">\n {!suiAccount ? (\n <Button className=\"button\" disabled={true} fullWidth>\n Connect to {NETWORK_LABEL[ChainId.SUI_MAINNET]}\n </Button>\n ) : (\n <Button\n className=\"button\"\n disabled={claimable(bill) === 0 || loadingTx || isPendingCliff}\n load={loadingTx}\n onClick={(event) => {\n event.stopPropagation()\n if (!loadingTx) handleClaim()\n }}\n fullWidth\n >\n {isPendingCliff\n ? `Claimable in ${cliffCountdown.days !== 0 ? `${cliffCountdown.days} days` : cliffCountdown.hours !== 0 ? `${cliffCountdown.hours} hours` : `${cliffCountdown.minutes} mins`}`\n : 'Claim'}\n </Button>\n )}\n </div>\n </div>\n </div>\n )\n}\n\nexport default UserBondRowSui\n"],"names":["_jsx","_jsxs","Tooltip"],"mappings":"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"}
|
|
@@ -1,3 +1,5 @@
|
|
|
1
1
|
export { default as UserBondRow } from './UserBondRow';
|
|
2
2
|
export { default as UserBondRowSolana } from './UserBondRowSolana';
|
|
3
|
+
export { default as UserBondRowAptos } from './UserBondRowAptos';
|
|
4
|
+
export { default as UserBondRowSui } from './UserBondRowSui';
|
|
3
5
|
export { default as UserBondRowPreTGE } from './UserBondRowPreTGE';
|
|
@@ -14,6 +14,8 @@ import YourBondModalHeader from './components/YourBondModalHeader/YourBondModalH
|
|
|
14
14
|
import Actions from './components/Actions/Actions.js';
|
|
15
15
|
import { ChainId } from '@ape.swap/apeswap-lists';
|
|
16
16
|
import ActionsSolana from './components/Actions/ActionsSolana.js';
|
|
17
|
+
import ActionsAptos from './components/Actions/ActionsAptos.js';
|
|
18
|
+
import ActionsSui from './components/Actions/ActionsSui.js';
|
|
17
19
|
import Modal from '../../components/uikit-sdk/Modal/index.js';
|
|
18
20
|
import Flex from '../../components/uikit-sdk/Flex/index.js';
|
|
19
21
|
import Svg from '../../components/uikit-sdk/Svg/index.js';
|
|
@@ -135,7 +137,7 @@ const YourBondsModal = ({ userBill, lostProfit, onDismiss, }) => {
|
|
|
135
137
|
justifyContent: 'space-between',
|
|
136
138
|
gap: ['10px', '10px', '10px', '15px'],
|
|
137
139
|
height: '40px',
|
|
138
|
-
}, children: userBill?.bond?.chainId === ChainId.SOL ? (jsx(ActionsSolana, { userBill: userBill })) : (jsx(Actions, { userBill: userBill })) }), !lostProfit && jsx(Recommendations, { billAddress: userBill?.address })] })] }))] }) }));
|
|
140
|
+
}, children: userBill?.bond?.chainId === ChainId.SOL ? (jsx(ActionsSolana, { userBill: userBill })) : userBill?.bond?.chainId === ChainId.APTOS_MAINNET ? (jsx(ActionsAptos, { userBill: userBill })) : userBill?.bond?.chainId === ChainId.SUI_MAINNET ? (jsx(ActionsSui, { userBill: userBill })) : (jsx(Actions, { userBill: userBill })) }), !lostProfit && jsx(Recommendations, { billAddress: userBill?.address })] })] }))] }) }));
|
|
139
141
|
};
|
|
140
142
|
|
|
141
143
|
export { YourBondsModal as default };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"YourBondsModal.js","sources":["../../../src/views/YourBondsModal/YourBondsModal.tsx"],"sourcesContent":["import React, { useState } from 'react'\nimport { UserBill } from '../../types/yourbonds'\nimport TokenImage from '../../components/uikit-sdk/TokenImage'\nimport { formatNumberSI } from '../../utils/formatNumber'\nimport { UserBillTooltipText } from '../../config/constants/tooltips'\nimport Recommendations from './components/Recommendations/Recommendations'\nimport {\n claimable,\n claimableUSD,\n claimed,\n claimedUSD,\n getPendingVestingString,\n getPercentageVested,\n getTimeLeftForFullyVested,\n pending,\n pendingUSD,\n} from '../../utils/displayHelpers'\nimport { getTimePeriods } from '../../utils/getTimePeriods'\nimport SafeHTMLComponent from '../../components/SafeHTMLComponent'\nimport ProgressBar from '../../components/ProgressBar/ProgressBar'\nimport ProgressBarWrapper from '../../components/ProgressBar/ProgressBarWrapper'\nimport NFTImage from './components/NFTImage/NFTImage'\nimport YourBondModalHeader from './components/YourBondModalHeader/YourBondModalHeader'\nimport Actions from './components/Actions/Actions'\nimport { ChainId } from '@ape.swap/apeswap-lists'\nimport ActionsSolana from './components/Actions/ActionsSolana'\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'\n\nconst YourBondsModal = ({\n userBill,\n lostProfit,\n onDismiss,\n}: {\n userBill?: UserBill\n lostProfit?: string\n onDismiss?: () => void\n}) => {\n // State\n const [showNFTImg, setShowNFTImg] = useState(false)\n\n // Static Data\n const depositUSD = userBill?.nftData?.data?.dollarValue\n const payout = userBill?.nftData?.data?.payout\n const payoutTokenPrice = parseFloat(userBill?.bond?.payoutTokenPrice ?? '0')\n const payoutUSD = payout && payoutTokenPrice ? payout * payoutTokenPrice : 0\n const payoutSymbol = userBill?.bond?.showcaseTokenName ?? userBill?.bond?.earnToken.symbol\n const payoutTokenSymbol = payoutSymbol === 'AIX' && userBill?.bond?.chainId === ChainId.SOL ? 'SOLAIX' : payoutSymbol\n\n // Cliff display info:\n const vestingCliff = userBill?.bond?.vestingCliff\n const currentTime = Math.round(new Date().getTime() / 1000)\n const vestingStartTimestamp = parseInt(userBill?.vestingStartTimestamp ?? '0')\n const isPendingCliff = vestingCliff ? currentTime - vestingStartTimestamp < vestingCliff : false\n const cliffCountdown = getTimePeriods(vestingStartTimestamp + (vestingCliff ?? 0) - currentTime, true)\n\n return (\n <Modal\n sx={{\n width: '480px',\n overflowY: 'unset !important',\n background: showNFTImg ? 'transparent !important' : 'white2',\n p: '0px',\n top: '56%',\n }}\n >\n <Flex\n sx={{\n flexDirection: 'column',\n borderRadius: 'normal',\n position: 'relative',\n background: showNFTImg ? 'transparent !important' : 'white2',\n p: '20px',\n }}\n >\n <NFTImage userBill={userBill} showNFTImg={showNFTImg} setShowNFTImg={setShowNFTImg} />\n\n {/* Modal Content */}\n\n {!showNFTImg && (\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: '50%',\n alignItems: 'center',\n fontSize: '14px',\n }}\n >\n <Flex>Deposit</Flex>\n <Flex>${formatNumberSI(depositUSD)}</Flex>\n </Flex>\n <Flex\n sx={{ position: 'absolute', top: '50%', left: '50%', 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: '50%',\n alignItems: 'center',\n fontSize: '14px',\n }}\n >\n <Flex>Bond Value</Flex>\n <Flex sx={{ alignItems: 'center', gap: '5px' }}>\n <TokenImage symbol={payoutTokenSymbol} size={22} />\n <Flex sx={{ flexDirection: 'column', fontSize: '14px', lineHeight: '16px' }}>\n <Flex sx={{ justifyContent: 'center' }}>{formatNumberSI(payout ?? '0')}</Flex>\n <Flex sx={{ fontSize: '10px', fontWeight: 400, opacity: 0.6, justifyContent: 'center' }}>\n (${formatNumberSI(payoutUSD)})\n </Flex>\n </Flex>\n </Flex>\n </Flex>\n </Flex>\n {lostProfit && (\n <Flex\n sx={{\n background: 'white3',\n borderRadius: 'normal',\n width: '100%',\n p: '10px',\n justifyContent: 'space-between',\n }}\n >\n <Flex sx={{ width: '20%' }}>\n <img\n src={`https://ape.bond/images/launch/mythical.png`}\n alt=\"mythical\"\n style={{ width: '90px', height: '90px' }}\n />\n </Flex>\n <Flex sx={{ width: '75%', flexDirection: 'column', gap: '3px' }}>\n <Flex>\n You missed a <Flex sx={{ color: 'success', px: '3px' }}>${lostProfit}</Flex> bonus\n </Flex>\n <Flex sx={{ fontSize: '12px', lineHeight: '16px', fontWeight: 400 }}>\n Holding an Ape Tier would’ve gotten you an extra 5% bonus on this purchase and all future ones.\n </Flex>\n <Button\n variant=\"secondary\"\n sx={{ width: '100%', fontSize: '14px', height: '30px', fontWeight: 600 }}\n onClick={() => window.open('https://ape.bond/true-yield', '_blank')}\n >\n Upgrade Your Tier\n </Button>\n </Flex>\n </Flex>\n )}\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: 'white3',\n borderRadius: '10px 10px 0px 0px',\n }}\n >\n <Flex sx={{ alignItems: 'center', gap: '5px' }}>\n <Flex sx={{ opacity: 0.6 }}>Vesting Progress</Flex>\n <TooltipBubble\n className=\"tooltip-bubble\"\n body={<Flex>{UserBillTooltipText.FullyVested}</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\" />\n </Flex>\n </TooltipBubble>\n </Flex>\n <Flex sx={{ alignItems: 'center' }}>\n {isPendingCliff ? (\n <>\n Claiming starts in{' '}\n {`${cliffCountdown.days !== 0 ? `${cliffCountdown.days} days` : cliffCountdown.hours !== 0 ? `${cliffCountdown.hours} hours` : `${cliffCountdown.minutes} mins`}`}\n </>\n ) : (\n <ProgressBarWrapper\n title={''}\n value={<ProgressBar value={getPercentageVested(userBill)} />}\n style={{\n width: '100px',\n flexDirection: 'column',\n alignItems: 'center',\n }}\n showTooltip={true}\n toolTip={\n getTimeLeftForFullyVested(userBill) > 0\n ? `Fully vested in ${getPendingVestingString(userBill)}.`\n : `Fully Vested.`\n }\n />\n )}\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 }}\n >\n <Flex sx={{ alignItems: 'center', gap: '5px' }}>\n <Flex sx={{ opacity: 0.6 }}>Pending</Flex>\n <TooltipBubble\n className=\"tooltip-bubble\"\n body={<Flex>{UserBillTooltipText.Pending}</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\" />\n </Flex>\n </TooltipBubble>\n </Flex>\n <Flex sx={{ alignItems: 'center' }}>\n <TokenImage symbol={payoutTokenSymbol} size={18} />\n <Text sx={{ fontSize: '12px', fontWeight: 700, ml: '10px' }}>\n {formatNumberSI(pending(userBill), 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(pendingUSD(userBill))})\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: 'white3',\n height: '26px',\n }}\n >\n <Flex sx={{ alignItems: 'center', gap: '5px' }}>\n <Flex sx={{ opacity: 0.6 }}>Claimable</Flex>\n <TooltipBubble\n className=\"tooltip-bubble\"\n body={<Flex>{UserBillTooltipText.Claimable}</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\" />\n </Flex>\n </TooltipBubble>\n </Flex>\n <Flex sx={{ alignItems: 'center' }}>\n <TokenImage symbol={payoutTokenSymbol} size={18} />\n <Text sx={{ fontSize: '12px', fontWeight: 700, ml: '10px' }}>\n {formatNumberSI(claimable(userBill), 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(claimableUSD(userBill))})\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\" />\n </Flex>\n </TooltipBubble>\n </Flex>\n <Flex sx={{ alignItems: 'center' }}>\n <TokenImage symbol={payoutTokenSymbol} size={18} />\n <Text sx={{ fontSize: '12px', fontWeight: 700, ml: '10px' }}>\n {formatNumberSI(claimed(userBill), 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(userBill))})\n </Text>\n </Flex>\n </Flex>\n </Flex>\n {userBill?.bond?.warningCard && (\n <Flex\n sx={{\n width: '100%',\n background: '#DE62F366',\n justifyContent: 'center',\n borderRadius: 'normal',\n }}\n >\n <Text sx={{ fontSize: '12px', fontWeight: 400, p: '4px 10px', lineHeight: '16px' }}>\n <SafeHTMLComponent html={userBill?.bond?.warningCard} />\n </Text>\n </Flex>\n )}\n <Flex\n sx={{\n width: '100%',\n justifyContent: 'space-between',\n gap: ['10px', '10px', '10px', '15px'],\n height: '40px',\n }}\n >\n {userBill?.bond?.chainId === ChainId.SOL ? (\n <ActionsSolana userBill={userBill} />\n ) : (\n <Actions userBill={userBill} />\n )}\n </Flex>\n {!lostProfit && <Recommendations billAddress={userBill?.address} />}\n </Flex>\n </Flex>\n )}\n </Flex>\n </Modal>\n )\n}\n\nexport default YourBondsModal\n"],"names":["_jsx","_jsxs","NFTImage","_Fragment"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"YourBondsModal.js","sources":["../../../src/views/YourBondsModal/YourBondsModal.tsx"],"sourcesContent":["import React, { useState } from 'react'\nimport { UserBill } from '../../types/yourbonds'\nimport TokenImage from '../../components/uikit-sdk/TokenImage'\nimport { formatNumberSI } from '../../utils/formatNumber'\nimport { UserBillTooltipText } from '../../config/constants/tooltips'\nimport Recommendations from './components/Recommendations/Recommendations'\nimport {\n claimable,\n claimableUSD,\n claimed,\n claimedUSD,\n getPendingVestingString,\n getPercentageVested,\n getTimeLeftForFullyVested,\n pending,\n pendingUSD,\n} from '../../utils/displayHelpers'\nimport { getTimePeriods } from '../../utils/getTimePeriods'\nimport SafeHTMLComponent from '../../components/SafeHTMLComponent'\nimport ProgressBar from '../../components/ProgressBar/ProgressBar'\nimport ProgressBarWrapper from '../../components/ProgressBar/ProgressBarWrapper'\nimport NFTImage from './components/NFTImage/NFTImage'\nimport YourBondModalHeader from './components/YourBondModalHeader/YourBondModalHeader'\nimport Actions from './components/Actions/Actions'\nimport { ChainId } from '@ape.swap/apeswap-lists'\nimport ActionsSolana from './components/Actions/ActionsSolana'\nimport ActionsAptos from './components/Actions/ActionsAptos'\nimport ActionsSui from './components/Actions/ActionsSui'\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'\n\nconst YourBondsModal = ({\n userBill,\n lostProfit,\n onDismiss,\n}: {\n userBill?: UserBill\n lostProfit?: string\n onDismiss?: () => void\n}) => {\n // State\n const [showNFTImg, setShowNFTImg] = useState(false)\n\n // Static Data\n const depositUSD = userBill?.nftData?.data?.dollarValue\n const payout = userBill?.nftData?.data?.payout\n const payoutTokenPrice = parseFloat(userBill?.bond?.payoutTokenPrice ?? '0')\n const payoutUSD = payout && payoutTokenPrice ? payout * payoutTokenPrice : 0\n const payoutSymbol = userBill?.bond?.showcaseTokenName ?? userBill?.bond?.earnToken.symbol\n const payoutTokenSymbol = payoutSymbol === 'AIX' && userBill?.bond?.chainId === ChainId.SOL ? 'SOLAIX' : payoutSymbol\n\n // Cliff display info:\n const vestingCliff = userBill?.bond?.vestingCliff\n const currentTime = Math.round(new Date().getTime() / 1000)\n const vestingStartTimestamp = parseInt(userBill?.vestingStartTimestamp ?? '0')\n const isPendingCliff = vestingCliff ? currentTime - vestingStartTimestamp < vestingCliff : false\n const cliffCountdown = getTimePeriods(vestingStartTimestamp + (vestingCliff ?? 0) - currentTime, true)\n\n return (\n <Modal\n sx={{\n width: '480px',\n overflowY: 'unset !important',\n background: showNFTImg ? 'transparent !important' : 'white2',\n p: '0px',\n top: '56%',\n }}\n >\n <Flex\n sx={{\n flexDirection: 'column',\n borderRadius: 'normal',\n position: 'relative',\n background: showNFTImg ? 'transparent !important' : 'white2',\n p: '20px',\n }}\n >\n <NFTImage userBill={userBill} showNFTImg={showNFTImg} setShowNFTImg={setShowNFTImg} />\n\n {/* Modal Content */}\n\n {!showNFTImg && (\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: '50%',\n alignItems: 'center',\n fontSize: '14px',\n }}\n >\n <Flex>Deposit</Flex>\n <Flex>${formatNumberSI(depositUSD)}</Flex>\n </Flex>\n <Flex\n sx={{ position: 'absolute', top: '50%', left: '50%', 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: '50%',\n alignItems: 'center',\n fontSize: '14px',\n }}\n >\n <Flex>Bond Value</Flex>\n <Flex sx={{ alignItems: 'center', gap: '5px' }}>\n <TokenImage symbol={payoutTokenSymbol} size={22} />\n <Flex sx={{ flexDirection: 'column', fontSize: '14px', lineHeight: '16px' }}>\n <Flex sx={{ justifyContent: 'center' }}>{formatNumberSI(payout ?? '0')}</Flex>\n <Flex sx={{ fontSize: '10px', fontWeight: 400, opacity: 0.6, justifyContent: 'center' }}>\n (${formatNumberSI(payoutUSD)})\n </Flex>\n </Flex>\n </Flex>\n </Flex>\n </Flex>\n {lostProfit && (\n <Flex\n sx={{\n background: 'white3',\n borderRadius: 'normal',\n width: '100%',\n p: '10px',\n justifyContent: 'space-between',\n }}\n >\n <Flex sx={{ width: '20%' }}>\n <img\n src={`https://ape.bond/images/launch/mythical.png`}\n alt=\"mythical\"\n style={{ width: '90px', height: '90px' }}\n />\n </Flex>\n <Flex sx={{ width: '75%', flexDirection: 'column', gap: '3px' }}>\n <Flex>\n You missed a <Flex sx={{ color: 'success', px: '3px' }}>${lostProfit}</Flex> bonus\n </Flex>\n <Flex sx={{ fontSize: '12px', lineHeight: '16px', fontWeight: 400 }}>\n Holding an Ape Tier would’ve gotten you an extra 5% bonus on this purchase and all future ones.\n </Flex>\n <Button\n variant=\"secondary\"\n sx={{ width: '100%', fontSize: '14px', height: '30px', fontWeight: 600 }}\n onClick={() => window.open('https://ape.bond/true-yield', '_blank')}\n >\n Upgrade Your Tier\n </Button>\n </Flex>\n </Flex>\n )}\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: 'white3',\n borderRadius: '10px 10px 0px 0px',\n }}\n >\n <Flex sx={{ alignItems: 'center', gap: '5px' }}>\n <Flex sx={{ opacity: 0.6 }}>Vesting Progress</Flex>\n <TooltipBubble\n className=\"tooltip-bubble\"\n body={<Flex>{UserBillTooltipText.FullyVested}</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\" />\n </Flex>\n </TooltipBubble>\n </Flex>\n <Flex sx={{ alignItems: 'center' }}>\n {isPendingCliff ? (\n <>\n Claiming starts in{' '}\n {`${cliffCountdown.days !== 0 ? `${cliffCountdown.days} days` : cliffCountdown.hours !== 0 ? `${cliffCountdown.hours} hours` : `${cliffCountdown.minutes} mins`}`}\n </>\n ) : (\n <ProgressBarWrapper\n title={''}\n value={<ProgressBar value={getPercentageVested(userBill)} />}\n style={{\n width: '100px',\n flexDirection: 'column',\n alignItems: 'center',\n }}\n showTooltip={true}\n toolTip={\n getTimeLeftForFullyVested(userBill) > 0\n ? `Fully vested in ${getPendingVestingString(userBill)}.`\n : `Fully Vested.`\n }\n />\n )}\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 }}\n >\n <Flex sx={{ alignItems: 'center', gap: '5px' }}>\n <Flex sx={{ opacity: 0.6 }}>Pending</Flex>\n <TooltipBubble\n className=\"tooltip-bubble\"\n body={<Flex>{UserBillTooltipText.Pending}</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\" />\n </Flex>\n </TooltipBubble>\n </Flex>\n <Flex sx={{ alignItems: 'center' }}>\n <TokenImage symbol={payoutTokenSymbol} size={18} />\n <Text sx={{ fontSize: '12px', fontWeight: 700, ml: '10px' }}>\n {formatNumberSI(pending(userBill), 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(pendingUSD(userBill))})\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: 'white3',\n height: '26px',\n }}\n >\n <Flex sx={{ alignItems: 'center', gap: '5px' }}>\n <Flex sx={{ opacity: 0.6 }}>Claimable</Flex>\n <TooltipBubble\n className=\"tooltip-bubble\"\n body={<Flex>{UserBillTooltipText.Claimable}</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\" />\n </Flex>\n </TooltipBubble>\n </Flex>\n <Flex sx={{ alignItems: 'center' }}>\n <TokenImage symbol={payoutTokenSymbol} size={18} />\n <Text sx={{ fontSize: '12px', fontWeight: 700, ml: '10px' }}>\n {formatNumberSI(claimable(userBill), 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(claimableUSD(userBill))})\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\" />\n </Flex>\n </TooltipBubble>\n </Flex>\n <Flex sx={{ alignItems: 'center' }}>\n <TokenImage symbol={payoutTokenSymbol} size={18} />\n <Text sx={{ fontSize: '12px', fontWeight: 700, ml: '10px' }}>\n {formatNumberSI(claimed(userBill), 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(userBill))})\n </Text>\n </Flex>\n </Flex>\n </Flex>\n {userBill?.bond?.warningCard && (\n <Flex\n sx={{\n width: '100%',\n background: '#DE62F366',\n justifyContent: 'center',\n borderRadius: 'normal',\n }}\n >\n <Text sx={{ fontSize: '12px', fontWeight: 400, p: '4px 10px', lineHeight: '16px' }}>\n <SafeHTMLComponent html={userBill?.bond?.warningCard} />\n </Text>\n </Flex>\n )}\n <Flex\n sx={{\n width: '100%',\n justifyContent: 'space-between',\n gap: ['10px', '10px', '10px', '15px'],\n height: '40px',\n }}\n >\n {userBill?.bond?.chainId === ChainId.SOL ? (\n <ActionsSolana userBill={userBill} />\n ) : userBill?.bond?.chainId === ChainId.APTOS_MAINNET ? (\n <ActionsAptos userBill={userBill} />\n ) : userBill?.bond?.chainId === ChainId.SUI_MAINNET ? (\n <ActionsSui userBill={userBill} />\n ) : (\n <Actions userBill={userBill} />\n )}\n </Flex>\n {!lostProfit && <Recommendations billAddress={userBill?.address} />}\n </Flex>\n </Flex>\n )}\n </Flex>\n </Modal>\n )\n}\n\nexport default YourBondsModal\n"],"names":["_jsx","_jsxs","NFTImage","_Fragment"],"mappings":"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"}
|
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
import { jsxs, Fragment, jsx } from 'theme-ui/jsx-runtime';
|
|
2
|
+
import { useState } from 'react';
|
|
3
|
+
import { ChainId } from '@ape.swap/apeswap-lists';
|
|
4
|
+
import { claimable } from '../../../../utils/displayHelpers.js';
|
|
5
|
+
import { getTimePeriods } from '../../../../utils/getTimePeriods.js';
|
|
6
|
+
import useBondsData from '../../../../state/bonds/useBondsData.js';
|
|
7
|
+
import { usePopups } from '../../../../state/popups/usePopups.js';
|
|
8
|
+
import { useSDKConfig } from '../../../../state/useSDKConfig.js';
|
|
9
|
+
import { reportError } from '../../../../utils/reportError.js';
|
|
10
|
+
import Button from '../../../../components/uikit-sdk/Button/Button.js';
|
|
11
|
+
import { useQueryClient } from '@tanstack/react-query';
|
|
12
|
+
import useAPTAccount from '../../../../hooks/accounts/useAPTAccount.js';
|
|
13
|
+
import { APTOS_CLAIM_FUNCTION } from '../../../../constants/aptosConstants.js';
|
|
14
|
+
import { getAptosClient } from '../../../../utils/aptosHelpers.js';
|
|
15
|
+
import { QUERY_KEYS } from '../../../../config/constants/queryKeys.js';
|
|
16
|
+
|
|
17
|
+
// YourBondsModal action buttons for Aptos bonds. Mirrors the shape of
|
|
18
|
+
// `ActionsSolana`: one Claim button (simulation-aware) and one "Buy again"
|
|
19
|
+
// button that jumps to an active bond of the same showcase token.
|
|
20
|
+
const ActionsAptos = ({ userBill }) => {
|
|
21
|
+
// Hooks
|
|
22
|
+
const SDKConfig = useSDKConfig();
|
|
23
|
+
const queryClient = useQueryClient();
|
|
24
|
+
const { address: aptosAccount, signAndSubmitTransaction } = useAPTAccount();
|
|
25
|
+
const { addToastError, addToastSuccess } = usePopups();
|
|
26
|
+
const { data: liveBonds } = useBondsData();
|
|
27
|
+
// State
|
|
28
|
+
const [loadingTx, setLoadingTx] = useState(false);
|
|
29
|
+
// Static Data
|
|
30
|
+
const similarLiveBond = liveBonds?.find((bond) => !bond?.soldOut &&
|
|
31
|
+
!bond?.hide &&
|
|
32
|
+
bond?.earnToken?.symbol?.toLowerCase() === userBill?.bond?.earnToken?.symbol?.toLowerCase());
|
|
33
|
+
const canPurchaseAgain = !!similarLiveBond;
|
|
34
|
+
const vestingCliff = userBill?.bond?.vestingCliff;
|
|
35
|
+
const currentTime = Math.round(new Date().getTime() / 1000);
|
|
36
|
+
const purchaseTimestamp = parseInt(userBill?.vestingStartTimestamp ?? '0');
|
|
37
|
+
const isPendingCliff = vestingCliff ? currentTime - purchaseTimestamp < vestingCliff : false;
|
|
38
|
+
const cliffCountdown = getTimePeriods(purchaseTimestamp + (vestingCliff ?? 0) - currentTime, true);
|
|
39
|
+
const handleClaim = async () => {
|
|
40
|
+
if (loadingTx || !aptosAccount || !userBill)
|
|
41
|
+
return;
|
|
42
|
+
try {
|
|
43
|
+
setLoadingTx(true);
|
|
44
|
+
const market = userBill?.bond?.contractAddress?.[userBill?.bond?.chainId ?? 0];
|
|
45
|
+
if (!market)
|
|
46
|
+
throw new Error('Missing bond market address');
|
|
47
|
+
if (!userBill.id)
|
|
48
|
+
throw new Error('Missing bill ID');
|
|
49
|
+
// `apebond::bond::claim(market, bill_id: u64)` — the contract takes
|
|
50
|
+
// the scalar bill_id, NOT the object address.
|
|
51
|
+
const response = await signAndSubmitTransaction?.({
|
|
52
|
+
data: {
|
|
53
|
+
function: APTOS_CLAIM_FUNCTION,
|
|
54
|
+
typeArguments: [],
|
|
55
|
+
functionArguments: [market, userBill.id],
|
|
56
|
+
},
|
|
57
|
+
});
|
|
58
|
+
if (!response?.hash)
|
|
59
|
+
throw new Error('No tx hash returned by wallet');
|
|
60
|
+
const aptos = getAptosClient();
|
|
61
|
+
await aptos.waitForTransaction({ transactionHash: response.hash });
|
|
62
|
+
await queryClient.invalidateQueries({ queryKey: [QUERY_KEYS.USER_BONDS] });
|
|
63
|
+
addToastSuccess(response.hash, ChainId.APTOS_MAINNET);
|
|
64
|
+
}
|
|
65
|
+
catch (error) {
|
|
66
|
+
console.error('Aptos claim failed:', error);
|
|
67
|
+
addToastError(error?.message ?? 'Unknown error');
|
|
68
|
+
reportError({
|
|
69
|
+
apiUrl: SDKConfig?.urls?.apiV2,
|
|
70
|
+
error,
|
|
71
|
+
account: aptosAccount ?? '',
|
|
72
|
+
chainId: ChainId.APTOS_MAINNET,
|
|
73
|
+
extraInfo: { type: 'aptosClaim', userBill, error },
|
|
74
|
+
});
|
|
75
|
+
}
|
|
76
|
+
finally {
|
|
77
|
+
setLoadingTx(false);
|
|
78
|
+
}
|
|
79
|
+
};
|
|
80
|
+
return (jsxs(Fragment, { children: [jsx(Button, { variant: "secondary", disabled: claimable(userBill) === 0 || loadingTx || !userBill || isPendingCliff, load: loadingTx, onClick: (event) => {
|
|
81
|
+
event.stopPropagation();
|
|
82
|
+
if (!loadingTx)
|
|
83
|
+
handleClaim();
|
|
84
|
+
}, sx: { fontSize: '14px', width: '100%' }, children: isPendingCliff
|
|
85
|
+
? `Claimable in ${cliffCountdown.days !== 0 ? `${cliffCountdown.days} days` : cliffCountdown.hours !== 0 ? `${cliffCountdown.hours} hours` : `${cliffCountdown.minutes} mins`}`
|
|
86
|
+
: 'Claim' }), jsx(Button, { sx: { fontSize: '14px', width: '100%' }, onClick: () => {
|
|
87
|
+
if (!canPurchaseAgain)
|
|
88
|
+
return;
|
|
89
|
+
const baseUrl = process.env.NODE_ENV === 'production' ? 'https://ape.bond/bonds' : window.location.origin;
|
|
90
|
+
const params = `bondAddress=${similarLiveBond.contractAddress[similarLiveBond.chainId]}&bondChain=${similarLiveBond.chainId}`;
|
|
91
|
+
window.location.href = `${baseUrl}?${params}`;
|
|
92
|
+
}, disabled: !canPurchaseAgain, children: canPurchaseAgain ? 'Buy again' : 'sold out' })] }));
|
|
93
|
+
};
|
|
94
|
+
|
|
95
|
+
export { ActionsAptos as default };
|
|
96
|
+
//# sourceMappingURL=ActionsAptos.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ActionsAptos.js","sources":["../../../../../src/views/YourBondsModal/components/Actions/ActionsAptos.tsx"],"sourcesContent":["import React, { useState } from 'react'\nimport { ChainId } from '@ape.swap/apeswap-lists'\n\nimport { claimable } from '../../../../utils/displayHelpers'\nimport { UserBill } from '../../../../types/yourbonds'\nimport { getTimePeriods } from '../../../../utils/getTimePeriods'\nimport useBondsData from '../../../../state/bonds/useBondsData'\nimport { usePopups } from '../../../../state/popups/usePopups'\nimport { useSDKConfig } from '../../../../state/useSDKConfig'\nimport { reportError } from '../../../../utils/reportError'\nimport Button from '../../../../components/uikit-sdk/Button/Button'\n\nimport { useQueryClient } from '@tanstack/react-query'\nimport useAPTAccount from '../../../../hooks/accounts/useAPTAccount'\nimport { APTOS_CLAIM_FUNCTION } from '../../../../constants/aptosConstants'\nimport { getAptosClient } from '../../../../utils/aptosHelpers'\nimport { QUERY_KEYS } from '../../../../config/constants/queryKeys'\n\n// YourBondsModal action buttons for Aptos bonds. Mirrors the shape of\n// `ActionsSolana`: one Claim button (simulation-aware) and one \"Buy again\"\n// button that jumps to an active bond of the same showcase token.\nconst ActionsAptos = ({ userBill }: { userBill?: UserBill }) => {\n // Hooks\n const SDKConfig = useSDKConfig()\n const queryClient = useQueryClient()\n const { address: aptosAccount, signAndSubmitTransaction } = useAPTAccount()\n const { addToastError, addToastSuccess } = usePopups()\n const { data: liveBonds } = useBondsData()\n\n // State\n const [loadingTx, setLoadingTx] = useState(false)\n\n // Static Data\n const similarLiveBond = liveBonds?.find(\n (bond) =>\n !bond?.soldOut &&\n !bond?.hide &&\n bond?.earnToken?.symbol?.toLowerCase() === userBill?.bond?.earnToken?.symbol?.toLowerCase(),\n )\n const canPurchaseAgain = !!similarLiveBond\n const vestingCliff = userBill?.bond?.vestingCliff\n const currentTime = Math.round(new Date().getTime() / 1000)\n const purchaseTimestamp = parseInt(userBill?.vestingStartTimestamp ?? '0')\n const isPendingCliff = vestingCliff ? currentTime - purchaseTimestamp < vestingCliff : false\n const cliffCountdown = getTimePeriods(purchaseTimestamp + (vestingCliff ?? 0) - currentTime, true)\n\n const handleClaim = async () => {\n if (loadingTx || !aptosAccount || !userBill) return\n\n try {\n setLoadingTx(true)\n\n const market = userBill?.bond?.contractAddress?.[userBill?.bond?.chainId ?? 0]\n if (!market) throw new Error('Missing bond market address')\n if (!userBill.id) throw new Error('Missing bill ID')\n\n // `apebond::bond::claim(market, bill_id: u64)` — the contract takes\n // the scalar bill_id, NOT the object address.\n const response = await signAndSubmitTransaction?.({\n data: {\n function: APTOS_CLAIM_FUNCTION,\n typeArguments: [],\n functionArguments: [market, userBill.id],\n },\n })\n if (!response?.hash) throw new Error('No tx hash returned by wallet')\n\n const aptos = getAptosClient()\n await aptos.waitForTransaction({ transactionHash: response.hash })\n\n await queryClient.invalidateQueries({ queryKey: [QUERY_KEYS.USER_BONDS] })\n addToastSuccess(response.hash, ChainId.APTOS_MAINNET)\n } catch (error: any) {\n console.error('Aptos claim failed:', error)\n addToastError(error?.message ?? 'Unknown error')\n reportError({\n apiUrl: SDKConfig?.urls?.apiV2,\n error,\n account: aptosAccount ?? '',\n chainId: ChainId.APTOS_MAINNET,\n extraInfo: { type: 'aptosClaim', userBill, error },\n })\n } finally {\n setLoadingTx(false)\n }\n }\n\n return (\n <>\n <Button\n variant=\"secondary\"\n disabled={claimable(userBill) === 0 || loadingTx || !userBill || isPendingCliff}\n load={loadingTx}\n onClick={(event) => {\n event.stopPropagation()\n if (!loadingTx) handleClaim()\n }}\n sx={{ fontSize: '14px', width: '100%' }}\n >\n {isPendingCliff\n ? `Claimable in ${cliffCountdown.days !== 0 ? `${cliffCountdown.days} days` : cliffCountdown.hours !== 0 ? `${cliffCountdown.hours} hours` : `${cliffCountdown.minutes} mins`}`\n : 'Claim'}\n </Button>\n <Button\n sx={{ fontSize: '14px', width: '100%' }}\n onClick={() => {\n if (!canPurchaseAgain) return\n const baseUrl = process.env.NODE_ENV === 'production' ? 'https://ape.bond/bonds' : window.location.origin\n const params = `bondAddress=${similarLiveBond.contractAddress[similarLiveBond.chainId]}&bondChain=${similarLiveBond.chainId}`\n window.location.href = `${baseUrl}?${params}`\n }}\n disabled={!canPurchaseAgain}\n >\n {canPurchaseAgain ? 'Buy again' : 'sold out'}\n </Button>\n </>\n )\n}\n\nexport default ActionsAptos\n"],"names":["_jsxs","_Fragment","_jsx"],"mappings":"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"}
|
|
@@ -0,0 +1,115 @@
|
|
|
1
|
+
import { jsxs, Fragment, jsx } from 'theme-ui/jsx-runtime';
|
|
2
|
+
import { useState } from 'react';
|
|
3
|
+
import { ChainId } from '@ape.swap/apeswap-lists';
|
|
4
|
+
import { Transaction } from '@mysten/sui/transactions';
|
|
5
|
+
import { claimable } from '../../../../utils/displayHelpers.js';
|
|
6
|
+
import { getTimePeriods } from '../../../../utils/getTimePeriods.js';
|
|
7
|
+
import useBondsData from '../../../../state/bonds/useBondsData.js';
|
|
8
|
+
import { usePopups } from '../../../../state/popups/usePopups.js';
|
|
9
|
+
import { useSDKConfig } from '../../../../state/useSDKConfig.js';
|
|
10
|
+
import { reportError } from '../../../../utils/reportError.js';
|
|
11
|
+
import Button from '../../../../components/uikit-sdk/Button/Button.js';
|
|
12
|
+
import { useQueryClient } from '@tanstack/react-query';
|
|
13
|
+
import useSUIAccount from '../../../../hooks/accounts/useSUIAccount.js';
|
|
14
|
+
import { SUI_BOND_MARKET, SUI_CLAIM_FUNCTION } from '../../../../constants/suiConstants.js';
|
|
15
|
+
import { getSuiClient, verifySuiTxSuccess } from '../../../../utils/suiHelpers.js';
|
|
16
|
+
import { QUERY_KEYS } from '../../../../config/constants/queryKeys.js';
|
|
17
|
+
|
|
18
|
+
// YourBondsModal action buttons for Sui bonds. Mirrors the shape of
|
|
19
|
+
// `ActionsAptos`: one Claim button and one "Buy again" button that
|
|
20
|
+
// jumps to an active bond of the same showcase token.
|
|
21
|
+
const ActionsSui = ({ userBill }) => {
|
|
22
|
+
// Hooks
|
|
23
|
+
const SDKConfig = useSDKConfig();
|
|
24
|
+
const queryClient = useQueryClient();
|
|
25
|
+
const { address: suiAccount, signAndExecuteTransaction } = useSUIAccount();
|
|
26
|
+
const { addToastError, addToastSuccess } = usePopups();
|
|
27
|
+
const { data: liveBonds } = useBondsData();
|
|
28
|
+
// State
|
|
29
|
+
const [loadingTx, setLoadingTx] = useState(false);
|
|
30
|
+
// Static Data
|
|
31
|
+
const similarLiveBond = liveBonds?.find((bond) => !bond?.soldOut &&
|
|
32
|
+
!bond?.hide &&
|
|
33
|
+
bond?.earnToken?.symbol?.toLowerCase() === userBill?.bond?.earnToken?.symbol?.toLowerCase());
|
|
34
|
+
const canPurchaseAgain = !!similarLiveBond;
|
|
35
|
+
const vestingCliff = userBill?.bond?.vestingCliff;
|
|
36
|
+
const currentTime = Math.round(new Date().getTime() / 1000);
|
|
37
|
+
const purchaseTimestamp = parseInt(userBill?.vestingStartTimestamp ?? '0');
|
|
38
|
+
const isPendingCliff = vestingCliff ? currentTime - purchaseTimestamp < vestingCliff : false;
|
|
39
|
+
const cliffCountdown = getTimePeriods(purchaseTimestamp + (vestingCliff ?? 0) - currentTime, true);
|
|
40
|
+
const handleClaim = async () => {
|
|
41
|
+
if (loadingTx || !suiAccount || !userBill || !signAndExecuteTransaction)
|
|
42
|
+
return;
|
|
43
|
+
try {
|
|
44
|
+
setLoadingTx(true);
|
|
45
|
+
const market = userBill?.bond?.contractAddress?.[userBill?.bond?.chainId ?? 0] ?? SUI_BOND_MARKET;
|
|
46
|
+
if (!market)
|
|
47
|
+
throw new Error('Missing bond market address');
|
|
48
|
+
// The user's BondNFT object ID is stored in `bill.address`
|
|
49
|
+
const nftObjectId = userBill?.address;
|
|
50
|
+
if (!nftObjectId)
|
|
51
|
+
throw new Error('Missing bond NFT object ID');
|
|
52
|
+
const payoutCoinType = userBill?.bond?.earnToken?.address?.[userBill?.bond?.chainId ?? 0];
|
|
53
|
+
const principalCoinType = userBill?.bond?.lpToken?.address?.[userBill?.bond?.chainId ?? 0];
|
|
54
|
+
if (!payoutCoinType || !principalCoinType)
|
|
55
|
+
throw new Error('Missing token type info');
|
|
56
|
+
const tx = new Transaction();
|
|
57
|
+
const [claimedCoin] = tx.moveCall({
|
|
58
|
+
target: SUI_CLAIM_FUNCTION,
|
|
59
|
+
typeArguments: [payoutCoinType, principalCoinType],
|
|
60
|
+
arguments: [
|
|
61
|
+
tx.object(market),
|
|
62
|
+
tx.object(nftObjectId),
|
|
63
|
+
tx.object('0x6'), // clock
|
|
64
|
+
],
|
|
65
|
+
});
|
|
66
|
+
tx.transferObjects([claimedCoin], tx.pure.address(suiAccount));
|
|
67
|
+
// Pre-build so the wallet receives fully-resolved bytes
|
|
68
|
+
tx.setSender(suiAccount);
|
|
69
|
+
tx.setGasBudget(50000000);
|
|
70
|
+
const suiClient = getSuiClient();
|
|
71
|
+
const builtBytes = await tx.build({ client: suiClient });
|
|
72
|
+
const prebuiltTx = Transaction.from(builtBytes);
|
|
73
|
+
const response = await signAndExecuteTransaction({
|
|
74
|
+
transaction: prebuiltTx,
|
|
75
|
+
});
|
|
76
|
+
const digest = response?.digest;
|
|
77
|
+
if (!digest)
|
|
78
|
+
throw new Error('No tx digest returned by wallet');
|
|
79
|
+
await suiClient.waitForTransaction({ digest });
|
|
80
|
+
await verifySuiTxSuccess(digest);
|
|
81
|
+
await queryClient.invalidateQueries({ queryKey: [QUERY_KEYS.USER_BONDS] });
|
|
82
|
+
addToastSuccess(digest, ChainId.SUI_MAINNET);
|
|
83
|
+
}
|
|
84
|
+
catch (error) {
|
|
85
|
+
console.error('Sui claim failed:', error);
|
|
86
|
+
addToastError(error?.message ?? 'Unknown error');
|
|
87
|
+
reportError({
|
|
88
|
+
apiUrl: SDKConfig?.urls?.apiV2,
|
|
89
|
+
error,
|
|
90
|
+
account: suiAccount ?? '',
|
|
91
|
+
chainId: ChainId.SUI_MAINNET,
|
|
92
|
+
extraInfo: { type: 'suiClaim', userBill, error },
|
|
93
|
+
});
|
|
94
|
+
}
|
|
95
|
+
finally {
|
|
96
|
+
setLoadingTx(false);
|
|
97
|
+
}
|
|
98
|
+
};
|
|
99
|
+
return (jsxs(Fragment, { children: [jsx(Button, { variant: "secondary", disabled: claimable(userBill) === 0 || loadingTx || !userBill || isPendingCliff, load: loadingTx, onClick: (event) => {
|
|
100
|
+
event.stopPropagation();
|
|
101
|
+
if (!loadingTx)
|
|
102
|
+
handleClaim();
|
|
103
|
+
}, sx: { fontSize: '14px', width: '100%' }, children: isPendingCliff
|
|
104
|
+
? `Claimable in ${cliffCountdown.days !== 0 ? `${cliffCountdown.days} days` : cliffCountdown.hours !== 0 ? `${cliffCountdown.hours} hours` : `${cliffCountdown.minutes} mins`}`
|
|
105
|
+
: 'Claim' }), jsx(Button, { sx: { fontSize: '14px', width: '100%' }, onClick: () => {
|
|
106
|
+
if (!canPurchaseAgain)
|
|
107
|
+
return;
|
|
108
|
+
const baseUrl = process.env.NODE_ENV === 'production' ? 'https://ape.bond/bonds' : window.location.origin;
|
|
109
|
+
const params = `bondAddress=${similarLiveBond.contractAddress[similarLiveBond.chainId]}&bondChain=${similarLiveBond.chainId}`;
|
|
110
|
+
window.location.href = `${baseUrl}?${params}`;
|
|
111
|
+
}, disabled: !canPurchaseAgain, children: canPurchaseAgain ? 'Buy again' : 'sold out' })] }));
|
|
112
|
+
};
|
|
113
|
+
|
|
114
|
+
export { ActionsSui as default };
|
|
115
|
+
//# sourceMappingURL=ActionsSui.js.map
|