import { useCallback, useMemo, useState } from 'react' import StakeForm from '@components/StakeForm' import mangoStore from '@store/mangoStore' import { getStakableTokensDataForTokenName } from 'utils/tokens' import { ArrowLeftIcon, XMarkIcon } from '@heroicons/react/20/solid' import DespositForm from './DepositForm' import { EnterBottomExitBottom } from './shared/Transitions' import TokenSelect from './TokenSelect' import { IconButton } from './shared/Button' import HeroTokenButton from './HeroTokenButton' import Image from 'next/image' import useStakeableTokens, { StakeableToken } from 'hooks/useStakeableTokens' import { useTheme } from 'next-themes' const set = mangoStore.getState().set export const YIELD_BUTTON_CLASSES = `flex items-center justify-center rounded-xl raised-button-neutral group after:rounded-xl h-32 px-6 md:px-6 w-full after:border after:border-th-bkg-3 focus:outline-none disabled:cursor-not-allowed disabled:opacity-50` export const SOL_YIELD = [ 'bSOL', 'MSOL', 'JitoSOL', 'JSOL', 'INF', 'hubSOL', 'digitSOL', 'dualSOL', 'mangoSOL', 'compassSOL', ] const USDC_YIELD = ['JLP', 'USDC'] const Stake = () => { const { theme } = useTheme() const [tokensToShow, setTokensToShow] = useState('') const [showTokenSelect, setShowTokenSelect] = useState(false) const selectedToken = mangoStore((s) => s.selectedToken) // const walletTokens = mangoStore((s) => s.wallet.tokens) const { stakeableTokens } = useStakeableTokens() const handleTokenSelect = useCallback((token: string) => { set((state) => { state.selectedToken = token }) setShowTokenSelect(false) }, []) const selectableTokens = useMemo(() => { return stakeableTokens.sort((a: StakeableToken, b: StakeableToken) => { // const aClientContext = getStakableTokensDataForTokenName( // a.token.symbol, // ).clientContext // const aWalletBalance = walletBalanceForToken( // walletTokens, // a.token.symbol, // aClientContext, // ) // const bClientContext = getStakableTokensDataForTokenName( // b.token.symbol, // ).clientContext // const bWalletBalance = walletBalanceForToken( // walletTokens, // b.token.symbol, // bClientContext, // ) // const aMaxAmount = aWalletBalance.maxAmount // const bMaxAmount = bWalletBalance.maxAmount const aApy = a.estNetApy const bApy = b.estNetApy // if (bMaxAmount !== aMaxAmount) { // return bMaxAmount - aMaxAmount // } else { // return bApy - aApy // } return bApy - aApy }) }, [stakeableTokens]) // const swapUrl = `https://app.mango.markets/swap?in=USDC&out=${selectedToken}&walletSwap=true` return ( <>

Select token to Boost!

setShowTokenSelect(false)} hideBg size="medium" >

Token

Wallet Balance

{selectableTokens.map((token) => ( handleTokenSelect(token.token.symbol)} tokenInfo={token} clientContext={ getStakableTokensDataForTokenName(token.token.symbol) .clientContext } /> ))}
{selectableTokens.length ? ( !selectedToken ? ( <>

Welcome yield fan 👋

It's time to leverage up your liquid staking yield.

I want to earn

{tokensToShow ? ( <>

By adding leverage to

{selectableTokens .filter((t) => { if (tokensToShow === 'SOL') { return SOL_YIELD.includes(t.token.symbol) } else if (tokensToShow === 'USDC') { return USDC_YIELD.includes(t.token.symbol) } else return }) .map((token) => { const { symbol } = token.token return ( set((state) => { state.selectedToken = symbol }) } tokenInfo={token} /> ) })}
) : null} ) : ( <>
set((state) => { state.selectedToken = '' }) } size="small" isPrimary >

Add {selectedToken}

{selectedToken === 'USDC' ? ( ) : ( )} ) ) : (

No positions to remove

)}
{/* {selectedToken ? (
{isDesktop ? (

Buy

{formatTokenSymbol(selectedToken)}

) : ( )}
) : null} */} ) } export default Stake