From 453d2e9cf338faaa67e7a0b6c5ba070a6c55320c Mon Sep 17 00:00:00 2001 From: Zak Date: Tue, 17 Dec 2024 14:41:58 +0000 Subject: [PATCH 1/2] feat: date range picker for yield pools --- src/components/vault/yield/PoolChart.jsx | 45 +++--- src/components/vault/yield/YieldItem.jsx | 133 +++++++++++------- src/components/vault/yield/YieldParentNew.jsx | 125 +++++++++++----- .../vault/yield/YieldViewModalNew.jsx | 116 ++++++++++----- src/store/Store.jsx | 11 ++ 5 files changed, 291 insertions(+), 139 deletions(-) diff --git a/src/components/vault/yield/PoolChart.jsx b/src/components/vault/yield/PoolChart.jsx index 5458803..765ad15 100644 --- a/src/components/vault/yield/PoolChart.jsx +++ b/src/components/vault/yield/PoolChart.jsx @@ -6,33 +6,34 @@ import { useLocalThemeModeStore, } from "../../../store/Store"; +// const YieldPoolChart = ({ hypervisorData, yieldPair }) => { const YieldPoolChart = ({ hypervisorData, yieldPair }) => { const { localThemeModeStore } = useLocalThemeModeStore(); const isLight = localThemeModeStore && localThemeModeStore.includes('light'); - const [chartWidth, setChartWidth] = useState(200); - const [chartHeight, setChartHeight] = useState(60); - const [lineColor, setLineColor] = useState("green"); + let series = []; + let xAxis = []; + if (hypervisorData && hypervisorData.length) { + series = [ + { + name: 'Position', + data: hypervisorData?.map(item => item.period_gamma_netApr) + }, + { + name: `If Held ${yieldPair[0] || ''}`, + data: hypervisorData?.map(item => item.period_hodl_token0) + }, + { + name: `If Held ${yieldPair[1] || ''}`, + data: hypervisorData?.map(item => item.period_hodl_token1) + }, + ]; - const series = [ - { - name: 'Position', - data: hypervisorData?.map(item => item.period_gamma_netApr) - }, - { - name: `If Held ${yieldPair[0] || ''}`, - data: hypervisorData?.map(item => item.period_hodl_token0) - }, - { - name: `If Held ${yieldPair[1] || ''}`, - data: hypervisorData?.map(item => item.period_hodl_token1) - }, - ]; - - const xAxis = hypervisorData?.map((item) => { - // const formattedDate = moment.unix(Number(item.timestamp)).format('MMM DD'); - return item.timestamp; - }); + xAxis = hypervisorData?.map((item) => { + // const formattedDate = moment.unix(Number(item.timestamp)).format('MMM DD'); + return item.timestamp; + }); + } const dataColors = [ '#facc15', diff --git a/src/components/vault/yield/YieldItem.jsx b/src/components/vault/yield/YieldItem.jsx index 9ffa1b2..83c5bc7 100644 --- a/src/components/vault/yield/YieldItem.jsx +++ b/src/components/vault/yield/YieldItem.jsx @@ -15,7 +15,7 @@ import { } from '@heroicons/react/24/outline'; import { - useVaultAddressStore, + useSelectedYieldPoolStore, } from "../../../store/Store"; import { @@ -45,8 +45,18 @@ const YieldItem = (props) => { handleOpenModal, isPositive, getYieldColor, + yieldRange } = props; + const { + selectedYieldPool, + setSelectedYieldPool, + selectedYieldPoolData, + setSelectedYieldPoolData, + selectedYieldPoolDataLoading, + setSelectedYieldPoolDataLoading, + } = useSelectedYieldPoolStore(); + const [ open, setOpen ] = useState(''); const chainId = useChainId(); @@ -54,6 +64,8 @@ const YieldItem = (props) => { const [ hypervisorDataLoading, setHypervisorDataLoading ] = useState(false); const [ hypervisorDataErr, setHypervisorDataErr ] = useState(false); + const [ modalData, setModalData ] = useState({}); + const yieldVaultsInfo = chainId === arbitrumSepolia.id ? SepoliaVaults : ArbitrumVaults; @@ -62,23 +74,7 @@ const YieldItem = (props) => { ? SepoliaGammaVaults : ArbitrumGammaVaults; - // const handleCloseModal = () => { - // // setYieldPair([]); - // // setYieldQuantities([]); - // // setYieldHypervisor(''); - // setOpen(''); - // setModalDataObj({}) - // }; - - // const handleOpenModal = (useData, type) => { - // setModalDataObj(useData) - // // setYieldPair(pair); - // // setYieldQuantities(quantities); - // // setYieldHypervisor(hypervisor); - // setOpen(type); - // } - - const dataPeriod = 14; + const dataPeriod = yieldRange; const hypervisorAddress = hypervisor?.address.toLowerCase(); @@ -100,13 +96,42 @@ const YieldItem = (props) => { if (hypervisor) { getHypervisorData(); } - }, [hypervisor]); + }, [hypervisor, dataPeriod]); + + useEffect(() => { + if (hypervisorData) { + const dataObj = { + yieldPair: [tokenA, tokenB], + hypervisor: hypervisor, + gammaUser: gammaUser, + hypervisorData: hypervisorData, + hypervisorDataLoading: hypervisorDataLoading, + gammaPosition: gammaPosition, + holdA: holdA, + holdB: holdB, + dataPeriod: dataPeriod, + apyBase: apyBase, + apyReward: apyReward, + apyTotal: apyTotal, + showBalance: showBalance, + yieldQuantities: quantities, + positionUser: userData, + }; + + setModalData(dataObj); + + if (selectedYieldPool === usePair) { + setSelectedYieldPoolData(dataObj) + } + } + }, [hypervisorData, dataPeriod]); const getHypervisorData = async () => { const hyperAddress = hypervisor?.address; try { setHypervisorDataLoading(true); + setSelectedYieldPoolDataLoading(true); const response = await axios.get( `https://wire3.gamma.xyz/frontend/analytics/returns/chart?hypervisor_address=${hyperAddress}&chain=arbitrum&period=${dataPeriod}` ); @@ -115,9 +140,11 @@ const YieldItem = (props) => { setHypervisorData(useData); setHypervisorDataLoading(false); + setSelectedYieldPoolDataLoading(false); setHypervisorDataErr(false); } catch (error) { setHypervisorDataLoading(false); + setSelectedYieldPoolDataLoading(false); setHypervisorDataErr(true); console.log(error); } @@ -168,23 +195,7 @@ const YieldItem = (props) => { const showBalance = '$'+balanceUSD?.toFixed(2) || ''; - const modalData = { - yieldPair: [tokenA, tokenB], - hypervisor: hypervisor, - gammaUser: gammaUser, - hypervisorData: hypervisorData, - hypervisorDataLoading: hypervisorDataLoading, - gammaPosition: gammaPosition, - holdA: holdA, - holdB: holdB, - dataPeriod: dataPeriod, - apyBase: apyBase, - apyReward: apyReward, - apyTotal: apyTotal, - showBalance: showBalance, - yieldQuantities: quantities, - positionUser: userData, - }; + const usePair = tokenA + tokenB; return ( <> @@ -250,10 +261,18 @@ const YieldItem = (props) => { /> - - {isPositive(gammaPosition) ? ('+') : null} - {Math.abs(gammaPosition) >= 0 ? (`${gammaPosition.toFixed(3)}%`) : ('')} - + {hypervisorDataLoading ? ( + <> + + + ) : ( + <> + + {isPositive(gammaPosition) ? ('+') : null} + {Math.abs(gammaPosition) >= 0 ? (`${gammaPosition.toFixed(3)}%`) : ('')} + + + )}
{ /> - - {isPositive(holdA) ? ('+') : null} - {Math.abs(holdA) >= 0 ? (`${holdA.toFixed(3)}%`) : ('')} - + {hypervisorDataLoading ? ( + <> + + + ) : ( + <> + + {isPositive(holdA) ? ('+') : null} + {Math.abs(holdA) >= 0 ? (`${holdA.toFixed(3)}%`) : ('')} + + + )}
{ /> - - {isPositive(holdB) ? ('+') : null} - {Math.abs(holdB) >= 0 ? (`${holdB.toFixed(3)}%`) : ('')} - + {hypervisorDataLoading ? ( + <> + + + ) : ( + <> + + {isPositive(holdB) ? ('+') : null} + {Math.abs(holdB) >= 0 ? (`${holdB.toFixed(3)}%`) : ('')} + + + )}
@@ -308,7 +343,7 @@ const YieldItem = (props) => { + ))} + + - )}
@@ -136,10 +160,18 @@ const YieldViewModal = ({ /> - - {isPositive(gammaPosition) ? ('+') : null} - {Math.abs(gammaPosition) >= 0 ? (`${gammaPosition?.toFixed(3)}%`) : ('')} - + {selectedYieldPoolDataLoading ? ( + <> + + + ) : ( + <> + + {isPositive(gammaPosition) ? ('+') : null} + {Math.abs(gammaPosition) >= 0 ? (`${gammaPosition?.toFixed(3)}%`) : ('')} + + + )}
- - {isPositive(holdA) ? ('+') : null} - {Math.abs(holdA) >= 0 ? (`${holdA?.toFixed(3)}%`) : ('')} - + {selectedYieldPoolDataLoading ? ( + <> + + + ) : ( + <> + + {isPositive(holdA) ? ('+') : null} + {Math.abs(holdA) >= 0 ? (`${holdA?.toFixed(3)}%`) : ('')} + + + )}
- - {isPositive(holdB) ? ('+') : null} - {Math.abs(holdB) >= 0 ? (`${holdB?.toFixed(3)}%`) : ('')} - + {selectedYieldPoolDataLoading ? ( + <> + + + ) : ( + <> + + {isPositive(holdB) ? ('+') : null} + {Math.abs(holdB) >= 0 ? (`${holdB?.toFixed(3)}%`) : ('')} + + + )}
@@ -192,7 +240,7 @@ const YieldViewModal = ({ diff --git a/src/store/Store.jsx b/src/store/Store.jsx index 532f891..5a430ea 100644 --- a/src/store/Store.jsx +++ b/src/store/Store.jsx @@ -301,3 +301,14 @@ export const useMerklRewardsUSD = create( setMerklRewardsUSD: (merklRewardsUSD) => set(() => ({ merklRewardsUSD: merklRewardsUSD })), }) ); + +export const useSelectedYieldPoolStore = create( + (set) => ({ + selectedYieldPool: '', + setSelectedYieldPool: (selectedYieldPool) => set(() => ({ selectedYieldPool: selectedYieldPool })), + selectedYieldPoolData: {}, + setSelectedYieldPoolData: (selectedYieldPoolData) => set(() => ({ selectedYieldPoolData: selectedYieldPoolData })), + selectedYieldPoolDataLoading: false, + setSelectedYieldPoolDataLoading: (selectedYieldPoolDataLoading) => set(() => ({ selectedYieldPoolDataLoading: selectedYieldPoolDataLoading })), + }) +); From ce7ff7514b196000d032a046ffa2dff31cfc182a Mon Sep 17 00:00:00 2001 From: Zak Date: Tue, 17 Dec 2024 14:43:48 +0000 Subject: [PATCH 2/2] feat: default yield stable to 20 --- src/components/vault/yield/YieldDepositModal.jsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/components/vault/yield/YieldDepositModal.jsx b/src/components/vault/yield/YieldDepositModal.jsx index 27d3fdf..8454411 100644 --- a/src/components/vault/yield/YieldDepositModal.jsx +++ b/src/components/vault/yield/YieldDepositModal.jsx @@ -40,7 +40,7 @@ const YieldDepositModal = (props) => { const { localThemeModeStore } = useLocalThemeModeStore(); const chainId = useChainId(); const [ yieldStage, setYieldStage ] = useState(''); - const [ stableRatio, setStableRatio ] = useState(10); + const [ stableRatio, setStableRatio ] = useState(20); const [ minCollateral, setMinCollateral ] = useState(50); const formattedSymbol = ethers.encodeBytes32String(symbol);