This commit is contained in:
tjs 2023-09-20 21:54:55 -04:00
parent fae948ca3c
commit ef911a47b5
1 changed files with 29 additions and 18 deletions

View File

@ -14,6 +14,13 @@ import FormatNumericValue from './shared/FormatNumericValue'
const set = mangoStore.getState().set const set = mangoStore.getState().set
const BORROW_TOKEN = 'SOL'
const getLeverage = (stakeBalance: number, borrowBalance: number) => {
if (stakeBalance === 0) return 0
return borrowBalance / stakeBalance
}
const Positions = ({ const Positions = ({
setActiveTab, setActiveTab,
}: { }: {
@ -25,6 +32,10 @@ const Positions = ({
useLocalStorageState(SHOW_INACTIVE_POSITIONS_KEY, true) useLocalStorageState(SHOW_INACTIVE_POSITIONS_KEY, true)
const { stakeAccounts } = useStakeAccounts() const { stakeAccounts } = useStakeAccounts()
const borrowBank = useMemo(() => {
return group?.banksMapByMint.get(BORROW_TOKEN)?.[0]
}, [group])
const banks = useMemo(() => { const banks = useMemo(() => {
if (!group) return [] if (!group) return []
const positionBanks = [] const positionBanks = []
@ -41,20 +52,22 @@ const Positions = ({
for (const bank of banks) { for (const bank of banks) {
if (!bank) continue if (!bank) continue
const acct = stakeAccounts.find((acc) => acc.getTokenBalanceUi(bank) > 0) const acct = stakeAccounts.find((acc) => acc.getTokenBalanceUi(bank) > 0)
const balance = acct ? acct.getTokenBalanceUi(bank) : 0 const stakeBalance = acct ? acct.getTokenBalanceUi(bank) : 0
positions.push({ balance, bank }) const borrowBalance =
acct && borrowBank ? acct.getTokenBalanceUi(borrowBank) : 0
positions.push({ borrowBalance, stakeBalance, bank })
} }
const sortedPositions = positions.sort((a, b) => b.balance - a.balance) const sortedPositions = positions.sort(
(a, b) => b.stakeBalance - a.stakeBalance,
)
return showInactivePositions return showInactivePositions
? sortedPositions ? sortedPositions
: sortedPositions.filter((pos) => pos.balance > 0) : sortedPositions.filter((pos) => pos.stakeBalance > 0)
}, [banks, showInactivePositions, stakeAccounts]) }, [banks, showInactivePositions, stakeAccounts])
console.log('positions', positions)
const numberOfPositions = useMemo(() => { const numberOfPositions = useMemo(() => {
if (!positions.length) return 0 if (!positions.length) return 0
return positions.filter((pos) => pos.balance > 0).length return positions.filter((pos) => pos.stakeBalance > 0).length
}, [positions]) }, [positions])
const handleAddOrManagePosition = (token: string) => { const handleAddOrManagePosition = (token: string) => {
@ -79,11 +92,11 @@ const Positions = ({
</div> </div>
<div className="grid grid-cols-1 gap-6 sm:grid-cols-2"> <div className="grid grid-cols-1 gap-6 sm:grid-cols-2">
{positions.map((position, i) => { {positions.map((position, i) => {
const { balance, bank } = position const { stakeBalance, borrowBalance, bank } = position
return bank ? ( return bank ? (
<div <div
className="rounded-2xl border border-th-fgd-1 p-6" className="rounded-2xl border border-th-fgd-1 p-6"
key={i + balance} key={i + stakeBalance}
> >
<div className="mb-6 flex flex-col border-b border-th-bkg-4 pb-6 md:flex-row md:items-center md:justify-between"> <div className="mb-6 flex flex-col border-b border-th-bkg-4 pb-6 md:flex-row md:items-center md:justify-between">
<div className="mb-4 flex items-center space-x-3 md:mb-0"> <div className="mb-4 flex items-center space-x-3 md:mb-0">
@ -92,10 +105,10 @@ const Positions = ({
<h3>{formatTokenSymbol(bank.name)}</h3> <h3>{formatTokenSymbol(bank.name)}</h3>
<span <span
className={`text-sm ${ className={`text-sm ${
balance ? 'text-th-fgd-1' : 'text-th-fgd-4' stakeBalance ? 'text-th-fgd-1' : 'text-th-fgd-4'
}`} }`}
> >
{balance ? 'Opened 2 weeks ago' : 'No Position'} {stakeBalance ? 'Opened 2 weeks ago' : 'No Position'}
</span> </span>
</div> </div>
</div> </div>
@ -103,14 +116,14 @@ const Positions = ({
onClick={() => handleAddOrManagePosition(bank.name)} onClick={() => handleAddOrManagePosition(bank.name)}
secondary secondary
> >
{balance ? 'Manage' : 'Add Position'} {stakeBalance ? 'Manage' : 'Add Position'}
</Button> </Button>
</div> </div>
<div className="grid grid-cols-2 gap-4"> <div className="grid grid-cols-2 gap-4">
<div> <div>
<p className="mb-1">Position Size</p> <p className="mb-1">Position Size</p>
<span className="text-xl font-bold"> <span className="text-xl font-bold">
<FormatNumericValue value={balance} decimals={6} />{' '} <FormatNumericValue value={stakeBalance} decimals={6} />{' '}
{formatTokenSymbol(bank.name)} {formatTokenSymbol(bank.name)}
</span> </span>
</div> </div>
@ -131,19 +144,17 @@ const Positions = ({
<div> <div>
<p className="mb-1">Leverage</p> <p className="mb-1">Leverage</p>
<span className="text-xl font-bold"> <span className="text-xl font-bold">
{balance ? '3x' : '0x'} {getLeverage(stakeBalance, borrowBalance)}x
</span> </span>
</div> </div>
<div> <div>
<p className="mb-1">Earned</p> <p className="mb-1">Earned</p>
<span className="text-xl font-bold"> <span className="text-xl font-bold">0 {bank.name}</span>
{balance ? '3.321 SOL' : '0 SOL'}
</span>
</div> </div>
<div> <div>
<p className="mb-1">Liquidation Price</p> <p className="mb-1">Liquidation Price</p>
<span className="whitespace-nowrap text-xl font-bold"> <span className="whitespace-nowrap text-xl font-bold">
{balance ? '1.234' : '0'}{' '} {stakeBalance ? '1.234' : '0'}{' '}
{`${formatTokenSymbol(bank.name)}/SOL`} {`${formatTokenSymbol(bank.name)}/SOL`}
</span> </span>
</div> </div>