import React, { FunctionComponent, useEffect, useState } from 'react' import { RadioGroup } from '@headlessui/react' import { CheckCircleIcon } from '@heroicons/react/solid' import { ChevronLeftIcon, PlusCircleIcon } from '@heroicons/react/outline' import useMangoStore from '../stores/useMangoStore' import { MangoAccount, MangoCache, MangoGroup, // ZERO_I80F48, } from '@blockworks-foundation/mango-client' import { abbreviateAddress } from '../utils' import useLocalStorageState from '../hooks/useLocalStorageState' import Modal from './Modal' import { ElementTitle } from './styles' import Button, { LinkButton } from './Button' import NewAccount from './NewAccount' export const LAST_ACCOUNT_KEY = 'lastAccountViewed-3.0' interface AccountsModalProps { onClose: () => void isOpen: boolean } const AccountsModal: FunctionComponent = ({ isOpen, onClose, }) => { const [showNewAccountForm, setShowNewAccountForm] = useState(false) const [newAccPublicKey, setNewAccPublicKey] = useState(null) const mangoAccounts = useMangoStore((s) => s.mangoAccounts) const selectedMangoAccount = useMangoStore( (s) => s.selectedMangoAccount.current ) const mangoGroup = useMangoStore((s) => s.selectedMangoGroup.current) const mangoCache = useMangoStore((s) => s.selectedMangoGroup.cache) const setMangoStore = useMangoStore((s) => s.set) const actions = useMangoStore((s) => s.actions) const [, setLastAccountViewed] = useLocalStorageState(LAST_ACCOUNT_KEY) const handleMangoAccountChange = (mangoAccount: MangoAccount) => { setLastAccountViewed(mangoAccount.publicKey.toString()) setMangoStore((state) => { state.selectedMangoAccount.current = mangoAccount }) actions.fetchTradeHistory() onClose() } useEffect(() => { if (newAccPublicKey) { setMangoStore((state) => { state.selectedMangoAccount.current = mangoAccounts.find((ma) => ma.publicKey.equals(newAccPublicKey) ) }) } }, [mangoAccounts, newAccPublicKey]) const handleNewAccountCreation = (newAccPublicKey) => { if (newAccPublicKey) { setNewAccPublicKey(newAccPublicKey) } setShowNewAccountForm(false) } const handleShowNewAccountForm = () => { setNewAccPublicKey(null) setShowNewAccountForm(true) } return ( {mangoAccounts.length > 0 ? ( !showNewAccountForm ? ( <> Mango Accounts
{mangoAccounts.length > 1 ? 'Select an account' : 'Your Account'}
handleMangoAccountChange(acc)} > Select a Mango Account
{mangoAccounts.map((account) => ( `${ checked ? 'bg-th-bkg-3 ring-1 ring-th-green ring-inset' : 'bg-th-bkg-1' } relative rounded-md w-full px-3 py-3 cursor-pointer default-transition flex hover:bg-th-bkg-3 focus:outline-none` } > {({ checked }) => ( <>
{account?.name || abbreviateAddress(account.publicKey)}
{mangoGroup ? (
) : null}
{checked && (
)}
)}
))}
) : ( <> setShowNewAccountForm(false)} > Back ) ) : ( )}
) } const AccountInfo = ({ mangoGroup, mangoAccount, mangoCache, }: { mangoGroup: MangoGroup mangoAccount: MangoAccount mangoCache: MangoCache }) => { const accountEquity = mangoAccount.computeValue(mangoGroup, mangoCache) // const leverage = accountEquity.gt(ZERO_I80F48) // ? mangoAccount // .getLiabsVal(mangoGroup, mangoCache) // .div(accountEquity) // .toFixed(2) // : '0.00' return (
${accountEquity.toFixed(2)} {/* | 4 ? 'text-th-red' : parseFloat(leverage) > 2 ? 'text-th-orange' : 'text-th-green' } > {leverage}x */}
) } export default React.memo(AccountsModal)