add lev
This commit is contained in:
parent
fae948ca3c
commit
ef911a47b5
|
@ -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>
|
||||||
|
|
Loading…
Reference in New Issue