import Link from 'next/link' import useLocalStorageState from 'hooks/useLocalStorageState' import { DEFAULT_MARKET_KEY, initialMarket } from './SettingsModal' import { BtcMonoIcon, TradeIcon, TrophyIcon } from './icons' import { CashIcon, ChartBarIcon, CurrencyDollarIcon, DotsHorizontalIcon, SwitchHorizontalIcon, CalculatorIcon, LibraryIcon, LightBulbIcon, UserAddIcon, ExternalLinkIcon, ChevronDownIcon, ReceiptTaxIcon, } from '@heroicons/react/solid' import { useRouter } from 'next/router' import AccountOverviewPopover from './AccountOverviewPopover' import useMangoAccount from 'hooks/useMangoAccount' import { useTranslation } from 'next-i18next' import { Fragment, ReactNode, useEffect, useState } from 'react' import { Disclosure, Popover, Transition } from '@headlessui/react' import HealthHeart from './HealthHeart' import { abbreviateAddress } from 'utils' import { I80F48 } from '@blockworks-foundation/mango-client' import useMangoStore from 'stores/useMangoStore' const SideNav = ({ collapsed }) => { const { t } = useTranslation('common') const { mangoAccount } = useMangoAccount() const mangoGroup = useMangoStore((s) => s.selectedMangoGroup.current) const mangoCache = useMangoStore((s) => s.selectedMangoGroup.cache) const [defaultMarket] = useLocalStorageState( DEFAULT_MARKET_KEY, initialMarket ) const router = useRouter() const { pathname } = router const I80F48_100 = I80F48.fromString('100') const maintHealthRatio = mangoAccount && mangoGroup && mangoCache ? mangoAccount.getHealthRatio(mangoGroup, mangoCache, 'Maint') : I80F48_100 return (
next Mango
} title={t('trade')} pagePath="/" /> } title={t('account')} pagePath="/account" /> } title={t('markets')} pagePath="/markets" /> } title={t('borrow')} pagePath="/borrow" /> } title={t('swap')} pagePath="/swap" /> } title={t('stats')} pagePath="/stats" /> } title={t('leaderboard')} pagePath="/leaderboard" /> } title={t('more')} > } title={t('referrals')} pagePath="/referral" hideIconBg /> } title={t('calculator')} pagePath="/risk-calculator" hideIconBg /> } title={t('fees')} pagePath="/fees" hideIconBg /> } title={t('learn')} pagePath="https://docs.mango.markets" hideIconBg isExternal /> } title={t('governance')} pagePath="https://dao.mango.markets" hideIconBg isExternal />
{mangoAccount ? (
} title={

{t('account-summary')}

{abbreviateAddress(mangoAccount.publicKey)}

} hideIconBg alignBottom >
) : null}
) } export default SideNav const MenuItem = ({ active, collapsed, icon, title, pagePath, hideIconBg, isExternal, }: { active?: boolean collapsed: boolean icon: ReactNode title: string pagePath: string hideIconBg?: boolean isExternal?: boolean }) => { return !isExternal ? (
{icon}
{title}
) : (
{icon}
{!collapsed ? {title} : null}
) } const ExpandableMenuItem = ({ children, collapsed, icon, title, hideIconBg, alignBottom, }: { children: ReactNode collapsed: boolean icon: ReactNode title: string | ReactNode hideIconBg?: boolean alignBottom?: boolean }) => { const [showMenu, setShowMenu] = useState(false) const onHoverMenu = (open, action) => { if ( (!open && action === 'onMouseEnter') || (open && action === 'onMouseLeave') ) { setShowMenu(!showMenu) } } useEffect(() => { if (collapsed) { setShowMenu(false) } }, [collapsed]) return collapsed ? (
onHoverMenu(showMenu, 'onMouseEnter')} onMouseLeave={() => onHoverMenu(showMenu, 'onMouseLeave')} className="relative z-30" >
{icon}
{children}
) : (
setShowMenu(!showMenu)} role="button" className={`w-full `} >
{icon}
{title}
{children}
) }