mars-v2-frontend/src/components/Select/Option.tsx
Bob van der Helm 697e83b7cb
Mp depostied vaults table (#271)
* added correct resolving of account positions

* solve rendering bug for lp amount

* bugfix: add slippage to minlpamount

* fix DisplayCurrency to accept only BNCoin

* bugfix: remove prices from store

* add basic depostied vaults table

* Farm: Added deposited table

* finish deposited table, remove featured vaults:
2023-06-29 12:55:47 +02:00

110 lines
3.2 KiB
TypeScript

import classNames from 'classnames'
import DisplayCurrency from 'components/DisplayCurrency'
import { ChevronDown } from 'components/Icons'
import Text from 'components/Text'
import { ASSETS } from 'constants/assets'
import { formatValue } from 'utils/formatters'
import AssetImage from 'components/AssetImage'
import { BNCoin } from 'types/classes/BNCoin'
interface Props extends Option {
isSelected?: boolean
isDisplay?: boolean
isClicked?: boolean
onClick?: (value: string) => void
}
export default function Option(props: Props) {
const isCoin = !!props.denom
if (isCoin) {
const asset = ASSETS.find((asset) => asset.denom === props.denom) || ASSETS[0]
const balance = props.amount ?? '0'
if (props.isDisplay) {
return (
<div
className={classNames('flex items-center gap-2 bg-white/10 p-3', 'hover:cursor-pointer')}
>
<AssetImage asset={asset} size={20} />
<span>{asset.symbol}</span>
<span
className={classNames(
'inline-block w-2.5 transition-transform',
props.isClicked ? 'rotate-0' : '-rotate-90',
)}
>
<ChevronDown />
</span>
</div>
)
}
return (
<div
data-testid='option-component'
className={classNames(
'grid grid-flow-row grid-cols-5 grid-rows-2 py-3.5 pr-4',
'border-b border-b-white/20 last:border-none',
'hover:cursor-pointer hover:bg-white/20',
!props.isSelected ? 'bg-white/10' : 'pointer-events-none',
)}
onClick={() => props?.onClick && props.onClick(asset.denom)}
>
<div className='row-span-2 flex h-full items-center justify-center'>
<AssetImage asset={asset} size={32} />
</div>
<Text className='col-span-2 pb-1'>{asset.symbol}</Text>
<Text size='sm' className='col-span-2 pb-1 text-right font-bold'>
{formatValue(balance, {
decimals: asset.decimals,
maxDecimals: 4,
minDecimals: 0,
rounded: true,
})}
</Text>
<Text size='sm' className='col-span-2 text-white/50'>
{formatValue(5, { maxDecimals: 2, minDecimals: 0, prefix: 'APY ', suffix: '%' })}
</Text>
<Text size='sm' className='col-span-2 text-right text-white/50'>
<DisplayCurrency coin={new BNCoin({ denom: asset.denom, amount: balance })} />
</Text>
</div>
)
}
const label = props.label
if (props.isDisplay) {
return (
<div
className={classNames(
'flex w-full items-center justify-between bg-white/10 p-3 hover:cursor-pointer',
)}
>
<span>{label}</span>
<span
className={classNames(
'inline-block w-2.5 transition-transform',
props.isClicked ? 'rotate-0' : '-rotate-90',
)}
>
<ChevronDown />
</span>
</div>
)
}
return (
<div
className={classNames(
'block p-3 hover:cursor-pointer hover:bg-white/20',
props.isSelected && 'bg-white/10',
)}
onClick={() => props?.onClick && props.onClick(props.value)}
>
{label}
</div>
)
}