@ape.swap/bonds-sdk 6.2.7 → 6.2.9
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/components/CustomClaimModals/PostClaimModal.d.ts +8 -0
- package/dist/components/CustomClaimModals/PostClaimModal.js +15 -0
- package/dist/components/CustomClaimModals/PostClaimModal.js.map +1 -0
- package/dist/state/zap/useSoulZapBondQuote.js +2 -8
- package/dist/state/zap/useSoulZapBondQuote.js.map +1 -1
- package/dist/views/ProjectView/components/BondStats/LineChart.d.ts +10 -0
- package/dist/views/ProjectView/components/BondStats/LineChart.js +150 -0
- package/dist/views/ProjectView/components/BondStats/LineChart.js.map +1 -0
- package/dist/views/ProjectView/components/BondStats/index.js +17 -44
- package/dist/views/ProjectView/components/BondStats/index.js.map +1 -1
- package/dist/views/ProjectView/components/BondStats/types.d.ts +2 -37
- package/dist/views/ProjectView/components/BondStats/types.js +1 -28
- package/dist/views/ProjectView/components/BondStats/types.js.map +1 -1
- package/dist/views/YourBonds/components/UserBondRow/UserBondRow.js +5 -0
- package/dist/views/YourBonds/components/UserBondRow/UserBondRow.js.map +1 -1
- package/dist/views/YourBondsModal/components/Actions/Actions.js +5 -0
- package/dist/views/YourBondsModal/components/Actions/Actions.js.map +1 -1
- package/package.json +2 -4
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { jsx, jsxs } from 'theme-ui/jsx-runtime';
|
|
2
|
+
import { Image } from 'theme-ui';
|
|
3
|
+
import Modal from '../uikit-sdk/Modal/index.js';
|
|
4
|
+
import Flex from '../uikit-sdk/Flex/index.js';
|
|
5
|
+
import Button from '../uikit-sdk/Button/Button.js';
|
|
6
|
+
|
|
7
|
+
const PostClaimModal = ({ tokenSymbol, text, imgUrl, ctaUrl, }) => {
|
|
8
|
+
const handleClick = () => {
|
|
9
|
+
window.open(ctaUrl, '_blank');
|
|
10
|
+
};
|
|
11
|
+
return (jsx(Modal, { title: `You've Claimed ${tokenSymbol}!`, children: jsxs(Flex, { sx: { flexDirection: 'column' }, children: [jsx(Flex, { sx: { fontSize: '12px', lineHeight: '20px', color: 'primaryButton', mt: '10px' }, children: "Did You Know?" }), jsxs(Flex, { sx: { flexDirection: 'column', gap: '10px' }, children: [jsx(Flex, { children: text }), jsx(Image, { src: imgUrl, onClick: handleClick, sx: { cursor: 'pointer' } }), jsx(Button, { sx: { width: '100%', mt: '10px' }, onClick: handleClick, children: "Claim now" })] })] }) }));
|
|
12
|
+
};
|
|
13
|
+
|
|
14
|
+
export { PostClaimModal as default };
|
|
15
|
+
//# sourceMappingURL=PostClaimModal.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"PostClaimModal.js","sources":["../../../src/components/CustomClaimModals/PostClaimModal.tsx"],"sourcesContent":["import React from 'react'\nimport { Image } from 'theme-ui'\nimport Modal from '../uikit-sdk/Modal'\nimport Flex from '../uikit-sdk/Flex'\nimport Button from '../uikit-sdk/Button/Button'\n\nconst PostClaimModal = ({\n tokenSymbol,\n text,\n imgUrl,\n ctaUrl,\n}: {\n tokenSymbol: string\n text: string\n imgUrl: string\n ctaUrl: string\n}) => {\n const handleClick = () => {\n window.open(ctaUrl, '_blank')\n }\n\n return (\n <Modal title={`You've Claimed ${tokenSymbol}!`}>\n <Flex sx={{ flexDirection: 'column' }}>\n <Flex sx={{ fontSize: '12px', lineHeight: '20px', color: 'primaryButton', mt: '10px' }}>Did You Know?</Flex>\n <Flex sx={{ flexDirection: 'column', gap: '10px' }}>\n <Flex>{text}</Flex>\n <Image src={imgUrl} onClick={handleClick} sx={{ cursor: 'pointer' }} />\n <Button sx={{ width: '100%', mt: '10px' }} onClick={handleClick}>\n Claim now\n </Button>\n </Flex>\n </Flex>\n </Modal>\n )\n}\n\nexport default PostClaimModal\n"],"names":["_jsx","_jsxs"],"mappings":";;;;;;AAMA,MAAM,cAAc,GAAG,CAAC,EACtB,WAAW,EACX,IAAI,EACJ,MAAM,EACN,MAAM,GAMP,KAAI;IACH,MAAM,WAAW,GAAG,MAAK;AACvB,QAAA,MAAM,CAAC,IAAI,CAAC,MAAM,EAAE,QAAQ,CAAC;AAC/B,IAAA,CAAC;IAED,QACEA,GAAA,CAAC,KAAK,EAAA,EAAC,KAAK,EAAE,CAAA,eAAA,EAAkB,WAAW,CAAA,CAAA,CAAG,EAAA,QAAA,EAC5CC,IAAA,CAAC,IAAI,IAAC,EAAE,EAAE,EAAE,aAAa,EAAE,QAAQ,EAAE,EAAA,QAAA,EAAA,CACnCD,GAAA,CAAC,IAAI,EAAA,EAAC,EAAE,EAAE,EAAE,QAAQ,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,KAAK,EAAE,eAAe,EAAE,EAAE,EAAE,MAAM,EAAE,EAAA,QAAA,EAAA,eAAA,EAAA,CAAsB,EAC5GC,IAAA,CAAC,IAAI,IAAC,EAAE,EAAE,EAAE,aAAa,EAAE,QAAQ,EAAE,GAAG,EAAE,MAAM,EAAE,EAAA,QAAA,EAAA,CAChDD,GAAA,CAAC,IAAI,EAAA,EAAA,QAAA,EAAE,IAAI,EAAA,CAAQ,EACnBA,GAAA,CAAC,KAAK,IAAC,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE,WAAW,EAAE,EAAE,EAAE,EAAE,MAAM,EAAE,SAAS,EAAE,EAAA,CAAI,EACvEA,GAAA,CAAC,MAAM,EAAA,EAAC,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,OAAO,EAAE,WAAW,EAAA,QAAA,EAAA,WAAA,EAAA,CAEtD,CAAA,EAAA,CACJ,CAAA,EAAA,CACF,EAAA,CACD;AAEZ;;;;"}
|
|
@@ -28,7 +28,6 @@ const useSoulZapBondQuote = (typedValue, inputCurrency, bond, account, tierProof
|
|
|
28
28
|
const liquidityDex = principalToken?.liquiditySource?.[chainId] ?? principalToken?.liquidityDex?.[chainId];
|
|
29
29
|
const protocol = dexFactories[chainId]?.[liquidityDex]?.protocol;
|
|
30
30
|
const lpType = isReserveBond ? 'single' : getLpType(protocol);
|
|
31
|
-
const ichiUnderlyingDex = principalToken?.ichiUnderlyingDex;
|
|
32
31
|
const vault = principalToken?.address?.[chainId];
|
|
33
32
|
const router = dexFactories[chainId]?.[liquidityDex]?.router;
|
|
34
33
|
const bigishInputAmount = parseUnits(debouncedInput ?? '0', inputCurrencyDecimals ?? 18).toString();
|
|
@@ -99,10 +98,8 @@ const useSoulZapBondQuote = (typedValue, inputCurrency, bond, account, tierProof
|
|
|
99
98
|
: lpType,
|
|
100
99
|
fromToken: inputCurrencyString,
|
|
101
100
|
fromAmount: bigishInputAmount,
|
|
102
|
-
underlyingDex: ichiUnderlyingDex,
|
|
103
|
-
vault: isReserveBond ? undefined : vault,
|
|
104
101
|
slippage: slippage,
|
|
105
|
-
lpAddress:
|
|
102
|
+
lpAddress: isReserveBond ? undefined : vault,
|
|
106
103
|
router: lpType === 'solidly' || lpType === 'univ2' ? router : undefined,
|
|
107
104
|
toToken: isReserveBond ? vault : undefined,
|
|
108
105
|
},
|
|
@@ -125,7 +122,6 @@ const useSoulZapBondQuote = (typedValue, inputCurrency, bond, account, tierProof
|
|
|
125
122
|
principalContractAddress,
|
|
126
123
|
chainName,
|
|
127
124
|
account,
|
|
128
|
-
ichiUnderlyingDex,
|
|
129
125
|
vault,
|
|
130
126
|
lpType,
|
|
131
127
|
router,
|
|
@@ -141,8 +137,6 @@ const useSoulZapBondQuote = (typedValue, inputCurrency, bond, account, tierProof
|
|
|
141
137
|
zapInputData.lpData.lpType,
|
|
142
138
|
zapInputData.lpData.fromToken,
|
|
143
139
|
zapInputData.lpData.fromAmount,
|
|
144
|
-
zapInputData.lpData.underlyingDex ?? '',
|
|
145
|
-
zapInputData.lpData.vault,
|
|
146
140
|
zapInputData.lpData.slippage,
|
|
147
141
|
zapInputData.lpData.lpAddress,
|
|
148
142
|
zapInputData.lpData.router ?? '',
|
|
@@ -150,7 +144,7 @@ const useSoulZapBondQuote = (typedValue, inputCurrency, bond, account, tierProof
|
|
|
150
144
|
}, [zapInputData]);
|
|
151
145
|
const fetchZapDetails = async () => {
|
|
152
146
|
const response = await axios.post(SOUL_ZAP_API, zapInputData);
|
|
153
|
-
return response.data?.result?.data;
|
|
147
|
+
return response.data?.result?.data ?? response.data;
|
|
154
148
|
};
|
|
155
149
|
const { data: response, isLoading, isFetching, error, } = useQuery({
|
|
156
150
|
queryKey: [QUERY_KEYS.ZAP_TOKEN_QUOTE, queryKey],
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useSoulZapBondQuote.js","sources":["../../../src/state/zap/useSoulZapBondQuote.ts"],"sourcesContent":["import { useMemo } from 'react'\nimport { BillVersion, ChainId, dexFactories, LiquidityDex, Token, Wrappers } from '@ape.swap/apeswap-lists'\nimport { getChainParam, getLpType } from './getChainParam'\nimport axios from 'axios'\nimport { useQuery } from '@tanstack/react-query'\nimport { QUERY_KEYS } from '../../config/constants/queryKeys'\nimport useCurrencyPrice from '../../state/price/useCurrencyPrice'\nimport { BondsData } from '../../types/bonds'\nimport { useSlippage } from '../slippage/useSlippage'\nimport useDebounce from '../../hooks/useDebounce'\nimport { WNATIVE, zapInputTokens } from '@ape.swap/apeswap-lists'\nimport { SOUL_ZAP_API, zapSupported, ZapSupportedChainId } from '../../config/constants/variables'\nimport { useSDKConfig } from '../useSDKConfig'\nimport { formatUnits, parseUnits } from '../../utils/fixedPoint'\n\nconst useSoulZapBondQuote = (\n typedValue: string,\n inputCurrency: 'NATIVE' | Token | undefined,\n bond: BondsData | undefined,\n account?: string,\n tierProofSig?: string,\n): [loading: boolean, response: any, depositAmount: string, error: boolean, trueBondPrice: string | undefined] => {\n const isZapSupported = zapSupported.includes(bond?.chainId as ZapSupportedChainId)\n const debouncedInput = useDebounce(typedValue, 500)\n const isDebouncing = typedValue !== debouncedInput\n const { evmSlippage: slippage } = useSlippage()\n const SDKConfig = useSDKConfig()\n\n const principalToken = bond?.lpToken as Token\n const bondContractAddress = bond?.contractAddress[bond?.chainId as ChainId]\n const chainId = bond?.chainId as ChainId\n const inputCurrencyString =\n inputCurrency === 'NATIVE' ? '0x0000000000000000000000000000000000000000' : inputCurrency?.address[chainId]\n const inputCurrencyDecimals = inputCurrency === 'NATIVE' ? 18 : inputCurrency?.decimals![chainId]\n const principalContractAddress = principalToken?.address[chainId]\n const chainName = getChainParam(chainId)\n\n const isReserveBond = bond?.billType === 'reserve' || bond?.billType === 'staking'\n const liquidityDex: LiquidityDex | undefined =\n principalToken?.liquiditySource?.[chainId] ?? principalToken?.liquidityDex?.[chainId]\n const protocol = dexFactories[chainId]?.[liquidityDex!]?.protocol\n const lpType = isReserveBond ? 'single' : getLpType(protocol)\n const ichiUnderlyingDex = principalToken?.ichiUnderlyingDex\n const vault = principalToken?.address?.[chainId]\n const router = dexFactories[chainId]?.[liquidityDex!]?.router\n\n const bigishInputAmount = parseUnits(debouncedInput ?? '0', inputCurrencyDecimals ?? 18).toString()\n\n const zapInputData = useMemo(() => {\n if (\n inputCurrencyString &&\n inputCurrencyDecimals &&\n bigishInputAmount !== 'NaN' &&\n bigishInputAmount !== '0' &&\n principalContractAddress &&\n chainName &&\n bondContractAddress &&\n isZapSupported\n ) {\n if (principalToken.liquidityWrapper && principalToken.liquidityWrapper === Wrappers.Steer) {\n return {\n chain: chainName,\n recipient: account ?? '0x0000000000000000000000000000000000000000',\n user: account ?? '0x0000000000000000000000000000000000000000',\n integrator: 'apebond',\n lpData: {\n lpType: 'steer',\n fromToken: inputCurrencyString,\n fromAmount: bigishInputAmount,\n lpAddress: vault,\n periphery: '0xCEBF1A54A9Ce703FC80967760b5A6cbDb4111099',\n slippage,\n },\n protocolData: {\n protocol: 'ApeBond',\n bond: bondContractAddress,\n depositer: account ?? '0x0000000000000000000000000000000000000000',\n tierProofSignature: bond.billVersion === BillVersion.V4 && tierProofSig ? tierProofSig : undefined,\n enableTierOptimizer: SDKConfig.useTiers,\n tierBoostRate: bond.tierBoostRate,\n },\n }\n }\n // a.k.a if it is principal token\n if (inputCurrency !== 'NATIVE' && inputCurrency?.address[chainId] === principalToken.address[chainId]) {\n return {\n chain: chainName,\n recipient: account ?? '0x0000000000000000000000000000000000000000',\n user: account ?? '0x0000000000000000000000000000000000000000',\n integrator: 'apebond',\n lpData: {\n lpType: 'none',\n fromToken: inputCurrencyString,\n fromAmount: bigishInputAmount,\n },\n protocolData: {\n protocol: 'ApeBond',\n bond: bondContractAddress,\n depositer: account ?? '0x0000000000000000000000000000000000000000',\n tierProofSignature: bond.billVersion === BillVersion.V4 && tierProofSig ? tierProofSig : undefined,\n enableTierOptimizer: SDKConfig.useTiers,\n tierBoostRate: bond.tierBoostRate,\n },\n }\n } else\n return {\n chain: chainName,\n recipient: account ?? '0x0000000000000000000000000000000000000000',\n user: account ?? '0x0000000000000000000000000000000000000000',\n integrator: 'apebond',\n lpData: {\n lpType:\n inputCurrency !== 'NATIVE' && inputCurrency?.address[chainId] === principalToken.address[chainId]\n ? 'none'\n : lpType,\n fromToken: inputCurrencyString,\n fromAmount: bigishInputAmount,\n underlyingDex: ichiUnderlyingDex,\n vault: isReserveBond ? undefined : vault,\n slippage: slippage,\n lpAddress: lpType === 'solidly' || lpType === 'univ2' || lpType === 'curve' ? vault : undefined,\n router: lpType === 'solidly' || lpType === 'univ2' ? router : undefined,\n toToken: isReserveBond ? vault : undefined,\n },\n protocolData: {\n protocol: 'ApeBond',\n bond: bondContractAddress,\n depositer: account ?? '0x0000000000000000000000000000000000000000',\n tierProofSignature: bond.billVersion === BillVersion.V4 && tierProofSig ? tierProofSig : undefined,\n enableTierOptimizer: SDKConfig.useTiers,\n tierBoostRate: bond.tierBoostRate,\n },\n }\n } else {\n return null\n }\n /* eslint-disable react-hooks/exhaustive-deps */\n }, [\n bigishInputAmount,\n principalContractAddress,\n chainName,\n account,\n ichiUnderlyingDex,\n vault,\n lpType,\n router,\n slippage,\n ])\n\n const queryKey = useMemo(() => {\n if (!zapInputData) return null\n return [\n 'zapBondDetails',\n zapInputData.chain,\n zapInputData.user,\n zapInputData.lpData.lpType,\n zapInputData.lpData.fromToken,\n zapInputData.lpData.fromAmount,\n zapInputData.lpData.underlyingDex ?? '',\n zapInputData.lpData.vault,\n zapInputData.lpData.slippage,\n zapInputData.lpData.lpAddress,\n zapInputData.lpData.router ?? '',\n ]\n }, [zapInputData])\n\n const fetchZapDetails = async () => {\n const response = await axios.post(SOUL_ZAP_API, zapInputData)\n return response.data?.result?.data\n }\n\n const {\n data: response,\n isLoading,\n isFetching,\n error,\n } = useQuery({\n queryKey: [QUERY_KEYS.ZAP_TOKEN_QUOTE, queryKey],\n queryFn: fetchZapDetails,\n refetchInterval: 60000, // i.e. 60 sec\n staleTime: 60000,\n enabled: !!queryKey,\n retry: 1,\n })\n const zapError = !!error\n\n const tokenList = zapInputTokens[chainId] ? zapInputTokens[chainId] : []\n\n // toToken0 data\n const toToken0Estimate: string | undefined = response?.lpQuote?.token0?.fromAmountEstimate\n const toToken0 = [...tokenList, principalToken]?.find(\n (token) => token?.address?.[chainId]?.toLowerCase() === response?.lpQuote?.token0?.address?.toLowerCase(),\n )\n const toToken0Price = useCurrencyPrice(toToken0 ?? null, chainId)\n\n // toToken1 data\n const toToken1Estimate: string | undefined = response?.lpQuote?.token1?.fromAmountEstimate\n const toToken1 = zapInputTokens[chainId]?.find(\n (token) => token.address[chainId]?.toLowerCase() === response?.lpQuote?.token1?.address?.toLowerCase(),\n )\n const toToken1Price = useCurrencyPrice(toToken1 ?? null, chainId)\n\n let toToken0USD =\n Number(formatUnits(toToken0Estimate ?? '0', toToken0?.decimals![chainId] ?? 18)) * (toToken0Price?.price ?? 0) // this is amount of swap output, converted to usd price\n\n if (response?.lpQuote?.token0?.fromAmountUSD) {\n toToken0USD = Number(response?.lpQuote?.token0?.fromAmountUSD)\n }\n\n let toToken1USD =\n Number(formatUnits(toToken1Estimate ?? '0', toToken1?.decimals![chainId] ?? 18)) * (toToken1Price?.price ?? 0) // this is amount of swap output, converted to usd price\n\n if (response?.lpQuote?.token1?.fromAmountUSD) {\n toToken1USD = Number(response?.lpQuote?.token1?.fromAmountUSD)\n }\n\n const youSpendUSD = toToken0USD + toToken1USD // youSpendUSD\n const estimatedDepositAmount = youSpendUSD / Number(bond?.principalTokenPrice ?? '0')\n\n const isWrap =\n inputCurrency === 'NATIVE' &&\n bond?.lpToken?.address?.[chainId]?.toLowerCase() === WNATIVE[chainId]?.address?.[chainId]?.toLowerCase()\n\n const isPrincipalToken =\n inputCurrency !== 'NATIVE' && inputCurrency?.address[chainId] === principalToken.address[chainId]\n\n const estimatedDepositAmountToReturn =\n isWrap || isPrincipalToken\n ? (Number(typedValue || '0') * ((100 - bond?.tierBoostRate!) / 100)).toString()\n : estimatedDepositAmount.toString()\n\n const trueBondPrice: string | undefined = response?.protocolQuote?.trueBondPrice\n\n // DEBUG: log tierOptimization when present\n if (response?.protocolQuote?.tierOptimization) {\n const tier = response.protocolQuote.tierOptimization\n const decimals = principalToken?.decimals?.[chainId] ?? 18\n const cost = Number(formatUnits(tier.tierCost, decimals))\n const input = Number(formatUnits(tier.bondInput, decimals))\n const profit = Number(formatUnits(tier.profit, decimals))\n console.log('[ZAP] tierOptimization:', {\n tier: `${tier.previousTier} → ${tier.newTier}`,\n cost: cost.toFixed(6),\n bondInput: input.toFixed(6),\n profit: profit.toFixed(6),\n })\n }\n\n const zapLoading = isDebouncing || isLoading || isFetching\n if (zapLoading) return [true, undefined, '', false, undefined]\n\n return [zapLoading, response, estimatedDepositAmountToReturn, zapError, trueBondPrice]\n}\n\nexport default useSoulZapBondQuote\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"useSoulZapBondQuote.js","sources":["../../../src/state/zap/useSoulZapBondQuote.ts"],"sourcesContent":["import { useMemo } from 'react'\nimport { BillVersion, ChainId, dexFactories, LiquidityDex, Token, Wrappers } from '@ape.swap/apeswap-lists'\nimport { getChainParam, getLpType } from './getChainParam'\nimport axios from 'axios'\nimport { useQuery } from '@tanstack/react-query'\nimport { QUERY_KEYS } from '../../config/constants/queryKeys'\nimport useCurrencyPrice from '../../state/price/useCurrencyPrice'\nimport { BondsData } from '../../types/bonds'\nimport { useSlippage } from '../slippage/useSlippage'\nimport useDebounce from '../../hooks/useDebounce'\nimport { WNATIVE, zapInputTokens } from '@ape.swap/apeswap-lists'\nimport { SOUL_ZAP_API, zapSupported, ZapSupportedChainId } from '../../config/constants/variables'\nimport { useSDKConfig } from '../useSDKConfig'\nimport { formatUnits, parseUnits } from '../../utils/fixedPoint'\n\nconst useSoulZapBondQuote = (\n typedValue: string,\n inputCurrency: 'NATIVE' | Token | undefined,\n bond: BondsData | undefined,\n account?: string,\n tierProofSig?: string,\n): [loading: boolean, response: any, depositAmount: string, error: boolean, trueBondPrice: string | undefined] => {\n const isZapSupported = zapSupported.includes(bond?.chainId as ZapSupportedChainId)\n const debouncedInput = useDebounce(typedValue, 500)\n const isDebouncing = typedValue !== debouncedInput\n const { evmSlippage: slippage } = useSlippage()\n const SDKConfig = useSDKConfig()\n\n const principalToken = bond?.lpToken as Token\n const bondContractAddress = bond?.contractAddress[bond?.chainId as ChainId]\n const chainId = bond?.chainId as ChainId\n const inputCurrencyString =\n inputCurrency === 'NATIVE' ? '0x0000000000000000000000000000000000000000' : inputCurrency?.address[chainId]\n const inputCurrencyDecimals = inputCurrency === 'NATIVE' ? 18 : inputCurrency?.decimals![chainId]\n const principalContractAddress = principalToken?.address[chainId]\n const chainName = getChainParam(chainId)\n\n const isReserveBond = bond?.billType === 'reserve' || bond?.billType === 'staking'\n const liquidityDex: LiquidityDex | undefined =\n principalToken?.liquiditySource?.[chainId] ?? principalToken?.liquidityDex?.[chainId]\n const protocol = dexFactories[chainId]?.[liquidityDex!]?.protocol\n const lpType = isReserveBond ? 'single' : getLpType(protocol)\n const vault = principalToken?.address?.[chainId]\n const router = dexFactories[chainId]?.[liquidityDex!]?.router\n\n const bigishInputAmount = parseUnits(debouncedInput ?? '0', inputCurrencyDecimals ?? 18).toString()\n\n const zapInputData = useMemo(() => {\n if (\n inputCurrencyString &&\n inputCurrencyDecimals &&\n bigishInputAmount !== 'NaN' &&\n bigishInputAmount !== '0' &&\n principalContractAddress &&\n chainName &&\n bondContractAddress &&\n isZapSupported\n ) {\n if (principalToken.liquidityWrapper && principalToken.liquidityWrapper === Wrappers.Steer) {\n return {\n chain: chainName,\n recipient: account ?? '0x0000000000000000000000000000000000000000',\n user: account ?? '0x0000000000000000000000000000000000000000',\n integrator: 'apebond',\n lpData: {\n lpType: 'steer',\n fromToken: inputCurrencyString,\n fromAmount: bigishInputAmount,\n lpAddress: vault,\n periphery: '0xCEBF1A54A9Ce703FC80967760b5A6cbDb4111099',\n slippage,\n },\n protocolData: {\n protocol: 'ApeBond',\n bond: bondContractAddress,\n depositer: account ?? '0x0000000000000000000000000000000000000000',\n tierProofSignature: bond.billVersion === BillVersion.V4 && tierProofSig ? tierProofSig : undefined,\n enableTierOptimizer: SDKConfig.useTiers,\n tierBoostRate: bond.tierBoostRate,\n },\n }\n }\n // a.k.a if it is principal token\n if (inputCurrency !== 'NATIVE' && inputCurrency?.address[chainId] === principalToken.address[chainId]) {\n return {\n chain: chainName,\n recipient: account ?? '0x0000000000000000000000000000000000000000',\n user: account ?? '0x0000000000000000000000000000000000000000',\n integrator: 'apebond',\n lpData: {\n lpType: 'none',\n fromToken: inputCurrencyString,\n fromAmount: bigishInputAmount,\n },\n protocolData: {\n protocol: 'ApeBond',\n bond: bondContractAddress,\n depositer: account ?? '0x0000000000000000000000000000000000000000',\n tierProofSignature: bond.billVersion === BillVersion.V4 && tierProofSig ? tierProofSig : undefined,\n enableTierOptimizer: SDKConfig.useTiers,\n tierBoostRate: bond.tierBoostRate,\n },\n }\n } else\n return {\n chain: chainName,\n recipient: account ?? '0x0000000000000000000000000000000000000000',\n user: account ?? '0x0000000000000000000000000000000000000000',\n integrator: 'apebond',\n lpData: {\n lpType:\n inputCurrency !== 'NATIVE' && inputCurrency?.address[chainId] === principalToken.address[chainId]\n ? 'none'\n : lpType,\n fromToken: inputCurrencyString,\n fromAmount: bigishInputAmount,\n slippage: slippage,\n lpAddress: isReserveBond ? undefined : vault,\n router: lpType === 'solidly' || lpType === 'univ2' ? router : undefined,\n toToken: isReserveBond ? vault : undefined,\n },\n protocolData: {\n protocol: 'ApeBond',\n bond: bondContractAddress,\n depositer: account ?? '0x0000000000000000000000000000000000000000',\n tierProofSignature: bond.billVersion === BillVersion.V4 && tierProofSig ? tierProofSig : undefined,\n enableTierOptimizer: SDKConfig.useTiers,\n tierBoostRate: bond.tierBoostRate,\n },\n }\n } else {\n return null\n }\n /* eslint-disable react-hooks/exhaustive-deps */\n }, [\n bigishInputAmount,\n principalContractAddress,\n chainName,\n account,\n vault,\n lpType,\n router,\n slippage,\n ])\n\n const queryKey = useMemo(() => {\n if (!zapInputData) return null\n return [\n 'zapBondDetails',\n zapInputData.chain,\n zapInputData.user,\n zapInputData.lpData.lpType,\n zapInputData.lpData.fromToken,\n zapInputData.lpData.fromAmount,\n zapInputData.lpData.slippage,\n zapInputData.lpData.lpAddress,\n zapInputData.lpData.router ?? '',\n ]\n }, [zapInputData])\n\n const fetchZapDetails = async () => {\n const response = await axios.post(SOUL_ZAP_API, zapInputData)\n return response.data?.result?.data ?? response.data\n }\n\n const {\n data: response,\n isLoading,\n isFetching,\n error,\n } = useQuery({\n queryKey: [QUERY_KEYS.ZAP_TOKEN_QUOTE, queryKey],\n queryFn: fetchZapDetails,\n refetchInterval: 60000, // i.e. 60 sec\n staleTime: 60000,\n enabled: !!queryKey,\n retry: 1,\n })\n const zapError = !!error\n\n const tokenList = zapInputTokens[chainId] ? zapInputTokens[chainId] : []\n\n // toToken0 data\n const toToken0Estimate: string | undefined = response?.lpQuote?.token0?.fromAmountEstimate\n const toToken0 = [...tokenList, principalToken]?.find(\n (token) => token?.address?.[chainId]?.toLowerCase() === response?.lpQuote?.token0?.address?.toLowerCase(),\n )\n const toToken0Price = useCurrencyPrice(toToken0 ?? null, chainId)\n\n // toToken1 data\n const toToken1Estimate: string | undefined = response?.lpQuote?.token1?.fromAmountEstimate\n const toToken1 = zapInputTokens[chainId]?.find(\n (token) => token.address[chainId]?.toLowerCase() === response?.lpQuote?.token1?.address?.toLowerCase(),\n )\n const toToken1Price = useCurrencyPrice(toToken1 ?? null, chainId)\n\n let toToken0USD =\n Number(formatUnits(toToken0Estimate ?? '0', toToken0?.decimals![chainId] ?? 18)) * (toToken0Price?.price ?? 0) // this is amount of swap output, converted to usd price\n\n if (response?.lpQuote?.token0?.fromAmountUSD) {\n toToken0USD = Number(response?.lpQuote?.token0?.fromAmountUSD)\n }\n\n let toToken1USD =\n Number(formatUnits(toToken1Estimate ?? '0', toToken1?.decimals![chainId] ?? 18)) * (toToken1Price?.price ?? 0) // this is amount of swap output, converted to usd price\n\n if (response?.lpQuote?.token1?.fromAmountUSD) {\n toToken1USD = Number(response?.lpQuote?.token1?.fromAmountUSD)\n }\n\n const youSpendUSD = toToken0USD + toToken1USD // youSpendUSD\n const estimatedDepositAmount = youSpendUSD / Number(bond?.principalTokenPrice ?? '0')\n\n const isWrap =\n inputCurrency === 'NATIVE' &&\n bond?.lpToken?.address?.[chainId]?.toLowerCase() === WNATIVE[chainId]?.address?.[chainId]?.toLowerCase()\n\n const isPrincipalToken =\n inputCurrency !== 'NATIVE' && inputCurrency?.address[chainId] === principalToken.address[chainId]\n\n const estimatedDepositAmountToReturn =\n isWrap || isPrincipalToken\n ? (Number(typedValue || '0') * ((100 - bond?.tierBoostRate!) / 100)).toString()\n : estimatedDepositAmount.toString()\n\n const trueBondPrice: string | undefined = response?.protocolQuote?.trueBondPrice\n\n // DEBUG: log tierOptimization when present\n if (response?.protocolQuote?.tierOptimization) {\n const tier = response.protocolQuote.tierOptimization\n const decimals = principalToken?.decimals?.[chainId] ?? 18\n const cost = Number(formatUnits(tier.tierCost, decimals))\n const input = Number(formatUnits(tier.bondInput, decimals))\n const profit = Number(formatUnits(tier.profit, decimals))\n console.log('[ZAP] tierOptimization:', {\n tier: `${tier.previousTier} → ${tier.newTier}`,\n cost: cost.toFixed(6),\n bondInput: input.toFixed(6),\n profit: profit.toFixed(6),\n })\n }\n\n const zapLoading = isDebouncing || isLoading || isFetching\n if (zapLoading) return [true, undefined, '', false, undefined]\n\n return [zapLoading, response, estimatedDepositAmountToReturn, zapError, trueBondPrice]\n}\n\nexport default useSoulZapBondQuote\n"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,150 @@
|
|
|
1
|
+
import { jsxs, jsx } from 'theme-ui/jsx-runtime';
|
|
2
|
+
import { useRef, useState, useMemo } from 'react';
|
|
3
|
+
import Flex from '../../../../components/uikit-sdk/Flex/index.js';
|
|
4
|
+
|
|
5
|
+
const VIEW_WIDTH = 1000;
|
|
6
|
+
const VIEW_HEIGHT = 400;
|
|
7
|
+
const PADDING_LEFT = 44;
|
|
8
|
+
const PADDING_RIGHT = 12;
|
|
9
|
+
const PADDING_TOP = 12;
|
|
10
|
+
const PADDING_BOTTOM = 56;
|
|
11
|
+
const TENSION = 0.4;
|
|
12
|
+
const DEFAULT_STROKE_WIDTH = 4;
|
|
13
|
+
function niceNumber(value, round) {
|
|
14
|
+
if (value === 0)
|
|
15
|
+
return 0;
|
|
16
|
+
const exponent = Math.floor(Math.log10(value));
|
|
17
|
+
const fraction = value / Math.pow(10, exponent);
|
|
18
|
+
let niceFraction;
|
|
19
|
+
if (round) {
|
|
20
|
+
if (fraction < 1.5)
|
|
21
|
+
niceFraction = 1;
|
|
22
|
+
else if (fraction < 3)
|
|
23
|
+
niceFraction = 2;
|
|
24
|
+
else if (fraction < 7)
|
|
25
|
+
niceFraction = 5;
|
|
26
|
+
else
|
|
27
|
+
niceFraction = 10;
|
|
28
|
+
}
|
|
29
|
+
else {
|
|
30
|
+
if (fraction <= 1)
|
|
31
|
+
niceFraction = 1;
|
|
32
|
+
else if (fraction <= 2)
|
|
33
|
+
niceFraction = 2;
|
|
34
|
+
else if (fraction <= 5)
|
|
35
|
+
niceFraction = 5;
|
|
36
|
+
else
|
|
37
|
+
niceFraction = 10;
|
|
38
|
+
}
|
|
39
|
+
return niceFraction * Math.pow(10, exponent);
|
|
40
|
+
}
|
|
41
|
+
function niceScale(max, maxTicks = 7) {
|
|
42
|
+
if (max <= 0)
|
|
43
|
+
return { max: 10, step: 2 };
|
|
44
|
+
const range = niceNumber(max, false);
|
|
45
|
+
const step = niceNumber(range / (maxTicks - 1), true);
|
|
46
|
+
const niceMax = Math.ceil(max / step) * step;
|
|
47
|
+
return { max: niceMax, step };
|
|
48
|
+
}
|
|
49
|
+
// Mirrors Chart.js's own `splineCurve` so the interpolated line matches the
|
|
50
|
+
// previous chart.js render pixel-for-pixel in shape.
|
|
51
|
+
function splineControlPoints(prev, cur, next, tension) {
|
|
52
|
+
const d01 = Math.hypot(cur.x - prev.x, cur.y - prev.y);
|
|
53
|
+
const d12 = Math.hypot(next.x - cur.x, next.y - cur.y);
|
|
54
|
+
let s01 = d01 / (d01 + d12);
|
|
55
|
+
let s12 = d12 / (d01 + d12);
|
|
56
|
+
s01 = isNaN(s01) ? 0 : s01;
|
|
57
|
+
s12 = isNaN(s12) ? 0 : s12;
|
|
58
|
+
const fa = tension * s01;
|
|
59
|
+
const fb = tension * s12;
|
|
60
|
+
return {
|
|
61
|
+
previous: { x: cur.x - fa * (next.x - prev.x), y: cur.y - fa * (next.y - prev.y) },
|
|
62
|
+
next: { x: cur.x + fb * (next.x - prev.x), y: cur.y + fb * (next.y - prev.y) },
|
|
63
|
+
};
|
|
64
|
+
}
|
|
65
|
+
// Catmull-Rom control points can overshoot past the points they're smoothing between
|
|
66
|
+
// (that's what gives the curve its roundness) - clamping keeps that overshoot from
|
|
67
|
+
// pushing the line past the axes (e.g. below the zero baseline) while keeping it
|
|
68
|
+
// visually continuous, instead of letting it run past the bounds and clipping it away.
|
|
69
|
+
function clampPoint(point, minY, maxY) {
|
|
70
|
+
return { x: point.x, y: Math.min(Math.max(point.y, minY), maxY) };
|
|
71
|
+
}
|
|
72
|
+
function buildSmoothPath(points, minY, maxY) {
|
|
73
|
+
if (points.length === 0)
|
|
74
|
+
return '';
|
|
75
|
+
if (points.length === 1)
|
|
76
|
+
return `M ${points[0].x} ${points[0].y}`;
|
|
77
|
+
const controls = points.map((point, i) => {
|
|
78
|
+
const prev = points[i - 1] ?? point;
|
|
79
|
+
const next = points[i + 1] ?? point;
|
|
80
|
+
return splineControlPoints(prev, point, next, TENSION);
|
|
81
|
+
});
|
|
82
|
+
let path = `M ${points[0].x} ${points[0].y}`;
|
|
83
|
+
for (let i = 1; i < points.length; i++) {
|
|
84
|
+
const cp1 = clampPoint(controls[i - 1].next, minY, maxY);
|
|
85
|
+
const cp2 = clampPoint(controls[i].previous, minY, maxY);
|
|
86
|
+
path += ` C ${cp1.x} ${cp1.y}, ${cp2.x} ${cp2.y}, ${points[i].x} ${points[i].y}`;
|
|
87
|
+
}
|
|
88
|
+
return path;
|
|
89
|
+
}
|
|
90
|
+
const LineChart = ({ labels, data, color = '#6560C5', valueLabel, strokeWidth = DEFAULT_STROKE_WIDTH, }) => {
|
|
91
|
+
const svgRef = useRef(null);
|
|
92
|
+
const [hoverIndex, setHoverIndex] = useState(null);
|
|
93
|
+
const { points, yTicks, plotWidth, plotHeight } = useMemo(() => {
|
|
94
|
+
const plotWidth = VIEW_WIDTH - PADDING_LEFT - PADDING_RIGHT;
|
|
95
|
+
const plotHeight = VIEW_HEIGHT - PADDING_TOP - PADDING_BOTTOM;
|
|
96
|
+
const maxValue = data.length ? Math.max(...data) : 0;
|
|
97
|
+
const { max, step } = niceScale(maxValue);
|
|
98
|
+
const yTicks = [];
|
|
99
|
+
for (let value = 0; value <= max; value += step) {
|
|
100
|
+
yTicks.push(value);
|
|
101
|
+
}
|
|
102
|
+
const points = data.map((value, i) => {
|
|
103
|
+
const x = PADDING_LEFT + (data.length > 1 ? (i / (data.length - 1)) * plotWidth : plotWidth / 2);
|
|
104
|
+
const y = PADDING_TOP + plotHeight - (max > 0 ? (value / max) * plotHeight : 0);
|
|
105
|
+
return { x, y };
|
|
106
|
+
});
|
|
107
|
+
return { points, yTicks, plotWidth, plotHeight };
|
|
108
|
+
}, [data]);
|
|
109
|
+
const linePath = useMemo(() => buildSmoothPath(points, PADDING_TOP, PADDING_TOP + plotHeight), [points, plotHeight]);
|
|
110
|
+
const handlePointerMove = (event) => {
|
|
111
|
+
if (!svgRef.current || points.length === 0)
|
|
112
|
+
return;
|
|
113
|
+
const rect = svgRef.current.getBoundingClientRect();
|
|
114
|
+
const relativeX = ((event.clientX - rect.left) / rect.width) * VIEW_WIDTH;
|
|
115
|
+
let nearestIndex = 0;
|
|
116
|
+
let nearestDistance = Infinity;
|
|
117
|
+
points.forEach((point, i) => {
|
|
118
|
+
const distance = Math.abs(point.x - relativeX);
|
|
119
|
+
if (distance < nearestDistance) {
|
|
120
|
+
nearestDistance = distance;
|
|
121
|
+
nearestIndex = i;
|
|
122
|
+
}
|
|
123
|
+
});
|
|
124
|
+
setHoverIndex(nearestIndex);
|
|
125
|
+
};
|
|
126
|
+
const hoverPoint = hoverIndex !== null ? points[hoverIndex] : null;
|
|
127
|
+
return (jsxs(Flex, { sx: { width: '100%', height: '100%', position: 'relative' }, children: [jsxs("svg", { ref: svgRef, viewBox: `0 0 ${VIEW_WIDTH} ${VIEW_HEIGHT}`, width: "100%", height: "100%", preserveAspectRatio: "none", onPointerMove: handlePointerMove, onPointerLeave: () => setHoverIndex(null), style: { overflow: 'visible' }, children: [yTicks.map((tick) => {
|
|
128
|
+
const y = PADDING_TOP +
|
|
129
|
+
plotHeight -
|
|
130
|
+
(yTicks[yTicks.length - 1] > 0 ? (tick / yTicks[yTicks.length - 1]) * plotHeight : 0);
|
|
131
|
+
return (jsxs("g", { children: [jsx("line", { x1: PADDING_LEFT, x2: PADDING_LEFT + plotWidth, y1: y, y2: y, stroke: "rgba(250, 250, 250, 0.1)", strokeWidth: 1 }), jsx("text", { x: PADDING_LEFT - 10, y: y, textAnchor: "end", dominantBaseline: "middle", fontSize: 13, fontWeight: 400, fill: "rgba(250, 250, 250, 0.5)", children: tick.toLocaleString() })] }, `y-${tick}`));
|
|
132
|
+
}), points.map((point, i) => (jsxs("g", { children: [jsx("line", { x1: point.x, x2: point.x, y1: PADDING_TOP, y2: PADDING_TOP + plotHeight, stroke: "rgba(250, 250, 250, 0.1)", strokeWidth: 1 }), jsx("text", { x: point.x, y: PADDING_TOP + plotHeight + 16, textAnchor: "end", fontSize: 13, fontWeight: 400, fill: "rgba(250, 250, 250, 0.5)", transform: `rotate(-40 ${point.x} ${PADDING_TOP + plotHeight + 16})`, children: labels[i] })] }, `x-${labels[i]}`))), jsx("path", { d: linePath, fill: "none", stroke: color, strokeWidth: strokeWidth, strokeLinecap: "round", strokeLinejoin: "round" }), hoverPoint && (jsxs("g", { children: [jsx("line", { x1: hoverPoint.x, x2: hoverPoint.x, y1: PADDING_TOP, y2: PADDING_TOP + plotHeight, stroke: "rgba(250, 250, 250, 0.35)", strokeWidth: 1 }), jsx("circle", { cx: hoverPoint.x, cy: hoverPoint.y, r: 5, fill: color, stroke: "#16161d", strokeWidth: 2 })] }))] }), hoverPoint && hoverIndex !== null && (jsxs(Flex, { sx: {
|
|
133
|
+
position: 'absolute',
|
|
134
|
+
top: `${(hoverPoint.y / VIEW_HEIGHT) * 100}%`,
|
|
135
|
+
left: `${(hoverPoint.x / VIEW_WIDTH) * 100}%`,
|
|
136
|
+
transform: hoverPoint.y < VIEW_HEIGHT / 3 ? 'translate(-50%, 12px)' : 'translate(-50%, calc(-100% - 12px))',
|
|
137
|
+
flexDirection: 'column',
|
|
138
|
+
background: '#0d0d13',
|
|
139
|
+
border: '1px solid rgba(250, 250, 250, 0.1)',
|
|
140
|
+
borderRadius: '6px',
|
|
141
|
+
p: '8px 10px',
|
|
142
|
+
pointerEvents: 'none',
|
|
143
|
+
whiteSpace: 'nowrap',
|
|
144
|
+
}, children: [jsx(Flex, { sx: { fontSize: '11px', color: 'rgba(250, 250, 250, 0.5)' }, children: labels[hoverIndex] }), jsxs(Flex, { sx: { fontSize: '13px', fontWeight: 600, color: '#f6f6f6', alignItems: 'center' }, children: [jsx(Flex, { as: "span", sx: { width: '8px', height: '2px', background: color, mr: '6px' } }), valueLabel.endsWith('$')
|
|
145
|
+
? `${valueLabel}${data[hoverIndex]?.toLocaleString()}`
|
|
146
|
+
: `${valueLabel}: ${data[hoverIndex]?.toLocaleString()}`] })] }))] }));
|
|
147
|
+
};
|
|
148
|
+
|
|
149
|
+
export { LineChart as default };
|
|
150
|
+
//# sourceMappingURL=LineChart.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"LineChart.js","sources":["../../../../../src/views/ProjectView/components/BondStats/LineChart.tsx"],"sourcesContent":["import React, { useMemo, useRef, useState } from 'react'\nimport Flex from '../../../../components/uikit-sdk/Flex'\n\ninterface Point {\n x: number\n y: number\n}\n\ninterface LineChartProps {\n labels: string[]\n data: number[]\n color?: string\n valueLabel: string\n strokeWidth?: number\n}\n\nconst VIEW_WIDTH = 1000\nconst VIEW_HEIGHT = 400\nconst PADDING_LEFT = 44\nconst PADDING_RIGHT = 12\nconst PADDING_TOP = 12\nconst PADDING_BOTTOM = 56\nconst TENSION = 0.4\nconst DEFAULT_STROKE_WIDTH = 4\n\nfunction niceNumber(value: number, round: boolean): number {\n if (value === 0) return 0\n const exponent = Math.floor(Math.log10(value))\n const fraction = value / Math.pow(10, exponent)\n let niceFraction: number\n\n if (round) {\n if (fraction < 1.5) niceFraction = 1\n else if (fraction < 3) niceFraction = 2\n else if (fraction < 7) niceFraction = 5\n else niceFraction = 10\n } else {\n if (fraction <= 1) niceFraction = 1\n else if (fraction <= 2) niceFraction = 2\n else if (fraction <= 5) niceFraction = 5\n else niceFraction = 10\n }\n\n return niceFraction * Math.pow(10, exponent)\n}\n\nfunction niceScale(max: number, maxTicks = 7) {\n if (max <= 0) return { max: 10, step: 2 }\n const range = niceNumber(max, false)\n const step = niceNumber(range / (maxTicks - 1), true)\n const niceMax = Math.ceil(max / step) * step\n return { max: niceMax, step }\n}\n\n// Mirrors Chart.js's own `splineCurve` so the interpolated line matches the\n// previous chart.js render pixel-for-pixel in shape.\nfunction splineControlPoints(prev: Point, cur: Point, next: Point, tension: number) {\n const d01 = Math.hypot(cur.x - prev.x, cur.y - prev.y)\n const d12 = Math.hypot(next.x - cur.x, next.y - cur.y)\n\n let s01 = d01 / (d01 + d12)\n let s12 = d12 / (d01 + d12)\n s01 = isNaN(s01) ? 0 : s01\n s12 = isNaN(s12) ? 0 : s12\n\n const fa = tension * s01\n const fb = tension * s12\n\n return {\n previous: { x: cur.x - fa * (next.x - prev.x), y: cur.y - fa * (next.y - prev.y) },\n next: { x: cur.x + fb * (next.x - prev.x), y: cur.y + fb * (next.y - prev.y) },\n }\n}\n\n// Catmull-Rom control points can overshoot past the points they're smoothing between\n// (that's what gives the curve its roundness) - clamping keeps that overshoot from\n// pushing the line past the axes (e.g. below the zero baseline) while keeping it\n// visually continuous, instead of letting it run past the bounds and clipping it away.\nfunction clampPoint(point: Point, minY: number, maxY: number): Point {\n return { x: point.x, y: Math.min(Math.max(point.y, minY), maxY) }\n}\n\nfunction buildSmoothPath(points: Point[], minY: number, maxY: number): string {\n if (points.length === 0) return ''\n if (points.length === 1) return `M ${points[0].x} ${points[0].y}`\n\n const controls = points.map((point, i) => {\n const prev = points[i - 1] ?? point\n const next = points[i + 1] ?? point\n return splineControlPoints(prev, point, next, TENSION)\n })\n\n let path = `M ${points[0].x} ${points[0].y}`\n for (let i = 1; i < points.length; i++) {\n const cp1 = clampPoint(controls[i - 1].next, minY, maxY)\n const cp2 = clampPoint(controls[i].previous, minY, maxY)\n path += ` C ${cp1.x} ${cp1.y}, ${cp2.x} ${cp2.y}, ${points[i].x} ${points[i].y}`\n }\n return path\n}\n\nconst LineChart: React.FC<LineChartProps> = ({\n labels,\n data,\n color = '#6560C5',\n valueLabel,\n strokeWidth = DEFAULT_STROKE_WIDTH,\n}) => {\n const svgRef = useRef<SVGSVGElement>(null)\n const [hoverIndex, setHoverIndex] = useState<number | null>(null)\n\n const { points, yTicks, plotWidth, plotHeight } = useMemo(() => {\n const plotWidth = VIEW_WIDTH - PADDING_LEFT - PADDING_RIGHT\n const plotHeight = VIEW_HEIGHT - PADDING_TOP - PADDING_BOTTOM\n const maxValue = data.length ? Math.max(...data) : 0\n const { max, step } = niceScale(maxValue)\n\n const yTicks: number[] = []\n for (let value = 0; value <= max; value += step) {\n yTicks.push(value)\n }\n\n const points: Point[] = data.map((value, i) => {\n const x = PADDING_LEFT + (data.length > 1 ? (i / (data.length - 1)) * plotWidth : plotWidth / 2)\n const y = PADDING_TOP + plotHeight - (max > 0 ? (value / max) * plotHeight : 0)\n return { x, y }\n })\n\n return { points, yTicks, plotWidth, plotHeight }\n }, [data])\n\n const linePath = useMemo(() => buildSmoothPath(points, PADDING_TOP, PADDING_TOP + plotHeight), [points, plotHeight])\n\n const handlePointerMove = (event: React.PointerEvent<SVGSVGElement>) => {\n if (!svgRef.current || points.length === 0) return\n const rect = svgRef.current.getBoundingClientRect()\n const relativeX = ((event.clientX - rect.left) / rect.width) * VIEW_WIDTH\n\n let nearestIndex = 0\n let nearestDistance = Infinity\n points.forEach((point, i) => {\n const distance = Math.abs(point.x - relativeX)\n if (distance < nearestDistance) {\n nearestDistance = distance\n nearestIndex = i\n }\n })\n setHoverIndex(nearestIndex)\n }\n\n const hoverPoint = hoverIndex !== null ? points[hoverIndex] : null\n\n return (\n <Flex sx={{ width: '100%', height: '100%', position: 'relative' }}>\n <svg\n ref={svgRef}\n viewBox={`0 0 ${VIEW_WIDTH} ${VIEW_HEIGHT}`}\n width=\"100%\"\n height=\"100%\"\n preserveAspectRatio=\"none\"\n onPointerMove={handlePointerMove}\n onPointerLeave={() => setHoverIndex(null)}\n style={{ overflow: 'visible' }}\n >\n {/* Horizontal grid + y-axis labels */}\n {yTicks.map((tick) => {\n const y =\n PADDING_TOP +\n plotHeight -\n (yTicks[yTicks.length - 1] > 0 ? (tick / yTicks[yTicks.length - 1]) * plotHeight : 0)\n return (\n <g key={`y-${tick}`}>\n <line\n x1={PADDING_LEFT}\n x2={PADDING_LEFT + plotWidth}\n y1={y}\n y2={y}\n stroke=\"rgba(250, 250, 250, 0.1)\"\n strokeWidth={1}\n />\n <text\n x={PADDING_LEFT - 10}\n y={y}\n textAnchor=\"end\"\n dominantBaseline=\"middle\"\n fontSize={13}\n fontWeight={400}\n fill=\"rgba(250, 250, 250, 0.5)\"\n >\n {tick.toLocaleString()}\n </text>\n </g>\n )\n })}\n\n {/* Vertical grid + x-axis labels */}\n {points.map((point, i) => (\n <g key={`x-${labels[i]}`}>\n <line\n x1={point.x}\n x2={point.x}\n y1={PADDING_TOP}\n y2={PADDING_TOP + plotHeight}\n stroke=\"rgba(250, 250, 250, 0.1)\"\n strokeWidth={1}\n />\n <text\n x={point.x}\n y={PADDING_TOP + plotHeight + 16}\n textAnchor=\"end\"\n fontSize={13}\n fontWeight={400}\n fill=\"rgba(250, 250, 250, 0.5)\"\n transform={`rotate(-40 ${point.x} ${PADDING_TOP + plotHeight + 16})`}\n >\n {labels[i]}\n </text>\n </g>\n ))}\n\n <path\n d={linePath}\n fill=\"none\"\n stroke={color}\n strokeWidth={strokeWidth}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n\n {hoverPoint && (\n <g>\n <line\n x1={hoverPoint.x}\n x2={hoverPoint.x}\n y1={PADDING_TOP}\n y2={PADDING_TOP + plotHeight}\n stroke=\"rgba(250, 250, 250, 0.35)\"\n strokeWidth={1}\n />\n <circle cx={hoverPoint.x} cy={hoverPoint.y} r={5} fill={color} stroke=\"#16161d\" strokeWidth={2} />\n </g>\n )}\n </svg>\n\n {hoverPoint && hoverIndex !== null && (\n <Flex\n sx={{\n position: 'absolute',\n top: `${(hoverPoint.y / VIEW_HEIGHT) * 100}%`,\n left: `${(hoverPoint.x / VIEW_WIDTH) * 100}%`,\n transform: hoverPoint.y < VIEW_HEIGHT / 3 ? 'translate(-50%, 12px)' : 'translate(-50%, calc(-100% - 12px))',\n flexDirection: 'column',\n background: '#0d0d13',\n border: '1px solid rgba(250, 250, 250, 0.1)',\n borderRadius: '6px',\n p: '8px 10px',\n pointerEvents: 'none',\n whiteSpace: 'nowrap',\n }}\n >\n <Flex sx={{ fontSize: '11px', color: 'rgba(250, 250, 250, 0.5)' }}>{labels[hoverIndex]}</Flex>\n <Flex sx={{ fontSize: '13px', fontWeight: 600, color: '#f6f6f6', alignItems: 'center' }}>\n <Flex as=\"span\" sx={{ width: '8px', height: '2px', background: color, mr: '6px' }} />\n {valueLabel.endsWith('$')\n ? `${valueLabel}${data[hoverIndex]?.toLocaleString()}`\n : `${valueLabel}: ${data[hoverIndex]?.toLocaleString()}`}\n </Flex>\n </Flex>\n )}\n </Flex>\n )\n}\n\nexport default LineChart\n"],"names":["_jsxs","_jsx"],"mappings":"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"}
|
|
@@ -1,10 +1,9 @@
|
|
|
1
1
|
import { jsxs, jsx } from 'theme-ui/jsx-runtime';
|
|
2
2
|
import { useState, useEffect } from 'react';
|
|
3
3
|
import { stripDate } from './utils.js';
|
|
4
|
-
import { chartOptions
|
|
4
|
+
import { chartOptions } from './types.js';
|
|
5
5
|
import CircularProgress from '../../../../components/CircularProgress/index.js';
|
|
6
|
-
import
|
|
7
|
-
import { Line } from 'react-chartjs-2';
|
|
6
|
+
import LineChart from './LineChart.js';
|
|
8
7
|
import { getBalanceNumber } from '../../../../utils/getBalanceNumber.js';
|
|
9
8
|
import { styles } from './styles.js';
|
|
10
9
|
import useGetBondApiStats from '../../../../state/bondApiStats/useGetBondApiStats.js';
|
|
@@ -12,35 +11,18 @@ import Flex from '../../../../components/uikit-sdk/Flex/index.js';
|
|
|
12
11
|
import { Link } from 'theme-ui';
|
|
13
12
|
import MenuSelect from '../../../../components/MenuSelect/MenuSelect.js';
|
|
14
13
|
|
|
15
|
-
Chart.register(CategoryScale, LinearScale, PointElement, LineElement, Title, Tooltip, Legend);
|
|
16
14
|
const BondStats = ({ selectedBond }) => {
|
|
17
15
|
const { data: bondStats } = useGetBondApiStats(selectedBond?.contractAddress?.[selectedBond?.chainId]);
|
|
18
16
|
const [chartOption, setChartOption] = useState(chartOptions[0].value);
|
|
19
17
|
const [salesCountChartData, setSalesCountChartData] = useState({
|
|
18
|
+
label: 'Sales Count',
|
|
20
19
|
labels: [],
|
|
21
|
-
|
|
22
|
-
{
|
|
23
|
-
label: 'Sales Count',
|
|
24
|
-
data: [],
|
|
25
|
-
fill: true,
|
|
26
|
-
borderColor: '#6560C5',
|
|
27
|
-
backgroundColor: 'rgba(101, 96, 197, 0.9)',
|
|
28
|
-
tension: 0.4,
|
|
29
|
-
},
|
|
30
|
-
],
|
|
20
|
+
data: [],
|
|
31
21
|
});
|
|
32
22
|
const [salesAmountChartData, setSalesAmountChartData] = useState({
|
|
23
|
+
label: 'Sales Amount $',
|
|
33
24
|
labels: [],
|
|
34
|
-
|
|
35
|
-
{
|
|
36
|
-
label: 'Sales Amount (USD)',
|
|
37
|
-
data: [],
|
|
38
|
-
fill: true,
|
|
39
|
-
borderColor: '#6560C5',
|
|
40
|
-
backgroundColor: 'rgba(101, 96, 197, 0.9)',
|
|
41
|
-
tension: 0.4,
|
|
42
|
-
},
|
|
43
|
-
],
|
|
25
|
+
data: [],
|
|
44
26
|
});
|
|
45
27
|
const maxTotalPayout = getBalanceNumber(selectedBond?.maxTotalPayout ?? '0', selectedBond.earnToken.decimals[selectedBond.chainId] ?? 18);
|
|
46
28
|
const tokensRemaining = parseFloat(selectedBond?.tokensRemaining ?? '0');
|
|
@@ -60,28 +42,19 @@ const BondStats = ({ selectedBond }) => {
|
|
|
60
42
|
}, {});
|
|
61
43
|
const salesByDate = Object.values(countsByDate);
|
|
62
44
|
const labels = Object.keys(countsByDate);
|
|
63
|
-
setSalesCountChartData({
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
labels: labels,
|
|
74
|
-
datasets: [
|
|
75
|
-
{
|
|
76
|
-
...salesAmountChartData.datasets[0],
|
|
77
|
-
data: salesByDate.map((sale) => sale?.salesAmount),
|
|
78
|
-
},
|
|
79
|
-
],
|
|
80
|
-
});
|
|
45
|
+
setSalesCountChartData((prev) => ({
|
|
46
|
+
...prev,
|
|
47
|
+
labels,
|
|
48
|
+
data: salesByDate.map((sale) => sale?.salesNum),
|
|
49
|
+
}));
|
|
50
|
+
setSalesAmountChartData((prev) => ({
|
|
51
|
+
...prev,
|
|
52
|
+
labels,
|
|
53
|
+
data: salesByDate.map((sale) => sale?.salesAmount),
|
|
54
|
+
}));
|
|
81
55
|
}
|
|
82
|
-
/* eslint-disable react-hooks/exhaustive-deps */
|
|
83
56
|
}, [bondStats]);
|
|
84
|
-
return (jsxs(Flex, { sx: styles.bondStatsContainer, children: [jsxs(Flex, { sx: styles.titleContainer, children: [jsx(Flex, { sx: { fontSize: '22px' }, children: "Bond Stats" }), jsxs(Link, { href: `https://dashboard.ape.bond/bond/${selectedBond?.contractAddress?.[selectedBond?.chainId]}`, sx: styles.link, target: "_blank", rel: "noopener noreferrer", children: ["View More ", '>'] })] }), jsxs(Flex, { sx: styles.chartsContainer, children: [jsxs(Flex, { sx: styles.salesChart, children: [jsx(Flex, { sx: { width: '155px' }, children: jsx(MenuSelect, { selectedOption: chartOption, setOption: setChartOption, options: chartOptions }) }), jsx(Flex, { sx: { width: '100%', height: '100%', minHeight: '225px' }, children: chartOption === 'amount' ? (jsx(
|
|
57
|
+
return (jsxs(Flex, { sx: styles.bondStatsContainer, children: [jsxs(Flex, { sx: styles.titleContainer, children: [jsx(Flex, { sx: { fontSize: '22px' }, children: "Bond Stats" }), jsxs(Link, { href: `https://dashboard.ape.bond/bond/${selectedBond?.contractAddress?.[selectedBond?.chainId]}`, sx: styles.link, target: "_blank", rel: "noopener noreferrer", children: ["View More ", '>'] })] }), jsxs(Flex, { sx: styles.chartsContainer, children: [jsxs(Flex, { sx: styles.salesChart, children: [jsx(Flex, { sx: { width: '155px' }, children: jsx(MenuSelect, { selectedOption: chartOption, setOption: setChartOption, options: chartOptions }) }), jsx(Flex, { sx: { width: '100%', height: '100%', minHeight: '225px' }, children: chartOption === 'amount' ? (jsx(LineChart, { labels: salesAmountChartData.labels, data: salesAmountChartData.data, valueLabel: salesAmountChartData.label })) : (jsx(LineChart, { labels: salesCountChartData.labels, data: salesCountChartData.data, valueLabel: salesCountChartData.label })) })] }), bondStats?.percentageSold && (jsxs(Flex, { sx: styles.percentageSoldChart, children: [jsxs(Flex, { sx: { mb: '10px' }, children: [selectedBond.earnToken.symbol, " Sold"] }), jsx(CircularProgress, { value: bondStats?.percentageSold, size: 176, valueTemplate: `${bondStats?.percentageSold?.toFixed()}%`, valueColor: "#6560C5", rangeColor: "rgba(250, 250, 250, 0.05)", textColor: "#f6f6f6" }), jsxs(Flex, { sx: { fontSize: '14px', fontWeight: 500, color: 'textDisabledButton', mt: '15px' }, children: [soldTokens, " / ", maxTotalPayout?.toLocaleString(), " ", selectedBond.earnToken.symbol] })] }))] })] }));
|
|
85
58
|
};
|
|
86
59
|
|
|
87
60
|
export { BondStats as default };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":["../../../../../src/views/ProjectView/components/BondStats/index.tsx"],"sourcesContent":["import React, { useEffect, useState } from 'react'\nimport { stripDate } from './utils'\nimport { ChartData, chartOptions
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../../../../../src/views/ProjectView/components/BondStats/index.tsx"],"sourcesContent":["import React, { useEffect, useState } from 'react'\nimport { stripDate } from './utils'\nimport { ChartData, chartOptions } from './types'\nimport CircularProgress from '../../../../components/CircularProgress'\nimport LineChart from './LineChart'\nimport { getBalanceNumber } from '../../../../utils/getBalanceNumber'\nimport { styles } from './styles'\nimport { BondsData } from '../../../../types/bonds'\nimport useGetBondApiStats from '../../../../state/bondApiStats/useGetBondApiStats'\nimport Flex from '../../../../components/uikit-sdk/Flex'\nimport { Link } from 'theme-ui'\nimport MenuSelect from '../../../../components/MenuSelect/MenuSelect'\n\nconst BondStats = ({ selectedBond }: { selectedBond: BondsData }) => {\n const { data: bondStats } = useGetBondApiStats(selectedBond?.contractAddress?.[selectedBond?.chainId])\n const [chartOption, setChartOption] = useState<string>(chartOptions[0].value)\n const [salesCountChartData, setSalesCountChartData] = useState<ChartData>({\n label: 'Sales Count',\n labels: [],\n data: [],\n })\n const [salesAmountChartData, setSalesAmountChartData] = useState<ChartData>({\n label: 'Sales Amount $',\n labels: [],\n data: [],\n })\n\n const maxTotalPayout = getBalanceNumber(\n selectedBond?.maxTotalPayout ?? '0',\n selectedBond.earnToken.decimals[selectedBond.chainId] ?? 18,\n )\n const tokensRemaining = parseFloat(selectedBond?.tokensRemaining ?? '0')\n const soldTokens = Math.floor(maxTotalPayout - tokensRemaining)?.toLocaleString()\n\n useEffect(() => {\n if (bondStats) {\n const reversedData = [...bondStats.Sales].reverse()\n const countsByDate: { [key: string]: { salesNum: number; salesAmount: number } } = reversedData.reduce<{\n [dateStr: string]: { salesNum: number; salesAmount: number }\n }>((acc, item) => {\n const dateStr = stripDate(item?.createdAt)\n\n if (!acc[dateStr]) {\n acc[dateStr] = { salesNum: 0, salesAmount: 0 }\n }\n const dollarValue = item?.dollarValue || 0\n acc[dateStr].salesNum += 1\n acc[dateStr].salesAmount += Math.round(dollarValue)\n\n return acc\n }, {})\n\n const salesByDate = Object.values(countsByDate)\n const labels = Object.keys(countsByDate)\n\n setSalesCountChartData((prev) => ({\n ...prev,\n labels,\n data: salesByDate.map((sale) => sale?.salesNum),\n }))\n setSalesAmountChartData((prev) => ({\n ...prev,\n labels,\n data: salesByDate.map((sale) => sale?.salesAmount),\n }))\n }\n }, [bondStats])\n\n return (\n <Flex sx={styles.bondStatsContainer}>\n <Flex sx={styles.titleContainer}>\n <Flex sx={{ fontSize: '22px' }}>Bond Stats</Flex>\n <Link\n href={`https://dashboard.ape.bond/bond/${selectedBond?.contractAddress?.[selectedBond?.chainId]}`}\n sx={styles.link}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n >\n View More {'>'}\n </Link>\n </Flex>\n <Flex sx={styles.chartsContainer}>\n <Flex sx={styles.salesChart}>\n <Flex sx={{ width: '155px' }}>\n <MenuSelect selectedOption={chartOption} setOption={setChartOption} options={chartOptions} />\n </Flex>\n <Flex sx={{ width: '100%', height: '100%', minHeight: '225px' }}>\n {chartOption === 'amount' ? (\n <LineChart\n labels={salesAmountChartData.labels}\n data={salesAmountChartData.data}\n valueLabel={salesAmountChartData.label}\n />\n ) : (\n <LineChart\n labels={salesCountChartData.labels}\n data={salesCountChartData.data}\n valueLabel={salesCountChartData.label}\n />\n )}\n </Flex>\n </Flex>\n {bondStats?.percentageSold && (\n <Flex sx={styles.percentageSoldChart}>\n <Flex sx={{ mb: '10px' }}>{selectedBond.earnToken.symbol} Sold</Flex>\n <CircularProgress\n value={bondStats?.percentageSold}\n size={176}\n valueTemplate={`${bondStats?.percentageSold?.toFixed()}%`}\n valueColor=\"#6560C5\"\n rangeColor=\"rgba(250, 250, 250, 0.05)\"\n textColor=\"#f6f6f6\"\n />\n <Flex sx={{ fontSize: '14px', fontWeight: 500, color: 'textDisabledButton', mt: '15px' }}>\n {soldTokens} / {maxTotalPayout?.toLocaleString()} {selectedBond.earnToken.symbol}\n </Flex>\n </Flex>\n )}\n </Flex>\n </Flex>\n )\n}\n\nexport default BondStats\n"],"names":["_jsxs","_jsx"],"mappings":";;;;;;;;;;;;;AAaA,MAAM,SAAS,GAAG,CAAC,EAAE,YAAY,EAA+B,KAAI;AAClE,IAAA,MAAM,EAAE,IAAI,EAAE,SAAS,EAAE,GAAG,kBAAkB,CAAC,YAAY,EAAE,eAAe,GAAG,YAAY,EAAE,OAAO,CAAC,CAAC;AACtG,IAAA,MAAM,CAAC,WAAW,EAAE,cAAc,CAAC,GAAG,QAAQ,CAAS,YAAY,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;AAC7E,IAAA,MAAM,CAAC,mBAAmB,EAAE,sBAAsB,CAAC,GAAG,QAAQ,CAAY;AACxE,QAAA,KAAK,EAAE,aAAa;AACpB,QAAA,MAAM,EAAE,EAAE;AACV,QAAA,IAAI,EAAE,EAAE;AACT,KAAA,CAAC;AACF,IAAA,MAAM,CAAC,oBAAoB,EAAE,uBAAuB,CAAC,GAAG,QAAQ,CAAY;AAC1E,QAAA,KAAK,EAAE,gBAAgB;AACvB,QAAA,MAAM,EAAE,EAAE;AACV,QAAA,IAAI,EAAE,EAAE;AACT,KAAA,CAAC;IAEF,MAAM,cAAc,GAAG,gBAAgB,CACrC,YAAY,EAAE,cAAc,IAAI,GAAG,EACnC,YAAY,CAAC,SAAS,CAAC,QAAQ,CAAC,YAAY,CAAC,OAAO,CAAC,IAAI,EAAE,CAC5D;IACD,MAAM,eAAe,GAAG,UAAU,CAAC,YAAY,EAAE,eAAe,IAAI,GAAG,CAAC;AACxE,IAAA,MAAM,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,cAAc,GAAG,eAAe,CAAC,EAAE,cAAc,EAAE;IAEjF,SAAS,CAAC,MAAK;QACb,IAAI,SAAS,EAAE;YACb,MAAM,YAAY,GAAG,CAAC,GAAG,SAAS,CAAC,KAAK,CAAC,CAAC,OAAO,EAAE;YACnD,MAAM,YAAY,GAAiE,YAAY,CAAC,MAAM,CAEnG,CAAC,GAAG,EAAE,IAAI,KAAI;gBACf,MAAM,OAAO,GAAG,SAAS,CAAC,IAAI,EAAE,SAAS,CAAC;AAE1C,gBAAA,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE;AACjB,oBAAA,GAAG,CAAC,OAAO,CAAC,GAAG,EAAE,QAAQ,EAAE,CAAC,EAAE,WAAW,EAAE,CAAC,EAAE;gBAChD;AACA,gBAAA,MAAM,WAAW,GAAG,IAAI,EAAE,WAAW,IAAI,CAAC;AAC1C,gBAAA,GAAG,CAAC,OAAO,CAAC,CAAC,QAAQ,IAAI,CAAC;AAC1B,gBAAA,GAAG,CAAC,OAAO,CAAC,CAAC,WAAW,IAAI,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC;AAEnD,gBAAA,OAAO,GAAG;YACZ,CAAC,EAAE,EAAE,CAAC;YAEN,MAAM,WAAW,GAAG,MAAM,CAAC,MAAM,CAAC,YAAY,CAAC;YAC/C,MAAM,MAAM,GAAG,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC;AAExC,YAAA,sBAAsB,CAAC,CAAC,IAAI,MAAM;AAChC,gBAAA,GAAG,IAAI;gBACP,MAAM;AACN,gBAAA,IAAI,EAAE,WAAW,CAAC,GAAG,CAAC,CAAC,IAAI,KAAK,IAAI,EAAE,QAAQ,CAAC;AAChD,aAAA,CAAC,CAAC;AACH,YAAA,uBAAuB,CAAC,CAAC,IAAI,MAAM;AACjC,gBAAA,GAAG,IAAI;gBACP,MAAM;AACN,gBAAA,IAAI,EAAE,WAAW,CAAC,GAAG,CAAC,CAAC,IAAI,KAAK,IAAI,EAAE,WAAW,CAAC;AACnD,aAAA,CAAC,CAAC;QACL;AACF,IAAA,CAAC,EAAE,CAAC,SAAS,CAAC,CAAC;AAEf,IAAA,QACEA,IAAA,CAAC,IAAI,EAAA,EAAC,EAAE,EAAE,MAAM,CAAC,kBAAkB,EAAA,QAAA,EAAA,CACjCA,IAAA,CAAC,IAAI,EAAA,EAAC,EAAE,EAAE,MAAM,CAAC,cAAc,EAAA,QAAA,EAAA,CAC7BC,GAAA,CAAC,IAAI,EAAA,EAAC,EAAE,EAAE,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAA,QAAA,EAAA,YAAA,EAAA,CAAmB,EACjDD,IAAA,CAAC,IAAI,EAAA,EACH,IAAI,EAAE,CAAA,gCAAA,EAAmC,YAAY,EAAE,eAAe,GAAG,YAAY,EAAE,OAAO,CAAC,EAAE,EACjG,EAAE,EAAE,MAAM,CAAC,IAAI,EACf,MAAM,EAAC,QAAQ,EACf,GAAG,EAAC,qBAAqB,EAAA,QAAA,EAAA,CAAA,YAAA,EAEd,GAAG,CAAA,EAAA,CACT,CAAA,EAAA,CACF,EACPA,IAAA,CAAC,IAAI,EAAA,EAAC,EAAE,EAAE,MAAM,CAAC,eAAe,EAAA,QAAA,EAAA,CAC9BA,IAAA,CAAC,IAAI,EAAA,EAAC,EAAE,EAAE,MAAM,CAAC,UAAU,EAAA,QAAA,EAAA,CACzBC,IAAC,IAAI,EAAA,EAAC,EAAE,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,EAAA,QAAA,EAC1BA,GAAA,CAAC,UAAU,EAAA,EAAC,cAAc,EAAE,WAAW,EAAE,SAAS,EAAE,cAAc,EAAE,OAAO,EAAE,YAAY,EAAA,CAAI,EAAA,CACxF,EACPA,GAAA,CAAC,IAAI,EAAA,EAAC,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,OAAO,EAAE,EAAA,QAAA,EAC5D,WAAW,KAAK,QAAQ,IACvBA,GAAA,CAAC,SAAS,EAAA,EACR,MAAM,EAAE,oBAAoB,CAAC,MAAM,EACnC,IAAI,EAAE,oBAAoB,CAAC,IAAI,EAC/B,UAAU,EAAE,oBAAoB,CAAC,KAAK,EAAA,CACtC,KAEFA,GAAA,CAAC,SAAS,EAAA,EACR,MAAM,EAAE,mBAAmB,CAAC,MAAM,EAClC,IAAI,EAAE,mBAAmB,CAAC,IAAI,EAC9B,UAAU,EAAE,mBAAmB,CAAC,KAAK,GACrC,CACH,EAAA,CACI,CAAA,EAAA,CACF,EACN,SAAS,EAAE,cAAc,KACxBD,IAAA,CAAC,IAAI,EAAA,EAAC,EAAE,EAAE,MAAM,CAAC,mBAAmB,EAAA,QAAA,EAAA,CAClCA,KAAC,IAAI,EAAA,EAAC,EAAE,EAAE,EAAE,EAAE,EAAE,MAAM,EAAE,EAAA,QAAA,EAAA,CAAG,YAAY,CAAC,SAAS,CAAC,MAAM,EAAA,OAAA,CAAA,EAAA,CAAa,EACrEC,GAAA,CAAC,gBAAgB,EAAA,EACf,KAAK,EAAE,SAAS,EAAE,cAAc,EAChC,IAAI,EAAE,GAAG,EACT,aAAa,EAAE,GAAG,SAAS,EAAE,cAAc,EAAE,OAAO,EAAE,CAAA,CAAA,CAAG,EACzD,UAAU,EAAC,SAAS,EACpB,UAAU,EAAC,2BAA2B,EACtC,SAAS,EAAC,SAAS,EAAA,CACnB,EACFD,IAAA,CAAC,IAAI,IAAC,EAAE,EAAE,EAAE,QAAQ,EAAE,MAAM,EAAE,UAAU,EAAE,GAAG,EAAE,KAAK,EAAE,oBAAoB,EAAE,EAAE,EAAE,MAAM,EAAE,EAAA,QAAA,EAAA,CACrF,UAAU,EAAA,KAAA,EAAK,cAAc,EAAE,cAAc,EAAE,EAAA,GAAA,EAAG,YAAY,CAAC,SAAS,CAAC,MAAM,IAC3E,CAAA,EAAA,CACF,CACR,CAAA,EAAA,CACI,CAAA,EAAA,CACF;AAEX;;;;"}
|
|
@@ -1,44 +1,9 @@
|
|
|
1
|
-
export declare const options: {
|
|
2
|
-
scales: {
|
|
3
|
-
y: {
|
|
4
|
-
grid: {
|
|
5
|
-
display: boolean;
|
|
6
|
-
color: string;
|
|
7
|
-
drawOnChartArea: boolean;
|
|
8
|
-
};
|
|
9
|
-
beginAtZero: boolean;
|
|
10
|
-
};
|
|
11
|
-
x: {
|
|
12
|
-
grid: {
|
|
13
|
-
display: boolean;
|
|
14
|
-
color: string;
|
|
15
|
-
drawOnChartArea: boolean;
|
|
16
|
-
};
|
|
17
|
-
};
|
|
18
|
-
};
|
|
19
|
-
plugins: {
|
|
20
|
-
legend: {
|
|
21
|
-
display: boolean;
|
|
22
|
-
};
|
|
23
|
-
};
|
|
24
|
-
pointRadius: number;
|
|
25
|
-
responsive: boolean;
|
|
26
|
-
maintainAspectRatio: boolean;
|
|
27
|
-
};
|
|
28
|
-
interface ChartDataset {
|
|
29
|
-
label: string;
|
|
30
|
-
data: number[];
|
|
31
|
-
fill: boolean;
|
|
32
|
-
borderColor: string;
|
|
33
|
-
backgroundColor: string;
|
|
34
|
-
tension: number;
|
|
35
|
-
}
|
|
36
1
|
export interface ChartData {
|
|
2
|
+
label: string;
|
|
37
3
|
labels: string[];
|
|
38
|
-
|
|
4
|
+
data: number[];
|
|
39
5
|
}
|
|
40
6
|
export declare const chartOptions: {
|
|
41
7
|
label: string;
|
|
42
8
|
value: string;
|
|
43
9
|
}[];
|
|
44
|
-
export {};
|
|
@@ -1,30 +1,3 @@
|
|
|
1
|
-
const options = {
|
|
2
|
-
scales: {
|
|
3
|
-
y: {
|
|
4
|
-
grid: {
|
|
5
|
-
display: true,
|
|
6
|
-
color: 'rgba(250, 250, 250, 0.1)',
|
|
7
|
-
drawOnChartArea: true,
|
|
8
|
-
},
|
|
9
|
-
beginAtZero: true,
|
|
10
|
-
},
|
|
11
|
-
x: {
|
|
12
|
-
grid: {
|
|
13
|
-
display: true,
|
|
14
|
-
color: 'rgba(250, 250, 250, 0.1)',
|
|
15
|
-
drawOnChartArea: true,
|
|
16
|
-
},
|
|
17
|
-
},
|
|
18
|
-
},
|
|
19
|
-
plugins: {
|
|
20
|
-
legend: {
|
|
21
|
-
display: false,
|
|
22
|
-
},
|
|
23
|
-
},
|
|
24
|
-
pointRadius: 0,
|
|
25
|
-
responsive: true,
|
|
26
|
-
maintainAspectRatio: false,
|
|
27
|
-
};
|
|
28
1
|
const chartOptions = [
|
|
29
2
|
{
|
|
30
3
|
label: 'Sales Amount',
|
|
@@ -36,5 +9,5 @@ const chartOptions = [
|
|
|
36
9
|
},
|
|
37
10
|
];
|
|
38
11
|
|
|
39
|
-
export { chartOptions
|
|
12
|
+
export { chartOptions };
|
|
40
13
|
//# sourceMappingURL=types.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.js","sources":["../../../../../src/views/ProjectView/components/BondStats/types.ts"],"sourcesContent":["export
|
|
1
|
+
{"version":3,"file":"types.js","sources":["../../../../../src/views/ProjectView/components/BondStats/types.ts"],"sourcesContent":["export interface ChartData {\n label: string\n labels: string[]\n data: number[]\n}\n\nexport const chartOptions = [\n {\n label: 'Sales Amount',\n value: 'amount',\n },\n {\n label: 'Sales Count',\n value: 'count',\n },\n]\n"],"names":[],"mappings":"AAMO,MAAM,YAAY,GAAG;AAC1B,IAAA;AACE,QAAA,KAAK,EAAE,cAAc;AACrB,QAAA,KAAK,EAAE,QAAQ;AAChB,KAAA;AACD,IAAA;AACE,QAAA,KAAK,EAAE,aAAa;AACpB,QAAA,KAAK,EAAE,OAAO;AACf,KAAA;;;;;"}
|
|
@@ -27,6 +27,7 @@ import AbondModal from '../../../../components/CustomClaimModals/AbondModal.js';
|
|
|
27
27
|
import OabondModal from '../../../../components/CustomClaimModals/OabondModal.js';
|
|
28
28
|
import PmusdModal from '../../../../components/CustomClaimModals/PmusdModal.js';
|
|
29
29
|
import More from '../../../../components/uikit-sdk/Svg/Icons/More.js';
|
|
30
|
+
import PostClaimModal from '../../../../components/CustomClaimModals/PostClaimModal.js';
|
|
30
31
|
|
|
31
32
|
const UserBondRow = ({ bill }) => {
|
|
32
33
|
// Hooks
|
|
@@ -97,6 +98,7 @@ const UserBondRow = ({ bill }) => {
|
|
|
97
98
|
const [openCircularModal] = useModal(jsx(AbondModal, {}), true, false, 'circularModal');
|
|
98
99
|
const [openOABONDModal] = useModal(jsx(OabondModal, {}), true, false, 'oABONDModal');
|
|
99
100
|
const [openPmusdModal] = useModal(jsx(PmusdModal, {}), true, false, 'pmUSDModal');
|
|
101
|
+
const [openPostClaimFlowModal] = useModal(jsx(PostClaimModal, { tokenSymbol: bill?.bond?.earnToken?.symbol, text: bill?.bond?.postClaimFlow?.text, imgUrl: bill?.bond?.postClaimFlow?.imgUrl, ctaUrl: bill?.bond?.postClaimFlow?.ctaUrl }), true, false, 'postClaimFlowModal');
|
|
100
102
|
useEffect(() => {
|
|
101
103
|
if (isConfirmed) {
|
|
102
104
|
refetchUserBonds();
|
|
@@ -109,6 +111,9 @@ const UserBondRow = ({ bill }) => {
|
|
|
109
111
|
if (bill?.bond?.earnToken.symbol.toLowerCase() === 'pmusd') {
|
|
110
112
|
openPmusdModal();
|
|
111
113
|
}
|
|
114
|
+
if (bill?.bond?.postClaimFlow) {
|
|
115
|
+
openPostClaimFlowModal();
|
|
116
|
+
}
|
|
112
117
|
}
|
|
113
118
|
/* eslint-disable react-hooks/exhaustive-deps */
|
|
114
119
|
}, [isConfirmed]);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"UserBondRow.js","sources":["../../../../../src/views/YourBonds/components/UserBondRow/UserBondRow.tsx"],"sourcesContent":["import React, { useEffect, useState } from 'react'\nimport { Flex } from 'theme-ui'\nimport TokenInfoAndName from '../../../../components/TokenInfoAndName'\nimport { formatNumberSI } from '../../../../utils/formatNumber'\nimport Button from '../../../../components/uikit-sdk/Button/Button'\nimport TooltipBubble from '../../../../components/uikit-sdk/TooltipBubble'\nimport { UserBill } from '../../../../types/yourbonds'\nimport {\n claimable,\n getPendingVestingString,\n getPercentageVested,\n getTimeLeftForFullyVested,\n pending,\n} from '../../../../utils/displayHelpers'\nimport { useChainId, useSwitchChain, useWriteContract } from 'wagmi'\nimport BOND_ABI from '../../../../config/abi/BOND_2_4_0.json'\nimport useModal from '../../../../hooks/useModal'\nimport YourBondsModal from '../../../YourBondsModal/YourBondsModal'\nimport { usePopups } from '../../../../state/popups/usePopups'\nimport { useMonitorTx } from '../../../../hooks/useMonitorTx'\nimport Tooltip from '../../../../components/Tooltip/Tooltip'\nimport track from '../../../../utils/track'\nimport { remove0xPrefix } from '../../../../utils/remove0xPrefix'\nimport { getTimePeriods } from '../../../../utils/getTimePeriods'\nimport { reportError } from '../../../../utils/reportError'\nimport { useSDKConfig } from '../../../../state/useSDKConfig'\nimport useEVMAccount from '../../../../hooks/accounts/useEVMAccount'\nimport useUserBonds from '../../../../state/bonds/useUserBonds'\nimport ProfitCard from '../ProfitCard/ProfitCard'\nimport ProgressBarWrapper from '../../../../components/ProgressBar/ProgressBarWrapper'\nimport ProgressBar from '../../../../components/ProgressBar/ProgressBar'\nimport { AbondModal, OabondModal, PmusdModal } from '../../../../components/CustomClaimModals'\nimport More from '../../../../components/uikit-sdk/Svg/Icons/More'\n\nconst UserBondRow = ({ bill }: { bill: UserBill }) => {\n // Hooks\n const userChainId = useChainId()\n const SDKConfig = useSDKConfig()\n const { address: account } = useEVMAccount()\n const { switchChain } = useSwitchChain()\n const { writeContractAsync } = useWriteContract()\n const { addToastError } = usePopups()\n const { refetch: refetchUserBonds } = useUserBonds()\n const [onOpenPurchasedBond] = useModal(<YourBondsModal userBill={bill} />)\n\n // State\n const [claimTxHash, setClaimTxHash] = useState<string | null>(null)\n const { isLoading: isConfirming, isSuccess: isConfirmed } = useMonitorTx(claimTxHash, bill?.bond?.chainId)\n const [loadingTx, setLoadingTx] = useState(false)\n const load = loadingTx || (isConfirming && !isConfirmed)\n\n const handleClaim = async (billId: string, billAddress: string) => {\n if (userChainId !== bill?.bond?.chainId) {\n await switchChain({ chainId: bill?.bond?.chainId! })\n }\n const address: `0x${string}` = billAddress as `0x${string}`\n try {\n setLoadingTx(true)\n const tx = await writeContractAsync({\n address: address,\n abi: BOND_ABI,\n functionName: 'redeem',\n args: [billId],\n chain: userChainId as any,\n account,\n })\n setLoadingTx(false)\n\n if (tx) {\n setClaimTxHash(tx)\n track({\n event: 'bond',\n chain: bill?.bond?.chainId,\n data: {\n cat: 'claim',\n bondType: bill?.bond?.billType,\n address: remove0xPrefix(bill?.bond?.contractAddress?.[bill?.bond?.chainId]),\n earnToken: bill?.bond?.earnToken.symbol,\n },\n })\n }\n } catch (error: any) {\n setLoadingTx(false)\n console.error('Claim failed:', error)\n addToastError(error.message)\n reportError({\n apiUrl: SDKConfig?.urls?.apiV2,\n error,\n extraInfo: { type: 'claim', bill, error },\n chainId: bill?.bond?.chainId,\n account,\n })\n }\n }\n\n // Display Info\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 purchaseTimestamp = parseInt(bill?.vestingStartTimestamp ?? '0')\n const isPendingCliff = vestingCliff ? currentTime - purchaseTimestamp < vestingCliff : false\n const cliffCountdown = getTimePeriods(purchaseTimestamp + (vestingCliff ?? 0) - currentTime, true)\n\n // Modals\n const [openCircularModal] = useModal(<AbondModal />, true, false, 'circularModal')\n const [openOABONDModal] = useModal(<OabondModal />, true, false, 'oABONDModal')\n const [openPmusdModal] = useModal(<PmusdModal />, true, false, 'pmUSDModal')\n\n useEffect(() => {\n if (isConfirmed) {\n refetchUserBonds()\n if (bill?.bond?.earnToken.symbol.toLowerCase() === 'abond') {\n openCircularModal()\n }\n if (bill?.bond?.earnToken.symbol.toLowerCase() === 'oabond') {\n openOABONDModal()\n }\n if (bill?.bond?.earnToken.symbol.toLowerCase() === 'pmusd') {\n openPmusdModal()\n }\n }\n /* eslint-disable react-hooks/exhaustive-deps */\n }, [isConfirmed])\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 tag={bill?.bond?.tags?.[0]}\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!}\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\n sx={{\n opacity: 0.8,\n }}\n >\n <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), 3)}\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), 3)}\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 <Button\n className=\"button\"\n disabled={claimable(bill) === 0 || load || isPendingCliff || bill.paused}\n load={load}\n onClick={(event) => {\n event.stopPropagation()\n handleClaim(bill.id, bill.address)\n }}\n fullWidth\n >\n {bill.paused\n ? 'claims disabled'\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 </div>\n </div>\n </div>\n )\n}\n\nexport default UserBondRow\n"],"names":["_jsx","_jsxs","Tooltip"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"UserBondRow.js","sources":["../../../../../src/views/YourBonds/components/UserBondRow/UserBondRow.tsx"],"sourcesContent":["import React, { useEffect, useState } from 'react'\nimport { Flex } from 'theme-ui'\nimport TokenInfoAndName from '../../../../components/TokenInfoAndName'\nimport { formatNumberSI } from '../../../../utils/formatNumber'\nimport Button from '../../../../components/uikit-sdk/Button/Button'\nimport TooltipBubble from '../../../../components/uikit-sdk/TooltipBubble'\nimport { UserBill } from '../../../../types/yourbonds'\nimport {\n claimable,\n getPendingVestingString,\n getPercentageVested,\n getTimeLeftForFullyVested,\n pending,\n} from '../../../../utils/displayHelpers'\nimport { useChainId, useSwitchChain, useWriteContract } from 'wagmi'\nimport BOND_ABI from '../../../../config/abi/BOND_2_4_0.json'\nimport useModal from '../../../../hooks/useModal'\nimport YourBondsModal from '../../../YourBondsModal/YourBondsModal'\nimport { usePopups } from '../../../../state/popups/usePopups'\nimport { useMonitorTx } from '../../../../hooks/useMonitorTx'\nimport Tooltip from '../../../../components/Tooltip/Tooltip'\nimport track from '../../../../utils/track'\nimport { remove0xPrefix } from '../../../../utils/remove0xPrefix'\nimport { getTimePeriods } from '../../../../utils/getTimePeriods'\nimport { reportError } from '../../../../utils/reportError'\nimport { useSDKConfig } from '../../../../state/useSDKConfig'\nimport useEVMAccount from '../../../../hooks/accounts/useEVMAccount'\nimport useUserBonds from '../../../../state/bonds/useUserBonds'\nimport ProfitCard from '../ProfitCard/ProfitCard'\nimport ProgressBarWrapper from '../../../../components/ProgressBar/ProgressBarWrapper'\nimport ProgressBar from '../../../../components/ProgressBar/ProgressBar'\nimport { AbondModal, OabondModal, PmusdModal } from '../../../../components/CustomClaimModals'\nimport More from '../../../../components/uikit-sdk/Svg/Icons/More'\nimport PostClaimModal from '../../../../components/CustomClaimModals/PostClaimModal'\n\nconst UserBondRow = ({ bill }: { bill: UserBill }) => {\n // Hooks\n const userChainId = useChainId()\n const SDKConfig = useSDKConfig()\n const { address: account } = useEVMAccount()\n const { switchChain } = useSwitchChain()\n const { writeContractAsync } = useWriteContract()\n const { addToastError } = usePopups()\n const { refetch: refetchUserBonds } = useUserBonds()\n const [onOpenPurchasedBond] = useModal(<YourBondsModal userBill={bill} />)\n\n // State\n const [claimTxHash, setClaimTxHash] = useState<string | null>(null)\n const { isLoading: isConfirming, isSuccess: isConfirmed } = useMonitorTx(claimTxHash, bill?.bond?.chainId)\n const [loadingTx, setLoadingTx] = useState(false)\n const load = loadingTx || (isConfirming && !isConfirmed)\n\n const handleClaim = async (billId: string, billAddress: string) => {\n if (userChainId !== bill?.bond?.chainId) {\n await switchChain({ chainId: bill?.bond?.chainId! })\n }\n const address: `0x${string}` = billAddress as `0x${string}`\n try {\n setLoadingTx(true)\n const tx = await writeContractAsync({\n address: address,\n abi: BOND_ABI,\n functionName: 'redeem',\n args: [billId],\n chain: userChainId as any,\n account,\n })\n setLoadingTx(false)\n\n if (tx) {\n setClaimTxHash(tx)\n track({\n event: 'bond',\n chain: bill?.bond?.chainId,\n data: {\n cat: 'claim',\n bondType: bill?.bond?.billType,\n address: remove0xPrefix(bill?.bond?.contractAddress?.[bill?.bond?.chainId]),\n earnToken: bill?.bond?.earnToken.symbol,\n },\n })\n }\n } catch (error: any) {\n setLoadingTx(false)\n console.error('Claim failed:', error)\n addToastError(error.message)\n reportError({\n apiUrl: SDKConfig?.urls?.apiV2,\n error,\n extraInfo: { type: 'claim', bill, error },\n chainId: bill?.bond?.chainId,\n account,\n })\n }\n }\n\n // Display Info\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 purchaseTimestamp = parseInt(bill?.vestingStartTimestamp ?? '0')\n const isPendingCliff = vestingCliff ? currentTime - purchaseTimestamp < vestingCliff : false\n const cliffCountdown = getTimePeriods(purchaseTimestamp + (vestingCliff ?? 0) - currentTime, true)\n\n // Modals\n const [openCircularModal] = useModal(<AbondModal />, true, false, 'circularModal')\n const [openOABONDModal] = useModal(<OabondModal />, true, false, 'oABONDModal')\n const [openPmusdModal] = useModal(<PmusdModal />, true, false, 'pmUSDModal')\n const [openPostClaimFlowModal] = useModal(\n <PostClaimModal\n tokenSymbol={bill?.bond?.earnToken?.symbol!}\n text={bill?.bond?.postClaimFlow?.text!}\n imgUrl={bill?.bond?.postClaimFlow?.imgUrl!}\n ctaUrl={bill?.bond?.postClaimFlow?.ctaUrl!}\n />,\n true,\n false,\n 'postClaimFlowModal',\n )\n\n useEffect(() => {\n if (isConfirmed) {\n refetchUserBonds()\n if (bill?.bond?.earnToken.symbol.toLowerCase() === 'abond') {\n openCircularModal()\n }\n if (bill?.bond?.earnToken.symbol.toLowerCase() === 'oabond') {\n openOABONDModal()\n }\n if (bill?.bond?.earnToken.symbol.toLowerCase() === 'pmusd') {\n openPmusdModal()\n }\n if (bill?.bond?.postClaimFlow) {\n openPostClaimFlowModal()\n }\n }\n /* eslint-disable react-hooks/exhaustive-deps */\n }, [isConfirmed])\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 tag={bill?.bond?.tags?.[0]}\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!}\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\n sx={{\n opacity: 0.8,\n }}\n >\n <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), 3)}\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), 3)}\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 <Button\n className=\"button\"\n disabled={claimable(bill) === 0 || load || isPendingCliff || bill.paused}\n load={load}\n onClick={(event) => {\n event.stopPropagation()\n handleClaim(bill.id, bill.address)\n }}\n fullWidth\n >\n {bill.paused\n ? 'claims disabled'\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 </div>\n </div>\n </div>\n )\n}\n\nexport default UserBondRow\n"],"names":["_jsx","_jsxs","Tooltip"],"mappings":"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"}
|
|
@@ -18,6 +18,7 @@ import useModal from '../../../../hooks/useModal.js';
|
|
|
18
18
|
import AbondModal from '../../../../components/CustomClaimModals/AbondModal.js';
|
|
19
19
|
import OabondModal from '../../../../components/CustomClaimModals/OabondModal.js';
|
|
20
20
|
import PmusdModal from '../../../../components/CustomClaimModals/PmusdModal.js';
|
|
21
|
+
import PostClaimModal from '../../../../components/CustomClaimModals/PostClaimModal.js';
|
|
21
22
|
|
|
22
23
|
const Actions = ({ userBill }) => {
|
|
23
24
|
// Hooks
|
|
@@ -88,6 +89,7 @@ const Actions = ({ userBill }) => {
|
|
|
88
89
|
const [openAbondModal] = useModal(jsx(AbondModal, {}), true, false, 'abondModal');
|
|
89
90
|
const [openOabondModal] = useModal(jsx(OabondModal, {}), true, false, 'oAbondModal');
|
|
90
91
|
const [openPmusdModal] = useModal(jsx(PmusdModal, {}), true, false, 'pmUSDModal');
|
|
92
|
+
const [openPostClaimFlowModal] = useModal(jsx(PostClaimModal, { tokenSymbol: userBill?.bond?.earnToken?.symbol, text: userBill?.bond?.postClaimFlow?.text, imgUrl: userBill?.bond?.postClaimFlow?.imgUrl, ctaUrl: userBill?.bond?.postClaimFlow?.ctaUrl }), true, false, 'postClaimFlowModal');
|
|
91
93
|
useEffect(() => {
|
|
92
94
|
if (isConfirmed) {
|
|
93
95
|
refetchUserBonds();
|
|
@@ -100,6 +102,9 @@ const Actions = ({ userBill }) => {
|
|
|
100
102
|
if (userBill?.bond?.earnToken.symbol.toLowerCase() === 'pmusd') {
|
|
101
103
|
openPmusdModal();
|
|
102
104
|
}
|
|
105
|
+
if (userBill?.bond?.postClaimFlow) {
|
|
106
|
+
openPostClaimFlowModal();
|
|
107
|
+
}
|
|
103
108
|
}
|
|
104
109
|
/* eslint-disable react-hooks/exhaustive-deps */
|
|
105
110
|
}, [isConfirmed]);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Actions.js","sources":["../../../../../src/views/YourBondsModal/components/Actions/Actions.tsx"],"sourcesContent":["import React, { useEffect, useState } from 'react'\nimport Button from '../../../../components/uikit-sdk/Button/Button'\nimport { claimable } from '../../../../utils/displayHelpers'\nimport { UserBill } from '../../../../types/yourbonds'\nimport { useChainId, useSwitchChain, useWriteContract } from 'wagmi'\nimport { useMonitorTx } from '../../../../hooks/useMonitorTx'\nimport useBondsData from '../../../../state/bonds/useBondsData'\nimport BOND_ABI from '../../../../config/abi/BOND_2_4_0.json'\nimport track from '../../../../utils/track'\nimport { remove0xPrefix } from '../../../../utils/remove0xPrefix'\nimport { reportError } from '../../../../utils/reportError'\nimport { useSDKConfig } from '../../../../state/useSDKConfig'\nimport useEVMAccount from '../../../../hooks/accounts/useEVMAccount'\nimport { usePopups } from '../../../../state/popups/usePopups'\nimport useUserBonds from '../../../../state/bonds/useUserBonds'\nimport { getTimePeriods } from '../../../../utils/getTimePeriods'\nimport useModal from '../../../../hooks/useModal'\nimport { AbondModal, OabondModal, PmusdModal } from '../../../../components/CustomClaimModals'\n\nconst Actions = ({ userBill }: { userBill?: UserBill }) => {\n // Hooks\n const { switchChainAsync } = useSwitchChain()\n const { data: liveBonds } = useBondsData()\n const SDKConfig = useSDKConfig()\n const chainId = useChainId()\n const { writeContractAsync } = useWriteContract()\n const { address: account } = useEVMAccount()\n const { addToastError } = usePopups()\n const { refetch: refetchUserBonds } = useUserBonds()\n\n // State\n const [claimTxHash, setClaimTxHash] = useState<string | null>(null)\n const [loadingTx, setLoadingTx] = useState(false)\n const { isLoading, isSuccess: isConfirmed } = useMonitorTx(claimTxHash, userBill?.bond?.chainId)\n\n // Static Data\n const load = loadingTx || (isLoading && !isConfirmed)\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 (billId?: string, billAddress?: string) => {\n const address: `0x${string}` = billAddress as `0x${string}`\n try {\n setLoadingTx(true)\n const tx = await writeContractAsync({\n address: address,\n abi: BOND_ABI,\n functionName: 'redeem',\n args: [billId],\n chain: chainId as any,\n account: account,\n }).catch()\n\n if (tx) {\n setClaimTxHash(tx)\n track({\n event: 'bond',\n chain: userBill?.bond?.chainId,\n data: {\n cat: 'claim',\n bondType: userBill?.bond?.billType,\n address: remove0xPrefix(userBill?.bond?.contractAddress?.[userBill?.bond?.chainId]),\n earnToken: userBill?.bond?.earnToken.symbol,\n },\n })\n }\n setLoadingTx(false)\n } catch (error: any) {\n console.error('Claim Failed:', error)\n setLoadingTx(false)\n addToastError(error.message)\n reportError({\n apiUrl: SDKConfig?.urls?.apiV2,\n error,\n extraInfo: { type: 'redeem', userBill, error },\n chainId,\n account,\n })\n }\n }\n\n // Modals\n const [openAbondModal] = useModal(<AbondModal />, true, false, 'abondModal')\n const [openOabondModal] = useModal(<OabondModal />, true, false, 'oAbondModal')\n const [openPmusdModal] = useModal(<PmusdModal />, true, false, 'pmUSDModal')\n\n useEffect(() => {\n if (isConfirmed) {\n refetchUserBonds()\n if (userBill?.bond?.earnToken.symbol.toLowerCase() === 'abond') {\n openAbondModal()\n }\n if (userBill?.bond?.earnToken.symbol.toLowerCase() === 'oabond') {\n openOabondModal()\n }\n if (userBill?.bond?.earnToken.symbol.toLowerCase() === 'pmusd') {\n openPmusdModal()\n }\n }\n /* eslint-disable react-hooks/exhaustive-deps */\n }, [isConfirmed])\n\n return (\n <>\n <Button\n variant=\"secondary\"\n disabled={claimable(userBill) === 0 || load || !userBill || isPendingCliff}\n load={load}\n onClick={(event) => {\n event.stopPropagation()\n if (chainId !== userBill?.bond?.chainId) {\n switchChainAsync({ chainId: userBill?.bond?.chainId! })\n .then(() => {\n handleClaim(userBill?.id, userBill?.address)\n })\n .catch()\n } else {\n handleClaim(userBill?.id, userBill?.address)\n }\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 canPurchaseAgain\n ? (window.location.href = `/bonds?bondAddress=${similarLiveBond.contractAddress[similarLiveBond.chainId]}&bondChain=${similarLiveBond.chainId}`)\n : null\n }\n disabled={!canPurchaseAgain}\n >\n {canPurchaseAgain ? 'Buy again' : 'sold out'}\n </Button>\n </>\n )\n}\n\nexport default Actions\n"],"names":["_jsx","_jsxs","_Fragment"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"Actions.js","sources":["../../../../../src/views/YourBondsModal/components/Actions/Actions.tsx"],"sourcesContent":["import React, { useEffect, useState } from 'react'\nimport Button from '../../../../components/uikit-sdk/Button/Button'\nimport { claimable } from '../../../../utils/displayHelpers'\nimport { UserBill } from '../../../../types/yourbonds'\nimport { useChainId, useSwitchChain, useWriteContract } from 'wagmi'\nimport { useMonitorTx } from '../../../../hooks/useMonitorTx'\nimport useBondsData from '../../../../state/bonds/useBondsData'\nimport BOND_ABI from '../../../../config/abi/BOND_2_4_0.json'\nimport track from '../../../../utils/track'\nimport { remove0xPrefix } from '../../../../utils/remove0xPrefix'\nimport { reportError } from '../../../../utils/reportError'\nimport { useSDKConfig } from '../../../../state/useSDKConfig'\nimport useEVMAccount from '../../../../hooks/accounts/useEVMAccount'\nimport { usePopups } from '../../../../state/popups/usePopups'\nimport useUserBonds from '../../../../state/bonds/useUserBonds'\nimport { getTimePeriods } from '../../../../utils/getTimePeriods'\nimport useModal from '../../../../hooks/useModal'\nimport { AbondModal, OabondModal, PmusdModal } from '../../../../components/CustomClaimModals'\nimport PostClaimModal from '../../../../components/CustomClaimModals/PostClaimModal'\n\nconst Actions = ({ userBill }: { userBill?: UserBill }) => {\n // Hooks\n const { switchChainAsync } = useSwitchChain()\n const { data: liveBonds } = useBondsData()\n const SDKConfig = useSDKConfig()\n const chainId = useChainId()\n const { writeContractAsync } = useWriteContract()\n const { address: account } = useEVMAccount()\n const { addToastError } = usePopups()\n const { refetch: refetchUserBonds } = useUserBonds()\n\n // State\n const [claimTxHash, setClaimTxHash] = useState<string | null>(null)\n const [loadingTx, setLoadingTx] = useState(false)\n const { isLoading, isSuccess: isConfirmed } = useMonitorTx(claimTxHash, userBill?.bond?.chainId)\n\n // Static Data\n const load = loadingTx || (isLoading && !isConfirmed)\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 (billId?: string, billAddress?: string) => {\n const address: `0x${string}` = billAddress as `0x${string}`\n try {\n setLoadingTx(true)\n const tx = await writeContractAsync({\n address: address,\n abi: BOND_ABI,\n functionName: 'redeem',\n args: [billId],\n chain: chainId as any,\n account: account,\n }).catch()\n\n if (tx) {\n setClaimTxHash(tx)\n track({\n event: 'bond',\n chain: userBill?.bond?.chainId,\n data: {\n cat: 'claim',\n bondType: userBill?.bond?.billType,\n address: remove0xPrefix(userBill?.bond?.contractAddress?.[userBill?.bond?.chainId]),\n earnToken: userBill?.bond?.earnToken.symbol,\n },\n })\n }\n setLoadingTx(false)\n } catch (error: any) {\n console.error('Claim Failed:', error)\n setLoadingTx(false)\n addToastError(error.message)\n reportError({\n apiUrl: SDKConfig?.urls?.apiV2,\n error,\n extraInfo: { type: 'redeem', userBill, error },\n chainId,\n account,\n })\n }\n }\n\n // Modals\n const [openAbondModal] = useModal(<AbondModal />, true, false, 'abondModal')\n const [openOabondModal] = useModal(<OabondModal />, true, false, 'oAbondModal')\n const [openPmusdModal] = useModal(<PmusdModal />, true, false, 'pmUSDModal')\n const [openPostClaimFlowModal] = useModal(\n <PostClaimModal\n tokenSymbol={userBill?.bond?.earnToken?.symbol!}\n text={userBill?.bond?.postClaimFlow?.text!}\n imgUrl={userBill?.bond?.postClaimFlow?.imgUrl!}\n ctaUrl={userBill?.bond?.postClaimFlow?.ctaUrl!}\n />,\n true,\n false,\n 'postClaimFlowModal',\n )\n\n useEffect(() => {\n if (isConfirmed) {\n refetchUserBonds()\n if (userBill?.bond?.earnToken.symbol.toLowerCase() === 'abond') {\n openAbondModal()\n }\n if (userBill?.bond?.earnToken.symbol.toLowerCase() === 'oabond') {\n openOabondModal()\n }\n if (userBill?.bond?.earnToken.symbol.toLowerCase() === 'pmusd') {\n openPmusdModal()\n }\n if (userBill?.bond?.postClaimFlow) {\n openPostClaimFlowModal()\n }\n }\n /* eslint-disable react-hooks/exhaustive-deps */\n }, [isConfirmed])\n\n return (\n <>\n <Button\n variant=\"secondary\"\n disabled={claimable(userBill) === 0 || load || !userBill || isPendingCliff}\n load={load}\n onClick={(event) => {\n event.stopPropagation()\n if (chainId !== userBill?.bond?.chainId) {\n switchChainAsync({ chainId: userBill?.bond?.chainId! })\n .then(() => {\n handleClaim(userBill?.id, userBill?.address)\n })\n .catch()\n } else {\n handleClaim(userBill?.id, userBill?.address)\n }\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 canPurchaseAgain\n ? (window.location.href = `/bonds?bondAddress=${similarLiveBond.contractAddress[similarLiveBond.chainId]}&bondChain=${similarLiveBond.chainId}`)\n : null\n }\n disabled={!canPurchaseAgain}\n >\n {canPurchaseAgain ? 'Buy again' : 'sold out'}\n </Button>\n </>\n )\n}\n\nexport default Actions\n"],"names":["_jsx","_jsxs","_Fragment"],"mappings":"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"}
|
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.2.
|
|
6
|
+
"version": "6.2.9",
|
|
7
7
|
"module": "dist/main.js",
|
|
8
8
|
"type": "module",
|
|
9
9
|
"types": "dist/main.d.ts",
|
|
@@ -118,15 +118,13 @@
|
|
|
118
118
|
"wagmi": ">=2"
|
|
119
119
|
},
|
|
120
120
|
"dependencies": {
|
|
121
|
-
"@ape.swap/apeswap-lists": "4.8.
|
|
121
|
+
"@ape.swap/apeswap-lists": "4.8.5",
|
|
122
122
|
"@emotion/react": "11.14.0",
|
|
123
123
|
"@jup-ag/api": "6.0.45",
|
|
124
124
|
"buffer": "6.0.3",
|
|
125
|
-
"chart.js": "4.5.0",
|
|
126
125
|
"framer-motion": "11.18.2",
|
|
127
126
|
"lightweight-charts": "4.2.3",
|
|
128
127
|
"lodash-es": "4.17.23",
|
|
129
|
-
"react-chartjs-2": "5.3.0",
|
|
130
128
|
"swiper": "12.1.2",
|
|
131
129
|
"theme-ui": "0.17.2"
|
|
132
130
|
},
|