state/user/hooks#useUserPoolStakedOnly TypeScript Examples
The following examples show how to use
state/user/hooks#useUserPoolStakedOnly.
You can vote up the ones you like or vote down the ones you don't like,
and go to the original project or source file by following the links above each example. You may check out the related API usage on the sidebar.
Example #1
Source File: MyMines.tsx From vvs-ui with GNU General Public License v3.0 | 5 votes |
MyMines = () => {
const { account } = useWeb3React()
const { pools: poolsWithoutAutoVault, userDataLoaded } = usePools()
const [stakedOnly, setStakedOnly] = useUserPoolStakedOnly()
const {
userData: { vvsAtLastUserAction, userShares },
fees: { performanceFee },
pricePerFullShare,
totalVvsInVault,
} = useVvsVault()
const accountHasVaultShares = userShares && userShares.gt(0)
const pools = useMemo(() => {
const vvsPool = poolsWithoutAutoVault.find((pool) => pool.sousId === 0)
const vvsAutoVault = { ...vvsPool, isAutoVault: true }
return [vvsAutoVault, ...poolsWithoutAutoVault]
}, [poolsWithoutAutoVault])
// TODO aren't arrays in dep array checked just by reference, i.e. it will rerender every time reference changes?
const [finishedPools, openPools] = useMemo(() => partition(pools, (pool) => pool.isFinished), [pools])
const stakedOnlyOpenPools = useMemo(
() =>
openPools.filter((pool) => {
if (pool.isAutoVault) {
return accountHasVaultShares
}
return pool.userData && new BigNumber(pool.userData.stakedBalance).isGreaterThan(0)
}),
[openPools, accountHasVaultShares],
)
usePollFarmsPublicData()
useFetchPublicPoolsData()
useFetchUserPools(account)
const chosenPools = stakedOnly ? stakedOnlyOpenPools : openPools
return (
<div>
<CardLayout>
{chosenPools.map((pool) =>
pool.isAutoVault ? (
<VvsVaultCard key="auto-vvs" pool={pool} showStakedOnly={stakedOnly} />
) : (
// eslint-disable-next-line react/jsx-no-undef
<PoolCard key={pool.sousId} pool={pool} account={account} />
),
)}
</CardLayout>
</div>
)
}
Example #2
Source File: index.tsx From vvs-ui with GNU General Public License v3.0 | 4 votes |
Pools: React.FC = () => {
const location = useLocation()
const { t } = useTranslation()
const { account } = useWeb3React()
const { pools: poolsWithoutAutoVault, userDataLoaded } = usePools()
const [stakedOnly, setStakedOnly] = useUserPoolStakedOnly()
const [viewMode, setViewMode] = useUserPoolsViewMode()
const [numberOfPoolsVisible, setNumberOfPoolsVisible] = useState(NUMBER_OF_POOLS_VISIBLE)
const { observerRef, isIntersecting } = useIntersectionObserver()
const [searchQuery, setSearchQuery] = useState('')
const [sortOption, setSortOption] = useState('hot')
const chosenPoolsLength = useRef(0)
const {
userData: { vvsAtLastUserAction, userShares },
fees: { performanceFee },
pricePerFullShare,
totalVvsInVault,
} = useVvsVault()
const accountHasVaultShares = userShares && userShares.gt(0)
const performanceFeeAsDecimal = performanceFee && performanceFee / 100
const pools = useMemo(() => {
const vvsPool = poolsWithoutAutoVault.find((pool) => pool.sousId === 0)
const vvsAutoVault = { ...vvsPool, isAutoVault: true }
return [vvsAutoVault, ...poolsWithoutAutoVault]
}, [poolsWithoutAutoVault])
// TODO aren't arrays in dep array checked just by reference, i.e. it will rerender every time reference changes?
const [finishedPools, openPools] = useMemo(() => partition(pools, (pool) => pool.isFinished), [pools])
const stakedOnlyFinishedPools = useMemo(
() =>
finishedPools.filter((pool) => {
if (pool.isAutoVault) {
return accountHasVaultShares
}
return pool.userData && new BigNumber(pool.userData.stakedBalance).isGreaterThan(0)
}),
[finishedPools, accountHasVaultShares],
)
const stakedOnlyOpenPools = useMemo(
() =>
openPools.filter((pool) => {
if (pool.isAutoVault) {
return accountHasVaultShares
}
return pool.userData && new BigNumber(pool.userData.stakedBalance).isGreaterThan(0)
}),
[openPools, accountHasVaultShares],
)
const hasStakeInFinishedPools = stakedOnlyFinishedPools.length > 0
usePollFarmsPublicData()
useFetchVvsVault()
useFetchPublicPoolsData()
useFetchUserPools(account)
useEffect(() => {
if (isIntersecting) {
setNumberOfPoolsVisible((poolsCurrentlyVisible) => {
if (poolsCurrentlyVisible <= chosenPoolsLength.current) {
return poolsCurrentlyVisible + NUMBER_OF_POOLS_VISIBLE
}
return poolsCurrentlyVisible
})
}
}, [isIntersecting])
const showFinishedPools = location.pathname.includes('history')
const handleChangeSearchQuery = (event: React.ChangeEvent<HTMLInputElement>) => {
setSearchQuery(event.target.value)
}
const handleSortOptionChange = (option: OptionProps): void => {
setSortOption(option.value)
}
const sortPools = (poolsToSort: DeserializedPool[]) => {
switch (sortOption) {
case 'apr':
// Ternary is needed to prevent pools without APR (like MIX) getting top spot
return orderBy(
poolsToSort,
(pool: DeserializedPool) => (pool.apr ? getAprData(pool, performanceFeeAsDecimal).apr : 0),
'desc',
)
case 'earned':
return orderBy(
poolsToSort,
(pool: DeserializedPool) => {
if (!pool.userData || !pool.earningTokenPrice) {
return 0
}
return pool.isAutoVault
? getVvsVaultEarnings(
account,
vvsAtLastUserAction,
userShares,
pricePerFullShare,
pool.earningTokenPrice,
).autoUsdToDisplay
: pool.userData.pendingReward.times(pool.earningTokenPrice).toNumber()
},
'desc',
)
case 'totalStaked':
return orderBy(
poolsToSort,
(pool: DeserializedPool) => {
let totalStaked = Number.NaN
if (pool.isAutoVault) {
if (totalVvsInVault.isFinite()) {
totalStaked = +formatUnits(
ethers.BigNumber.from(totalVvsInVault.toString()),
pool.stakingToken.decimals,
)
}
} else if (pool.sousId === 0) {
if (pool.totalStaked?.isFinite() && totalVvsInVault.isFinite()) {
const manualVvsTotalMinusAutoVault = ethers.BigNumber.from(pool.totalStaked.toString()).sub(
totalVvsInVault.toString(),
)
totalStaked = +formatUnits(manualVvsTotalMinusAutoVault, pool.stakingToken.decimals)
}
} else if (pool.totalStaked?.isFinite()) {
totalStaked = +formatUnits(ethers.BigNumber.from(pool.totalStaked.toString()), pool.stakingToken.decimals)
}
return Number.isFinite(totalStaked) ? totalStaked : 0
},
'desc',
)
default:
return poolsToSort
}
}
let chosenPools
if (showFinishedPools) {
chosenPools = stakedOnly ? stakedOnlyFinishedPools : finishedPools
} else {
chosenPools = stakedOnly ? stakedOnlyOpenPools : openPools
}
if (searchQuery) {
const lowercaseQuery = latinise(searchQuery.toLowerCase())
chosenPools = chosenPools.filter((pool) =>
latinise(pool.earningToken.symbol.toLowerCase()).includes(lowercaseQuery),
)
}
chosenPools = sortPools(chosenPools).slice(0, numberOfPoolsVisible)
chosenPoolsLength.current = chosenPools.length
const cardLayout = (
<CardLayout>
{chosenPools.map((pool) =>
pool.isAutoVault ? (
<VvsVaultCard key="auto-vvs" pool={pool} showStakedOnly={stakedOnly} />
) : (
<PoolCard key={pool.sousId} pool={pool} account={account} />
),
)}
</CardLayout>
)
const tableLayout = <PoolsTable pools={chosenPools} account={account} userDataLoaded={userDataLoaded} />
return (
<>
<StyledPageHeader>
<MineBackgroundWrapper>
<MineBackground />
</MineBackgroundWrapper>
<Flex
style={{ position: 'relative' }}
justifyContent="space-between"
flexDirection={['column', null, null, 'row']}
>
<Flex flex="1" flexDirection="column" mr={['8px', 0]}>
<StyledHeading as="h1" scale="xxl" mb="24px" weight={500}>
{t('Glitter Mines')}
</StyledHeading>
<StyledHeading scale="md">{t('Carts full of bling bling')}</StyledHeading>
<StyledHeading scale="md" mb="36px" mt="14px">
{t('Stake VVS for more VVS')}
</StyledHeading>
</Flex>
{/* <Flex flex="1" height="fit-content" justifyContent="center" alignItems="center" mt={['24px', null, '0']}>
<HelpButton />
<BountyCard />
</Flex> */}
</Flex>
{/* <PoolControls>
<PoolTabButtons
stakedOnly={stakedOnly}
setStakedOnly={setStakedOnly}
hasStakeInFinishedPools={hasStakeInFinishedPools}
viewMode={viewMode}
setViewMode={setViewMode}
/>
<FilterContainer>
<LabelWrapper>
<ControlStretch>
<Select
options={[
{
label: t('Hot'),
value: 'hot',
},
{
label: t('APR'),
value: 'apr',
},
{
label: t('Earned'),
value: 'earned',
},
{
label: t('Total staked'),
value: 'totalStaked',
},
]}
onOptionChange={handleSortOptionChange}
/>
</ControlStretch>
</LabelWrapper>
<LabelWrapper style={{ marginLeft: 16 }}>
<SearchInput onChange={handleChangeSearchQuery} placeholder="Search Pools" />
</LabelWrapper>
</FilterContainer>
</PoolControls> */}
</StyledPageHeader>
<Page style={{ marginTop: '-90px', position: 'relative' }}>
{showFinishedPools && (
<Text fontSize="20px" color="failure" pb="32px">
{t('These pools are no longer distributing rewards. Please unstake your tokens.')}
</Text>
)}
{account && !userDataLoaded && stakedOnly && (
<Flex justifyContent="center" mb="4px">
<Loading />
</Flex>
)}
{viewMode === ViewMode.CARD ? cardLayout : tableLayout}
<div ref={observerRef} />
{/* <Image
mx="auto"
mt="12px"
src="/images/decorations/3d-syrup-bunnies.png"
alt="VVS illustration"
width={192}
height={184.5}
/> */}
</Page>
</>
)
}