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 (
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 `}
>
{children}
)
}