react-feather#ChevronUp TypeScript Examples
The following examples show how to use
react-feather#ChevronUp.
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: SelectHeader.tsx From yet-another-generic-startpage with MIT License | 5 votes |
SelectHeader = ({ label, open }: SelectHeaderProps) => (
<HeaderButton open={open}>
<HeaderText>{label}</HeaderText>
{open ? <ChevronUp /> : <ChevronDown />}
</HeaderButton>
)
Example #2
Source File: ReavealButton.tsx From calories-in with MIT License | 5 votes |
ChevronUpStyled = chakra(ChevronUp)
Example #3
Source File: Dropdown.tsx From sybil-interface with GNU General Public License v3.0 | 5 votes |
export default function Dropdown() {
const [activeProtocol] = useActiveProtocol()
const [open, setOpen] = useState(false)
const ref = useRef(null)
useOnClickOutside(ref, () => setOpen(false))
const options = useMemo(() => {
return activeProtocol
? Object.keys(SUPPORTED_PROTOCOLS)
.filter((k) => SUPPORTED_PROTOCOLS[k].name !== activeProtocol.name)
.map((k, i) => (
<Option
key={i}
backgroundColor={SUPPORTED_PROTOCOLS[k].secondaryColor}
to={`/delegates/${SUPPORTED_PROTOCOLS[k].id}`}
>
<RowBetween>
<RowFixed style={{ gap: '16px' }}>
<WrappedListLogo src={SUPPORTED_PROTOCOLS[k]?.logo} />
<ResponsiveText color={SUPPORTED_PROTOCOLS[k]?.primaryColor}>
{SUPPORTED_PROTOCOLS[k].name}
</ResponsiveText>
</RowFixed>
</RowBetween>
</Option>
))
: []
}, [activeProtocol])
return (
<Wrapper backgroundColor={activeProtocol?.secondaryColor} onClick={() => setOpen(!open)} open={open} ref={ref}>
<RowBetween>
<RowFixed style={{ gap: '16px' }}>
<WrappedListLogo src={activeProtocol?.logo} />
<ResponsiveText color={activeProtocol?.primaryColor}>{activeProtocol?.name}</ResponsiveText>
</RowFixed>
{open ? (
<ChevronUp stroke={activeProtocol?.primaryColor} />
) : (
<ChevronDown stroke={activeProtocol?.primaryColor} />
)}
</RowBetween>
{open && activeProtocol && <Flyout options={options.length}>{options}</Flyout>}
</Wrapper>
)
}
Example #4
Source File: CardFooter.tsx From frontend-ui with GNU General Public License v3.0 | 5 votes |
CardFooter: React.FC<Props> = ({
projectLink,
totalStaked,
tokenName,
blocksRemaining,
isFinished,
blocksUntilStart,
poolCategory,
}) => {
const [isOpen, setIsOpen] = useState(false)
const TranslateString = useI18n()
const Icon = isOpen ? ChevronUp : ChevronDown
const handleClick = () => setIsOpen(!isOpen)
const Tag = tags[poolCategory]
return (
<StyledFooter isFinished={isFinished}>
<Row>
<FlexFull>
<Tag />
</FlexFull>
<StyledDetailsButton onClick={handleClick}>
{isOpen ? 'Hide' : 'Details'} <Icon />
</StyledDetailsButton>
</Row>
{isOpen && (
<Details>
<Row style={{ marginBottom: '4px' }}>
<FlexFull>
<Label>
<span role="img" aria-label="pasta">
{' '}
</span>
{TranslateString(408, 'Total Stake of')} {tokenName}:
</Label>
</FlexFull>
<Balance fontSize="14px" isDisabled={isFinished} value={getBalanceNumber(totalStaked)} />
</Row>
{blocksUntilStart > 0 && (
<Row>
<FlexFull>
<Label>{TranslateString(410, 'Start')}:</Label>
</FlexFull>
<Balance fontSize="14px" isDisabled={isFinished} value={blocksUntilStart} decimals={0} />
</Row>
)}
{blocksUntilStart === 0 && blocksRemaining > 0 && (
<Row>
<FlexFull>
<Label>{TranslateString(410, 'End Block of Stake')}:</Label>
</FlexFull>
<Balance fontSize="14px" isDisabled={isFinished} value={blocksRemaining} decimals={0} />
</Row>
)}
<TokenLink href={projectLink} target="_blank">
{TranslateString(412, 'View project site')}
</TokenLink>
</Details>
)}
</StyledFooter>
)
}
Example #5
Source File: index.tsx From pancakeswap-testnet with GNU General Public License v3.0 | 4 votes |
export default function FullPositionCard({ pair }: PositionCardProps) {
const { account } = useActiveWeb3React()
const currency0 = unwrappedToken(pair.token0)
const currency1 = unwrappedToken(pair.token1)
const [showMore, setShowMore] = useState(false)
const userPoolBalance = useTokenBalance(account ?? undefined, pair.liquidityToken)
const totalPoolTokens = useTotalSupply(pair.liquidityToken)
const poolTokenPercentage =
!!userPoolBalance && !!totalPoolTokens && JSBI.greaterThanOrEqual(totalPoolTokens.raw, userPoolBalance.raw)
? new Percent(userPoolBalance.raw, totalPoolTokens.raw)
: undefined
const [token0Deposited, token1Deposited] =
!!pair &&
!!totalPoolTokens &&
!!userPoolBalance &&
// this condition is a short-circuit in the case where useTokenBalance updates sooner than useTotalSupply
JSBI.greaterThanOrEqual(totalPoolTokens.raw, userPoolBalance.raw)
? [
pair.getLiquidityValue(pair.token0, totalPoolTokens, userPoolBalance, false),
pair.getLiquidityValue(pair.token1, totalPoolTokens, userPoolBalance, false),
]
: [undefined, undefined]
return (
<HoverCard>
<AutoColumn gap="12px">
<FixedHeightRow onClick={() => setShowMore(!showMore)} style={{ cursor: 'pointer' }}>
<RowFixed>
<DoubleCurrencyLogo currency0={currency0} currency1={currency1} margin size={20} />
<Text>{!currency0 || !currency1 ? <Dots>Loading</Dots> : `${currency0.symbol}/${currency1.symbol}`}</Text>
</RowFixed>
<RowFixed>
{showMore ? (
<ChevronUp size="20" style={{ marginLeft: '10px' }} />
) : (
<ChevronDown size="20" style={{ marginLeft: '10px' }} />
)}
</RowFixed>
</FixedHeightRow>
{showMore && (
<AutoColumn gap="8px">
<FixedHeightRow>
<RowFixed>
<Text>Pooled {currency0.symbol}:</Text>
</RowFixed>
{token0Deposited ? (
<RowFixed>
<Text ml="6px">{token0Deposited?.toSignificant(6)}</Text>
<CurrencyLogo size="20px" style={{ marginLeft: '8px' }} currency={currency0} />
</RowFixed>
) : (
'-'
)}
</FixedHeightRow>
<FixedHeightRow>
<RowFixed>
<Text>Pooled {currency1.symbol}:</Text>
</RowFixed>
{token1Deposited ? (
<RowFixed>
<Text ml="6px">{token1Deposited?.toSignificant(6)}</Text>
<CurrencyLogo size="20px" style={{ marginLeft: '8px' }} currency={currency1} />
</RowFixed>
) : (
'-'
)}
</FixedHeightRow>
<FixedHeightRow>
<Text>Your pool tokens:</Text>
<Text>{userPoolBalance ? userPoolBalance.toSignificant(4) : '-'}</Text>
</FixedHeightRow>
<FixedHeightRow>
<Text>Your pool share:</Text>
<Text>{poolTokenPercentage ? `${poolTokenPercentage.toFixed(2)}%` : '-'}</Text>
</FixedHeightRow>
<RowBetween marginTop="10px">
<Button as={Link} to={`/add/${currencyId(currency0)}/${currencyId(currency1)}`} style={{ width: '48%' }}>
Add
</Button>
<Button
as={Link}
style={{ width: '48%' }}
to={`/remove/${currencyId(currency0)}/${currencyId(currency1)}`}
>
Remove
</Button>
</RowBetween>
</AutoColumn>
)}
</AutoColumn>
</HoverCard>
)
}
Example #6
Source File: index.tsx From cuiswap with GNU General Public License v3.0 | 4 votes |
export default function FullPositionCard({ pair, border }: PositionCardProps) {
const { account } = useActiveWeb3React()
const currency0 = unwrappedToken(pair.token0)
const currency1 = unwrappedToken(pair.token1)
const [showMore, setShowMore] = useState(false)
const userPoolBalance = useTokenBalance(account, pair.liquidityToken)
const totalPoolTokens = useTotalSupply(pair.liquidityToken)
const poolTokenPercentage =
!!userPoolBalance && !!totalPoolTokens && JSBI.greaterThanOrEqual(totalPoolTokens.raw, userPoolBalance.raw)
? new Percent(userPoolBalance.raw, totalPoolTokens.raw)
: undefined
const [token0Deposited, token1Deposited] =
!!pair &&
!!totalPoolTokens &&
!!userPoolBalance &&
// this condition is a short-circuit in the case where useTokenBalance updates sooner than useTotalSupply
JSBI.greaterThanOrEqual(totalPoolTokens.raw, userPoolBalance.raw)
? [
pair.getLiquidityValue(pair.token0, totalPoolTokens, userPoolBalance, false),
pair.getLiquidityValue(pair.token1, totalPoolTokens, userPoolBalance, false)
]
: [undefined, undefined]
return (
<HoverCard border={border}>
<AutoColumn gap="12px">
<FixedHeightRow onClick={() => setShowMore(!showMore)} style={{ cursor: 'pointer' }}>
<RowFixed>
<DoubleCurrencyLogo currency0={currency0} currency1={currency1} margin={true} size={20} />
<Text fontWeight={500} fontSize={20}>
{!currency0 || !currency1 ? <Dots>Loading</Dots> : `${currency0.symbol}/${currency1.symbol}`}
</Text>
</RowFixed>
<RowFixed>
{showMore ? (
<ChevronUp size="20" style={{ marginLeft: '10px' }} />
) : (
<ChevronDown size="20" style={{ marginLeft: '10px' }} />
)}
</RowFixed>
</FixedHeightRow>
{showMore && (
<AutoColumn gap="8px">
<FixedHeightRow>
<RowFixed>
<Text fontSize={16} fontWeight={500}>
Pooled {currency0.symbol}:
</Text>
</RowFixed>
{token0Deposited ? (
<RowFixed>
<Text fontSize={16} fontWeight={500} marginLeft={'6px'}>
{token0Deposited?.toSignificant(6)}
</Text>
<CurrencyLogo size="20px" style={{ marginLeft: '8px' }} currency={currency0} />
</RowFixed>
) : (
'-'
)}
</FixedHeightRow>
<FixedHeightRow>
<RowFixed>
<Text fontSize={16} fontWeight={500}>
Pooled {currency1.symbol}:
</Text>
</RowFixed>
{token1Deposited ? (
<RowFixed>
<Text fontSize={16} fontWeight={500} marginLeft={'6px'}>
{token1Deposited?.toSignificant(6)}
</Text>
<CurrencyLogo size="20px" style={{ marginLeft: '8px' }} currency={currency1} />
</RowFixed>
) : (
'-'
)}
</FixedHeightRow>
<FixedHeightRow>
<Text fontSize={16} fontWeight={500}>
Your pool tokens:
</Text>
<Text fontSize={16} fontWeight={500}>
{userPoolBalance ? userPoolBalance.toSignificant(4) : '-'}
</Text>
</FixedHeightRow>
<FixedHeightRow>
<Text fontSize={16} fontWeight={500}>
Your pool share:
</Text>
<Text fontSize={16} fontWeight={500}>
{poolTokenPercentage ? poolTokenPercentage.toFixed(2) + '%' : '-'}
</Text>
</FixedHeightRow>
<AutoRow justify="center" marginTop={'10px'}>
<ExternalLink href={`https://uniswap.info/pair/${pair.liquidityToken.address}`}>
View pool information ↗
</ExternalLink>
</AutoRow>
<RowBetween marginTop="10px">
<ButtonSecondary as={Link} to={`/add/${currencyId(currency0)}/${currencyId(currency1)}`} width="48%">
Add
</ButtonSecondary>
<ButtonSecondary as={Link} width="48%" to={`/remove/${currencyId(currency0)}/${currencyId(currency1)}`}>
Remove
</ButtonSecondary>
</RowBetween>
</AutoColumn>
)}
</AutoColumn>
</HoverCard>
)
}
Example #7
Source File: index.tsx From luaswap-interface with GNU General Public License v3.0 | 4 votes |
export default function FullPositionCard({ pair, border, farm }: PositionCardProps) {
const { chainId, account } = useActiveWeb3React()
const IsTomo = IsTomoChain(chainId)
const ID = IsTomo ? 88 : 1
const currency0 = unwrappedToken(pair.token0)
const currency1 = unwrappedToken(pair.token1)
const [showMore, setShowMore] = useState(false)
// total user lp balance (include staked and available)
const userPoolBalance = useTokenBalance(account ?? undefined, pair.liquidityToken)
const userFarmBalance = new TokenAmount(pair.liquidityToken, farm ? farm.userStaked : '0')
const totalUserBalance = userPoolBalance?.add(userFarmBalance)
// total user pool share (include staked and available)
const totalPoolTokens = useTotalSupply(pair.liquidityToken)
const poolTokenPercentage =
!!totalUserBalance && !!totalPoolTokens && JSBI.greaterThanOrEqual(totalPoolTokens.raw, totalUserBalance.raw)
? new Percent(totalUserBalance.raw, totalPoolTokens.raw)
: undefined
// user farming pool share
const totalFarmingTokens = new TokenAmount(pair.liquidityToken, farm ? farm.totalStaked : '0')
const farmingTokenPercentage =
!!userFarmBalance && !!totalFarmingTokens && totalFarmingTokens.toSignificant(1) !== '0'
? new Percent(userFarmBalance.raw, totalFarmingTokens.raw)
: undefined
// total user token deposited (include staked and available)
const [token0Deposited, token1Deposited] =
!!pair &&
!!totalPoolTokens &&
!!totalUserBalance &&
// this condition is a short-circuit in the case where useTokenBalance updates sooner than useTotalSupply
JSBI.greaterThanOrEqual(totalPoolTokens.raw, totalUserBalance.raw)
? [
pair.getLiquidityValue(pair.token0, totalPoolTokens, totalUserBalance, false),
pair.getLiquidityValue(pair.token1, totalPoolTokens, totalUserBalance, false)
]
: [undefined, undefined]
// user pending reward
const LUA = IsTomo
? new Token(ChainId.MAINNET, '0xB1f66997A5760428D3a87D68b90BfE0aE64121cC', 18, 'LUA', 'LUA')
: new Token(ChainId.TOMOCHAIN_MAINNET, '0x7262fa193e9590B2E075c3C16170f3f2f32F5C74', 18, 'LUA', 'LUA')
const pendingReward = new TokenAmount(LUA, farm ? farm.pendingReward : '0')
const backgroundColor = useColor(pair?.token0)
// stake, unstake, harvest
const farmingContract = useFarmingContract()
const [harvest, setHarvest] = useState(false)
const harvestReward = async () => {
if (!farmingContract || !farm || harvest) return
setHarvest(true)
try {
await farmingContract.claimReward(farm.pid)
setHarvest(false)
} catch (e) {
setHarvest(false)
}
}
const [symbolLiquidityToken, setSymbolLiquidityToken] = useState('')
//@ts-ignore
const farmPools = window.pools
useEffect(() => {
if (farm) {
setSymbolLiquidityToken(farm.symbol)
} else {
for (let i = 0; i < farmPools.length; i++) {
if (pair.liquidityToken.address.toLowerCase() === farmPools[i].lpAddresses[ID].toLowerCase()) {
setSymbolLiquidityToken(farmPools[i].symbol)
}
}
}
}, [ID, farmPools])
return (
<StyledPositionCard border={border} bgColor={backgroundColor}>
<CardNoise />
<AutoColumn gap="12px">
<FixedHeightRow>
<RowFixed>
<DoubleCurrencyLogo currency0={currency0} currency1={currency1} margin={true} size={20} />
<Text fontWeight={500} fontSize={20}>
{!currency0 || !currency1 ? <Dots>Loading</Dots> : `${currency0.symbol}/${currency1.symbol}`}
</Text>
</RowFixed>
<RowFixed gap="8px">
<ButtonEmpty
padding="6px 8px"
borderRadius="12px"
width="fit-content"
onClick={() => setShowMore(!showMore)}
>
{showMore ? (
<>
{' '}
Manage
<ChevronUp size="20" style={{ marginLeft: '10px' }} />
</>
) : (
<>
Manage
<ChevronDown size="20" style={{ marginLeft: '10px' }} />
</>
)}
</ButtonEmpty>
</RowFixed>
</FixedHeightRow>
{showMore && (
<AutoColumn gap="8px">
<FixedHeightRow>
<Text fontSize={16} fontWeight={500}>
Your total pool tokens:
</Text>
<Text fontSize={16} fontWeight={500}>
{totalUserBalance ? new BigNumber(totalUserBalance.toFixed(6)).toFormat() : '-'}
</Text>
</FixedHeightRow>
<FixedHeightRow>
<RowFixed>
<Text fontSize={16} fontWeight={500}>
Pooled {currency0.symbol}:
</Text>
</RowFixed>
{token0Deposited ? (
<RowFixed>
<Text fontSize={16} fontWeight={500} marginLeft={'6px'}>
{new BigNumber(token0Deposited?.toFixed(6)).toFormat()}
</Text>
<CurrencyLogo size="20px" style={{ marginLeft: '8px' }} currency={currency0} />
</RowFixed>
) : (
'-'
)}
</FixedHeightRow>
<FixedHeightRow>
<RowFixed>
<Text fontSize={16} fontWeight={500}>
Pooled {currency1.symbol}:
</Text>
</RowFixed>
{token1Deposited ? (
<RowFixed>
<Text fontSize={16} fontWeight={500} marginLeft={'6px'}>
{new BigNumber(token1Deposited?.toFixed(6)).toFormat()}
</Text>
<CurrencyLogo size="20px" style={{ marginLeft: '8px' }} currency={currency1} />
</RowFixed>
) : (
'-'
)}
</FixedHeightRow>
<FixedHeightRow>
<Text fontSize={16} fontWeight={500}>
Your total pool share:
</Text>
<Text fontSize={16} fontWeight={500}>
{poolTokenPercentage ? new BigNumber(poolTokenPercentage.toFixed(5)).toFormat() + '%' : '-'}
</Text>
</FixedHeightRow>
<Divider />
{!IsTomo ? (
<>
<FixedHeightRow>
<RowFixed>
<Text fontSize={16} fontWeight={500}>
Farming pool tokens:
</Text>
</RowFixed>
<RowFixedValue>
<Text fontSize={16} fontWeight={500}>
{userFarmBalance ? new BigNumber(userFarmBalance.toFixed(6)).toFormat() : '-'}
</Text>
{farm && userFarmBalance?.greaterThan('0') && (
<ButtonSecondary
as={Link}
to={`/farming/${symbolLiquidityToken}`}
padding="3px 10px"
borderRadius="8px"
fontSize="12px"
width="fit-content"
>
Unstake
</ButtonSecondary>
)}
</RowFixedValue>
</FixedHeightRow>
<FixedHeightRow>
<Text fontSize={16} fontWeight={500}>
Your farming pool share:
</Text>
<RowFixedValue>
<Text fontSize={16} fontWeight={500}>
{farmingTokenPercentage ? new BigNumber(farmingTokenPercentage.toFixed(5)).toFormat() + '%' : '-'}
</Text>
</RowFixedValue>
</FixedHeightRow>
<FixedHeightRow>
<RowFixedTitle>
<Text fontSize={16} fontWeight={500}>
Available pool tokens <QuestionHelper text="Stake pool tokens to earn LUA tokens" />:
</Text>
</RowFixedTitle>
<RowFixedValue>
<Text fontSize={16} fontWeight={500}>
{userPoolBalance ? new BigNumber(userPoolBalance.toSignificant(8)).toFormat() : '-'}
</Text>
{userPoolBalance?.greaterThan(`0`) && (
<ButtonSecondary
as={Link}
to={`/farming/${symbolLiquidityToken}`}
padding="3px 10px"
fontSize="12px"
width="fit-content"
>
Stake
</ButtonSecondary>
)}
</RowFixedValue>
</FixedHeightRow>
<FixedHeightRow>
<RowFixed>
<Text fontSize={16} fontWeight={500}>
LUA reward:
</Text>
</RowFixed>
<RowFixedValue>
<Text fontSize={16} fontWeight={500}>
{pendingReward ? new BigNumber(pendingReward.toFixed(3)).toFormat() : '-'}
</Text>
<ButtonSecondary
padding="3px 10px"
borderRadius="8px"
fontSize="12px"
width="fit-content"
onClick={harvestReward}
disabled={harvest || pendingReward.equalTo('0')}
>
Harvest
</ButtonSecondary>
</RowFixedValue>
</FixedHeightRow>
<ButtonSecondary padding="8px" borderRadius="8px">
<ExternalLink
style={{ width: '100%', textAlign: 'center' }}
href={`https://info.luaswap.org/account/${account}`}
>
View accrued fees and analytics<span style={{ fontSize: '11px' }}>↗</span>
</ExternalLink>
</ButtonSecondary>
</>
) : (
''
)}
<RowBetween marginTop="10px">
<ButtonPrimary
padding="8px"
as={Link}
to={`/add/${currencyId(currency0)}/${currencyId(currency1)}`}
width="48%"
>
Add
</ButtonPrimary>
<ButtonPrimary
padding="8px"
as={Link}
width="48%"
to={`/remove/${currencyId(currency0)}/${currencyId(currency1)}`}
>
Remove
</ButtonPrimary>
</RowBetween>
</AutoColumn>
)}
</AutoColumn>
</StyledPositionCard>
)
}
Example #8
Source File: index.tsx From sushiswap-exchange with GNU General Public License v3.0 | 4 votes |
export default function FullPositionCard({ pair, border }: PositionCardProps) {
const { account } = useActiveWeb3React()
const currency0 = unwrappedToken(pair.token0)
const currency1 = unwrappedToken(pair.token1)
const [showMore, setShowMore] = useState(false)
const userPoolBalance = useTokenBalance(account ?? undefined, pair.liquidityToken)
const totalPoolTokens = useTotalSupply(pair.liquidityToken)
const poolTokenPercentage =
!!userPoolBalance && !!totalPoolTokens && JSBI.greaterThanOrEqual(totalPoolTokens.raw, userPoolBalance.raw)
? new Percent(userPoolBalance.raw, totalPoolTokens.raw)
: undefined
const [token0Deposited, token1Deposited] =
!!pair &&
!!totalPoolTokens &&
!!userPoolBalance &&
// this condition is a short-circuit in the case where useTokenBalance updates sooner than useTotalSupply
JSBI.greaterThanOrEqual(totalPoolTokens.raw, userPoolBalance.raw)
? [
pair.getLiquidityValue(pair.token0, totalPoolTokens, userPoolBalance, false),
pair.getLiquidityValue(pair.token1, totalPoolTokens, userPoolBalance, false)
]
: [undefined, undefined]
return (
<HoverCard border={border}>
<AutoColumn gap="12px">
<FixedHeightRow onClick={() => setShowMore(!showMore)} style={{ cursor: 'pointer' }}>
<RowFixed>
<DoubleCurrencyLogo currency0={currency0} currency1={currency1} margin={true} size={20} />
<Text fontWeight={500} fontSize={20}>
{!currency0 || !currency1 ? <Dots>Loading</Dots> : `${currency0.symbol}/${currency1.symbol}`}
</Text>
</RowFixed>
<RowFixed>
{showMore ? (
<ChevronUp size="20" style={{ marginLeft: '10px' }} />
) : (
<ChevronDown size="20" style={{ marginLeft: '10px' }} />
)}
</RowFixed>
</FixedHeightRow>
{showMore && (
<AutoColumn gap="8px">
<FixedHeightRow>
<RowFixed>
<Text fontSize={16} fontWeight={500}>
Pooled {currency0.symbol}:
</Text>
</RowFixed>
{token0Deposited ? (
<RowFixed>
<Text fontSize={16} fontWeight={500} marginLeft={'6px'}>
{token0Deposited?.toSignificant(6)}
</Text>
<CurrencyLogo size="20px" style={{ marginLeft: '8px' }} currency={currency0} />
</RowFixed>
) : (
'-'
)}
</FixedHeightRow>
<FixedHeightRow>
<RowFixed>
<Text fontSize={16} fontWeight={500}>
Pooled {currency1.symbol}:
</Text>
</RowFixed>
{token1Deposited ? (
<RowFixed>
<Text fontSize={16} fontWeight={500} marginLeft={'6px'}>
{token1Deposited?.toSignificant(6)}
</Text>
<CurrencyLogo size="20px" style={{ marginLeft: '8px' }} currency={currency1} />
</RowFixed>
) : (
'-'
)}
</FixedHeightRow>
<FixedHeightRow>
<Text fontSize={16} fontWeight={500}>
Your pool tokens:
</Text>
<Text fontSize={16} fontWeight={500}>
{userPoolBalance ? userPoolBalance.toSignificant(4) : '-'}
</Text>
</FixedHeightRow>
<FixedHeightRow>
<Text fontSize={16} fontWeight={500}>
Your pool share:
</Text>
<Text fontSize={16} fontWeight={500}>
{poolTokenPercentage ? poolTokenPercentage.toFixed(2) + '%' : '-'}
</Text>
</FixedHeightRow>
<AutoRow justify="center" marginTop={'10px'}>
<ExternalLink href={`https://uniswap.info/pair/${pair.liquidityToken.address}`}>
View pool information ↗
</ExternalLink>
</AutoRow>
<RowBetween marginTop="10px">
<ButtonSecondary as={Link} to={`/add/${currencyId(currency0)}/${currencyId(currency1)}`} width="48%">
Add
</ButtonSecondary>
<ButtonSecondary as={Link} width="48%" to={`/remove/${currencyId(currency0)}/${currencyId(currency1)}`}>
Remove
</ButtonSecondary>
</RowBetween>
</AutoColumn>
)}
</AutoColumn>
</HoverCard>
)
}
Example #9
Source File: index.tsx From forward.swaps with GNU General Public License v3.0 | 4 votes |
export default function FullPositionCard({ pair, border, stakedBalance }: PositionCardProps) {
const { account } = useActiveWeb3React()
const currency0 = unwrappedToken(pair.token0)
const currency1 = unwrappedToken(pair.token1)
const [showMore, setShowMore] = useState(false)
const userDefaultPoolBalance = useTokenBalance(account ?? undefined, pair.liquidityToken)
const totalPoolTokens = useTotalSupply(pair.liquidityToken)
// if staked balance balance provided, add to standard liquidity amount
const userPoolBalance = stakedBalance ? userDefaultPoolBalance?.add(stakedBalance) : userDefaultPoolBalance
const poolTokenPercentage =
!!userPoolBalance && !!totalPoolTokens && JSBI.greaterThanOrEqual(totalPoolTokens.raw, userPoolBalance.raw)
? new Percent(userPoolBalance.raw, totalPoolTokens.raw)
: undefined
const [token0Deposited, token1Deposited] =
!!pair &&
!!totalPoolTokens &&
!!userPoolBalance &&
// this condition is a short-circuit in the case where useTokenBalance updates sooner than useTotalSupply
JSBI.greaterThanOrEqual(totalPoolTokens.raw, userPoolBalance.raw)
? [
pair.getLiquidityValue(pair.token0, totalPoolTokens, userPoolBalance, false),
pair.getLiquidityValue(pair.token1, totalPoolTokens, userPoolBalance, false)
]
: [undefined, undefined]
const backgroundColor = useColor(pair?.token0)
return (
<StyledPositionCard border={border} bgColor={backgroundColor}>
<CardNoise />
<AutoColumn gap="12px">
<FixedHeightRow>
<AutoRow gap="8px">
<DoubleCurrencyLogo currency0={currency0} currency1={currency1} size={20} />
<Text fontWeight={500} fontSize={20}>
{!currency0 || !currency1 ? <Dots>Loading</Dots> : `${currency0.symbol}/${currency1.symbol}`}
</Text>
</AutoRow>
<RowFixed gap="8px">
<ButtonEmpty
padding="6px 8px"
borderRadius="12px"
width="fit-content"
onClick={() => setShowMore(!showMore)}
>
{showMore ? (
<>
Manage
<ChevronUp size="20" style={{ marginLeft: '10px' }} />
</>
) : (
<>
Manage
<ChevronDown size="20" style={{ marginLeft: '10px' }} />
</>
)}
</ButtonEmpty>
</RowFixed>
</FixedHeightRow>
{showMore && (
<AutoColumn gap="8px">
<FixedHeightRow>
<Text fontSize={16} fontWeight={500}>
Your total pool tokens:
</Text>
<Text fontSize={16} fontWeight={500}>
{userPoolBalance ? userPoolBalance.toSignificant(4) : '-'}
</Text>
</FixedHeightRow>
{stakedBalance && (
<FixedHeightRow>
<Text fontSize={16} fontWeight={500}>
Pool tokens in rewards pool:
</Text>
<Text fontSize={16} fontWeight={500}>
{stakedBalance.toSignificant(4)}
</Text>
</FixedHeightRow>
)}
<FixedHeightRow>
<RowFixed>
<Text fontSize={16} fontWeight={500}>
Pooled {currency0.symbol}:
</Text>
</RowFixed>
{token0Deposited ? (
<RowFixed>
<Text fontSize={16} fontWeight={500} marginLeft={'6px'}>
{token0Deposited?.toSignificant(6)}
</Text>
<CurrencyLogo size="20px" style={{ marginLeft: '8px' }} currency={currency0} />
</RowFixed>
) : (
'-'
)}
</FixedHeightRow>
<FixedHeightRow>
<RowFixed>
<Text fontSize={16} fontWeight={500}>
Pooled {currency1.symbol}:
</Text>
</RowFixed>
{token1Deposited ? (
<RowFixed>
<Text fontSize={16} fontWeight={500} marginLeft={'6px'}>
{token1Deposited?.toSignificant(6)}
</Text>
<CurrencyLogo size="20px" style={{ marginLeft: '8px' }} currency={currency1} />
</RowFixed>
) : (
'-'
)}
</FixedHeightRow>
<FixedHeightRow>
<Text fontSize={16} fontWeight={500}>
Your pool share:
</Text>
<Text fontSize={16} fontWeight={500}>
{poolTokenPercentage
? (poolTokenPercentage.toFixed(2) === '0.00' ? '<0.01' : poolTokenPercentage.toFixed(2)) + '%'
: '-'}
</Text>
</FixedHeightRow>
<ButtonSecondary padding="8px" borderRadius="8px">
<ExternalLink
style={{ width: '100%', textAlign: 'center' }}
href={`https://uniswap.info/account/${account}`}
>
View accrued fees and analytics<span style={{ fontSize: '11px' }}>↗</span>
</ExternalLink>
</ButtonSecondary>
{userDefaultPoolBalance && JSBI.greaterThan(userDefaultPoolBalance.raw, BIG_INT_ZERO) && (
<RowBetween marginTop="10px">
<ButtonPrimary
padding="8px"
borderRadius="8px"
as={Link}
to={`/add/${currencyId(currency0)}/${currencyId(currency1)}`}
width="48%"
>
Add
</ButtonPrimary>
<ButtonPrimary
padding="8px"
borderRadius="8px"
as={Link}
width="48%"
to={`/remove/${currencyId(currency0)}/${currencyId(currency1)}`}
>
Remove
</ButtonPrimary>
</RowBetween>
)}
{stakedBalance && JSBI.greaterThan(stakedBalance.raw, BIG_INT_ZERO) && (
<ButtonPrimary
padding="8px"
borderRadius="8px"
as={Link}
to={`/uni/${currencyId(currency0)}/${currencyId(currency1)}`}
width="100%"
>
Manage Liquidity in Rewards Pool
</ButtonPrimary>
)}
</AutoColumn>
)}
</AutoColumn>
</StyledPositionCard>
)
}
Example #10
Source File: index.tsx From panther-frontend-dex with GNU General Public License v3.0 | 4 votes |
export default function FullPositionCard({ pair }: PositionCardProps) {
const { account } = useActiveWeb3React()
const currency0 = unwrappedToken(pair.token0)
const currency1 = unwrappedToken(pair.token1)
const [showMore, setShowMore] = useState(false)
const userPoolBalance = useTokenBalance(account ?? undefined, pair.liquidityToken)
const totalPoolTokens = useTotalSupply(pair.liquidityToken)
const poolTokenPercentage =
!!userPoolBalance && !!totalPoolTokens && JSBI.greaterThanOrEqual(totalPoolTokens.raw, userPoolBalance.raw)
? new Percent(userPoolBalance.raw, totalPoolTokens.raw)
: undefined
const [token0Deposited, token1Deposited] =
!!pair &&
!!totalPoolTokens &&
!!userPoolBalance &&
// this condition is a short-circuit in the case where useTokenBalance updates sooner than useTotalSupply
JSBI.greaterThanOrEqual(totalPoolTokens.raw, userPoolBalance.raw)
? [
pair.getLiquidityValue(pair.token0, totalPoolTokens, userPoolBalance, false),
pair.getLiquidityValue(pair.token1, totalPoolTokens, userPoolBalance, false),
]
: [undefined, undefined]
return (
<HoverCard>
<AutoColumn gap="12px">
<FixedHeightRow onClick={() => setShowMore(!showMore)} style={{ cursor: 'pointer' }}>
<RowFixed>
<DoubleCurrencyLogo currency0={currency0} currency1={currency1} margin size={20} />
<Text>{!currency0 || !currency1 ? <Dots>Loading</Dots> : `${currency0.symbol}/${currency1.symbol}`}</Text>
</RowFixed>
<RowFixed>
{showMore ? (
<ChevronUp size="20" style={{ marginLeft: '10px' }} />
) : (
<ChevronDown size="20" style={{ marginLeft: '10px' }} />
)}
</RowFixed>
</FixedHeightRow>
{showMore && (
<AutoColumn gap="8px">
<FixedHeightRow>
<RowFixed>
<Text>Pooled {currency0.symbol}:</Text>
</RowFixed>
{token0Deposited ? (
<RowFixed>
<Text ml="6px">{token0Deposited?.toSignificant(6)}</Text>
<CurrencyLogo size="20px" style={{ marginLeft: '8px' }} currency={currency0} />
</RowFixed>
) : (
'-'
)}
</FixedHeightRow>
<FixedHeightRow>
<RowFixed>
<Text>Pooled {currency1.symbol}:</Text>
</RowFixed>
{token1Deposited ? (
<RowFixed>
<Text ml="6px">{token1Deposited?.toSignificant(6)}</Text>
<CurrencyLogo size="20px" style={{ marginLeft: '8px' }} currency={currency1} />
</RowFixed>
) : (
'-'
)}
</FixedHeightRow>
<FixedHeightRow>
<Text>Your pool tokens:</Text>
<Text>{userPoolBalance ? userPoolBalance.toSignificant(4) : '-'}</Text>
</FixedHeightRow>
<FixedHeightRow>
<Text>Your pool share:</Text>
<Text>{poolTokenPercentage ? `${poolTokenPercentage.toFixed(2)}%` : '-'}</Text>
</FixedHeightRow>
<RowBetween marginTop="10px">
<Button as={Link} to={`/add/${currencyId(currency0)}/${currencyId(currency1)}`} style={{ width: '48%' }}>
Add
</Button>
<Button
as={Link}
style={{ width: '48%' }}
to={`/remove/${currencyId(currency0)}/${currencyId(currency1)}`}
>
Remove
</Button>
</RowBetween>
</AutoColumn>
)}
</AutoColumn>
</HoverCard>
)
}
Example #11
Source File: index.tsx From pancake-swap-interface-v1 with GNU General Public License v3.0 | 4 votes |
export default function FullPositionCard({ pair, removeOnly }: PositionCardProps) {
const { account } = useActiveWeb3React()
const currency0 = unwrappedToken(pair.token0)
const currency1 = unwrappedToken(pair.token1)
const [showMore, setShowMore] = useState(false)
const userPoolBalance = useTokenBalance(account ?? undefined, pair.liquidityToken)
const totalPoolTokens = useTotalSupply(pair.liquidityToken)
const poolTokenPercentage =
!!userPoolBalance && !!totalPoolTokens && JSBI.greaterThanOrEqual(totalPoolTokens.raw, userPoolBalance.raw)
? new Percent(userPoolBalance.raw, totalPoolTokens.raw)
: undefined
const [token0Deposited, token1Deposited] =
!!pair &&
!!totalPoolTokens &&
!!userPoolBalance &&
// this condition is a short-circuit in the case where useTokenBalance updates sooner than useTotalSupply
JSBI.greaterThanOrEqual(totalPoolTokens.raw, userPoolBalance.raw)
? [
pair.getLiquidityValue(pair.token0, totalPoolTokens, userPoolBalance, false),
pair.getLiquidityValue(pair.token1, totalPoolTokens, userPoolBalance, false),
]
: [undefined, undefined]
return (
<HoverCard>
<AutoColumn gap="12px">
<FixedHeightRow onClick={() => setShowMore(!showMore)} style={{ cursor: 'pointer' }}>
<RowFixed>
<DoubleCurrencyLogo currency0={currency0} currency1={currency1} margin size={20} />
<Text>{!currency0 || !currency1 ? <Dots>Loading</Dots> : `${currency0.symbol}/${currency1.symbol}`}</Text>
</RowFixed>
<RowFixed>
{showMore ? (
<ChevronUp size="20" style={{ marginLeft: '10px' }} />
) : (
<ChevronDown size="20" style={{ marginLeft: '10px' }} />
)}
</RowFixed>
</FixedHeightRow>
{showMore && (
<AutoColumn gap="8px">
<FixedHeightRow>
<RowFixed>
<Text>Pooled {currency0.symbol}:</Text>
</RowFixed>
{token0Deposited ? (
<RowFixed>
<Text ml="6px">{token0Deposited?.toSignificant(6)}</Text>
<CurrencyLogo size="20px" style={{ marginLeft: '8px' }} currency={currency0} />
</RowFixed>
) : (
'-'
)}
</FixedHeightRow>
<FixedHeightRow>
<RowFixed>
<Text>Pooled {currency1.symbol}:</Text>
</RowFixed>
{token1Deposited ? (
<RowFixed>
<Text ml="6px">{token1Deposited?.toSignificant(6)}</Text>
<CurrencyLogo size="20px" style={{ marginLeft: '8px' }} currency={currency1} />
</RowFixed>
) : (
'-'
)}
</FixedHeightRow>
<FixedHeightRow>
<Text>Your pool tokens:</Text>
<Text>{userPoolBalance ? userPoolBalance.toSignificant(4) : '-'}</Text>
</FixedHeightRow>
<FixedHeightRow>
<Text>Your pool share:</Text>
<Text>{poolTokenPercentage ? `${poolTokenPercentage.toFixed(2)}%` : '-'}</Text>
</FixedHeightRow>
<RowBetween marginTop="10px">
{removeOnly && (
<Button
as={Link}
to={`/add/${currencyId(currency0)}/${currencyId(currency1)}`}
style={{ width: '48%' }}
>
Add
</Button>
)}
<Button
as={Link}
style={{ width: '48%' }}
to={`/remove/${currencyId(currency0)}/${currencyId(currency1)}`}
>
Remove
</Button>
</RowBetween>
</AutoColumn>
)}
</AutoColumn>
</HoverCard>
)
}
Example #12
Source File: index.tsx From pancake-swap-exchange-testnet with GNU General Public License v3.0 | 4 votes |
export default function FullPositionCard({ pair, removeOnly }: PositionCardProps) {
const { account } = useActiveWeb3React()
const currency0 = unwrappedToken(pair.token0)
const currency1 = unwrappedToken(pair.token1)
const [showMore, setShowMore] = useState(false)
const userPoolBalance = useTokenBalance(account ?? undefined, pair.liquidityToken)
const totalPoolTokens = useTotalSupply(pair.liquidityToken)
const poolTokenPercentage =
!!userPoolBalance && !!totalPoolTokens && JSBI.greaterThanOrEqual(totalPoolTokens.raw, userPoolBalance.raw)
? new Percent(userPoolBalance.raw, totalPoolTokens.raw)
: undefined
const [token0Deposited, token1Deposited] =
!!pair &&
!!totalPoolTokens &&
!!userPoolBalance &&
// this condition is a short-circuit in the case where useTokenBalance updates sooner than useTotalSupply
JSBI.greaterThanOrEqual(totalPoolTokens.raw, userPoolBalance.raw)
? [
pair.getLiquidityValue(pair.token0, totalPoolTokens, userPoolBalance, false),
pair.getLiquidityValue(pair.token1, totalPoolTokens, userPoolBalance, false),
]
: [undefined, undefined]
return (
<HoverCard>
<AutoColumn gap="12px">
<FixedHeightRow onClick={() => setShowMore(!showMore)} style={{ cursor: 'pointer' }}>
<RowFixed>
<DoubleCurrencyLogo currency0={currency0} currency1={currency1} margin size={20} />
<Text>{!currency0 || !currency1 ? <Dots>Loading</Dots> : `${currency0.symbol}/${currency1.symbol}`}</Text>
</RowFixed>
<RowFixed>
{showMore ? (
<ChevronUp size="20" style={{ marginLeft: '10px' }} />
) : (
<ChevronDown size="20" style={{ marginLeft: '10px' }} />
)}
</RowFixed>
</FixedHeightRow>
{showMore && (
<AutoColumn gap="8px">
<FixedHeightRow>
<RowFixed>
<Text>Pooled {currency0.symbol}:</Text>
</RowFixed>
{token0Deposited ? (
<RowFixed>
<Text ml="6px">{token0Deposited?.toSignificant(6)}</Text>
<CurrencyLogo size="20px" style={{ marginLeft: '8px' }} currency={currency0} />
</RowFixed>
) : (
'-'
)}
</FixedHeightRow>
<FixedHeightRow>
<RowFixed>
<Text>Pooled {currency1.symbol}:</Text>
</RowFixed>
{token1Deposited ? (
<RowFixed>
<Text ml="6px">{token1Deposited?.toSignificant(6)}</Text>
<CurrencyLogo size="20px" style={{ marginLeft: '8px' }} currency={currency1} />
</RowFixed>
) : (
'-'
)}
</FixedHeightRow>
<FixedHeightRow>
<Text>Your pool tokens:</Text>
<Text>{userPoolBalance ? userPoolBalance.toSignificant(4) : '-'}</Text>
</FixedHeightRow>
<FixedHeightRow>
<Text>Your pool share:</Text>
<Text>{poolTokenPercentage ? `${poolTokenPercentage.toFixed(2)}%` : '-'}</Text>
</FixedHeightRow>
<RowBetween marginTop="10px">
{removeOnly && (
<Button
as={Link}
to={`/add/${currencyId(currency0)}/${currencyId(currency1)}`}
style={{ width: '48%' }}
>
Add
</Button>
)}
<Button
as={Link}
style={{ width: '48%' }}
to={`/remove/${currencyId(currency0)}/${currencyId(currency1)}`}
>
Remove
</Button>
</RowBetween>
</AutoColumn>
)}
</AutoColumn>
</HoverCard>
)
}
Example #13
Source File: index.tsx From mozartfinance-swap-interface with GNU General Public License v3.0 | 4 votes |
export default function FullPositionCard({ pair }: PositionCardProps) {
const { account } = useActiveWeb3React()
const currency0 = unwrappedToken(pair.token0)
const currency1 = unwrappedToken(pair.token1)
const [showMore, setShowMore] = useState(false)
const userPoolBalance = useTokenBalance(account ?? undefined, pair.liquidityToken)
const totalPoolTokens = useTotalSupply(pair.liquidityToken)
const poolTokenPercentage =
!!userPoolBalance && !!totalPoolTokens && JSBI.greaterThanOrEqual(totalPoolTokens.raw, userPoolBalance.raw)
? new Percent(userPoolBalance.raw, totalPoolTokens.raw)
: undefined
const [token0Deposited, token1Deposited] =
!!pair &&
!!totalPoolTokens &&
!!userPoolBalance &&
// this condition is a short-circuit in the case where useTokenBalance updates sooner than useTotalSupply
JSBI.greaterThanOrEqual(totalPoolTokens.raw, userPoolBalance.raw)
? [
pair.getLiquidityValue(pair.token0, totalPoolTokens, userPoolBalance, false),
pair.getLiquidityValue(pair.token1, totalPoolTokens, userPoolBalance, false),
]
: [undefined, undefined]
return (
<HoverCard>
<AutoColumn gap="12px">
<FixedHeightRow onClick={() => setShowMore(!showMore)} style={{ cursor: 'pointer' }}>
<RowFixed>
<DoubleCurrencyLogo currency0={currency0} currency1={currency1} margin size={20} />
<Text>{!currency0 || !currency1 ? <Dots>Loading</Dots> : `${currency0.symbol}/${currency1.symbol}`}</Text>
</RowFixed>
<RowFixed>
{showMore ? (
<ChevronUp size="20" style={{ marginLeft: '10px' }} />
) : (
<ChevronDown size="20" style={{ marginLeft: '10px' }} />
)}
</RowFixed>
</FixedHeightRow>
{showMore && (
<AutoColumn gap="8px">
<FixedHeightRow>
<RowFixed>
<Text>Pooled {currency0.symbol}:</Text>
</RowFixed>
{token0Deposited ? (
<RowFixed>
<Text ml="6px">{token0Deposited?.toSignificant(6)}</Text>
<CurrencyLogo size="20px" style={{ marginLeft: '8px' }} currency={currency0} />
</RowFixed>
) : (
'-'
)}
</FixedHeightRow>
<FixedHeightRow>
<RowFixed>
<Text>Pooled {currency1.symbol}:</Text>
</RowFixed>
{token1Deposited ? (
<RowFixed>
<Text ml="6px">{token1Deposited?.toSignificant(6)}</Text>
<CurrencyLogo size="20px" style={{ marginLeft: '8px' }} currency={currency1} />
</RowFixed>
) : (
'-'
)}
</FixedHeightRow>
<FixedHeightRow>
<Text>Your pool tokens:</Text>
<Text>{userPoolBalance ? userPoolBalance.toSignificant(4) : '-'}</Text>
</FixedHeightRow>
<FixedHeightRow>
<Text>Your pool share:</Text>
<Text>{poolTokenPercentage ? `${poolTokenPercentage.toFixed(2)}%` : '-'}</Text>
</FixedHeightRow>
<RowBetween marginTop="10px">
<Button as={Link} to={`/add/${currencyId(currency0)}/${currencyId(currency1)}`} style={{ width: '48%' }}>
Add
</Button>
<Button
as={Link}
style={{ width: '48%' }}
to={`/remove/${currencyId(currency0)}/${currencyId(currency1)}`}
>
Remove
</Button>
</RowBetween>
</AutoColumn>
)}
</AutoColumn>
</HoverCard>
)
}
Example #14
Source File: index.tsx From goose-frontend-amm with GNU General Public License v3.0 | 4 votes |
export default function FullPositionCard({ pair }: PositionCardProps) {
const { account } = useActiveWeb3React()
const currency0 = unwrappedToken(pair.token0)
const currency1 = unwrappedToken(pair.token1)
const [showMore, setShowMore] = useState(false)
const userPoolBalance = useTokenBalance(account ?? undefined, pair.liquidityToken)
const totalPoolTokens = useTotalSupply(pair.liquidityToken)
const poolTokenPercentage =
!!userPoolBalance && !!totalPoolTokens && JSBI.greaterThanOrEqual(totalPoolTokens.raw, userPoolBalance.raw)
? new Percent(userPoolBalance.raw, totalPoolTokens.raw)
: undefined
const [token0Deposited, token1Deposited] =
!!pair &&
!!totalPoolTokens &&
!!userPoolBalance &&
// this condition is a short-circuit in the case where useTokenBalance updates sooner than useTotalSupply
JSBI.greaterThanOrEqual(totalPoolTokens.raw, userPoolBalance.raw)
? [
pair.getLiquidityValue(pair.token0, totalPoolTokens, userPoolBalance, false),
pair.getLiquidityValue(pair.token1, totalPoolTokens, userPoolBalance, false),
]
: [undefined, undefined]
return (
<HoverCard>
<AutoColumn gap="12px">
<FixedHeightRow onClick={() => setShowMore(!showMore)} style={{ cursor: 'pointer' }}>
<RowFixed>
<DoubleCurrencyLogo currency0={currency0} currency1={currency1} margin size={20} />
<Text>{!currency0 || !currency1 ? <Dots>Loading</Dots> : `${currency0.symbol}/${currency1.symbol}`}</Text>
</RowFixed>
<RowFixed>
{showMore ? (
<ChevronUp size="20" style={{ marginLeft: '10px' }} />
) : (
<ChevronDown size="20" style={{ marginLeft: '10px' }} />
)}
</RowFixed>
</FixedHeightRow>
{showMore && (
<AutoColumn gap="8px">
<FixedHeightRow>
<RowFixed>
<Text>Pooled {currency0.symbol}:</Text>
</RowFixed>
{token0Deposited ? (
<RowFixed>
<Text ml="6px">{token0Deposited?.toSignificant(6)}</Text>
<CurrencyLogo size="20px" style={{ marginLeft: '8px' }} currency={currency0} />
</RowFixed>
) : (
'-'
)}
</FixedHeightRow>
<FixedHeightRow>
<RowFixed>
<Text>Pooled {currency1.symbol}:</Text>
</RowFixed>
{token1Deposited ? (
<RowFixed>
<Text ml="6px">{token1Deposited?.toSignificant(6)}</Text>
<CurrencyLogo size="20px" style={{ marginLeft: '8px' }} currency={currency1} />
</RowFixed>
) : (
'-'
)}
</FixedHeightRow>
<FixedHeightRow>
<Text>Your pool tokens:</Text>
<Text>{userPoolBalance ? userPoolBalance.toSignificant(4) : '-'}</Text>
</FixedHeightRow>
<FixedHeightRow>
<Text>Your pool share:</Text>
<Text>{poolTokenPercentage ? `${poolTokenPercentage.toFixed(2)}%` : '-'}</Text>
</FixedHeightRow>
<RowBetween marginTop="10px">
<Button as={Link} to={`/add/${currencyId(currency0)}/${currencyId(currency1)}`} style={{ width: '48%' }}>
Add
</Button>
<Button
as={Link}
style={{ width: '48%' }}
to={`/remove/${currencyId(currency0)}/${currencyId(currency1)}`}
>
Remove
</Button>
</RowBetween>
</AutoColumn>
)}
</AutoColumn>
</HoverCard>
)
}
Example #15
Source File: index.tsx From dyp with Do What The F*ck You Want To Public License | 4 votes |
export default function FullPositionCard({ pair, border }: PositionCardProps) {
const { account } = useActiveWeb3React()
const currency0 = unwrappedToken(pair.token0)
const currency1 = unwrappedToken(pair.token1)
const [showMore, setShowMore] = useState(false)
const userPoolBalance = useTokenBalance(account ?? undefined, pair.liquidityToken)
const totalPoolTokens = useTotalSupply(pair.liquidityToken)
const poolTokenPercentage =
!!userPoolBalance && !!totalPoolTokens && JSBI.greaterThanOrEqual(totalPoolTokens.raw, userPoolBalance.raw)
? new Percent(userPoolBalance.raw, totalPoolTokens.raw)
: undefined
const [token0Deposited, token1Deposited] =
!!pair &&
!!totalPoolTokens &&
!!userPoolBalance &&
// this condition is a short-circuit in the case where useTokenBalance updates sooner than useTotalSupply
JSBI.greaterThanOrEqual(totalPoolTokens.raw, userPoolBalance.raw)
? [
pair.getLiquidityValue(pair.token0, totalPoolTokens, userPoolBalance, false),
pair.getLiquidityValue(pair.token1, totalPoolTokens, userPoolBalance, false)
]
: [undefined, undefined]
const backgroundColor = useColor(pair?.token0)
return (
<StyledPositionCard border={border} bgColor={backgroundColor}>
<CardNoise />
<AutoColumn gap="12px">
<FixedHeightRow>
<RowFixed>
<DoubleCurrencyLogo currency0={currency0} currency1={currency1} margin={true} size={20} />
<Text fontWeight={500} fontSize={20}>
{!currency0 || !currency1 ? <Dots>Loading</Dots> : `${currency0.symbol}/${currency1.symbol}`}
</Text>
</RowFixed>
<RowFixed gap="8px">
<ButtonEmpty
padding="6px 8px"
borderRadius="12px"
width="fit-content"
onClick={() => setShowMore(!showMore)}
>
{showMore ? (
<>
{' '}
Manage
<ChevronUp size="20" style={{ marginLeft: '10px' }} />
</>
) : (
<>
Manage
<ChevronDown size="20" style={{ marginLeft: '10px' }} />
</>
)}
</ButtonEmpty>
</RowFixed>
</FixedHeightRow>
{showMore && (
<AutoColumn gap="8px">
<FixedHeightRow>
<Text fontSize={16} fontWeight={500}>
Your pool tokens:
</Text>
<Text fontSize={16} fontWeight={500}>
{userPoolBalance ? userPoolBalance.toSignificant(4) : '-'}
</Text>
</FixedHeightRow>
<FixedHeightRow>
<RowFixed>
<Text fontSize={16} fontWeight={500}>
Pooled {currency0.symbol}:
</Text>
</RowFixed>
{token0Deposited ? (
<RowFixed>
<Text fontSize={16} fontWeight={500} marginLeft={'6px'}>
{token0Deposited?.toSignificant(6)}
</Text>
<CurrencyLogo size="20px" style={{ marginLeft: '8px' }} currency={currency0} />
</RowFixed>
) : (
'-'
)}
</FixedHeightRow>
<FixedHeightRow>
<RowFixed>
<Text fontSize={16} fontWeight={500}>
Pooled {currency1.symbol}:
</Text>
</RowFixed>
{token1Deposited ? (
<RowFixed>
<Text fontSize={16} fontWeight={500} marginLeft={'6px'}>
{token1Deposited?.toSignificant(6)}
</Text>
<CurrencyLogo size="20px" style={{ marginLeft: '8px' }} currency={currency1} />
</RowFixed>
) : (
'-'
)}
</FixedHeightRow>
<FixedHeightRow>
<Text fontSize={16} fontWeight={500}>
Your pool share:
</Text>
<Text fontSize={16} fontWeight={500}>
{poolTokenPercentage ? poolTokenPercentage.toFixed(2) + '%' : '-'}
</Text>
</FixedHeightRow>
<ButtonSecondary padding="8px" borderRadius="8px">
<ExternalLink
style={{ width: '100%', textAlign: 'center' }}
href={`https://uniswap.info/account/${account}`}
>
View accrued fees and analytics<span style={{ fontSize: '11px' }}>↗</span>
</ExternalLink>
</ButtonSecondary>
<RowBetween marginTop="10px">
<ButtonPrimary
padding="8px"
borderRadius="8px"
as={Link}
to={`/add/${currencyId(currency0)}/${currencyId(currency1)}`}
width="48%"
>
Add
</ButtonPrimary>
<ButtonPrimary
padding="8px"
borderRadius="8px"
as={Link}
width="48%"
to={`/remove/${currencyId(currency0)}/${currencyId(currency1)}`}
>
Remove
</ButtonPrimary>
</RowBetween>
</AutoColumn>
)}
</AutoColumn>
</StyledPositionCard>
)
}
Example #16
Source File: YearRow.tsx From crypto-fees with MIT License | 4 votes |
Row: React.FC<RowProps> = ({ protocol }) => {
const plausible = usePlausible();
const [open, setOpen] = useState(false);
const icon = protocol.icon || icons[protocol.id];
const isApp = protocol.category !== 'l1' && protocol.category !== 'l2';
return (
<Fragment>
<a
href={`/protocol/${protocol.id}`}
onClick={(e: any) => {
e.preventDefault();
setOpen(toggle);
plausible('open-details', {
props: {
label: protocol.name,
},
});
}}
className={`item ${isApp ? 'app' : ''} ${open ? 'open' : ''}`}
style={{
backgroundImage: icon ? `url('${icon}')` : undefined,
}}
>
<RowName name={protocol.name} shortName={protocol.shortName} subtitle={protocol.subtitle} />
<div className="amount">
{protocol.oneDay?.toLocaleString('en-US', {
style: 'currency',
currency: 'USD',
minimumFractionDigits: 0,
maximumFractionDigits: 0,
})}
</div>
<div className="arrow">{open ? <ChevronUp /> : <ChevronDown />}</div>
</a>
<CSSTransition in={open} timeout={500} unmountOnExit>
<div className="details-container">
<DetailsCard protocol={protocol} sort="daily" yearly />
</div>
</CSSTransition>
<style jsx>{`
.item {
display: flex;
padding: 0 4px;
background-color: #fff;
font-size: 18px;
background-repeat: no-repeat;
background-position: 10px center;
background-size: 20px 20px;
padding-left: 10px;
color: black;
text-decoration: none;
align-items: center;
height: 54px;
}
.item:hover {
background-color: #f5f5f5;
}
.item.app {
background-color: #fad3f6;
}
.item.app:hover {
background-color: #f8c3f3;
}
.amount {
padding-left: 32px;
}
.amount {
min-width: 200px;
text-align: right;
font-family: 'Noto Sans TC', sans-serif;
}
.arrow {
padding: 0 4px;
height: 24px;
opacity: 0.7;
}
@keyframes slidein {
from {
max-height: 0px;
}
to {
max-height: ${cardHeight}px;
}
}
@keyframes slideout {
from {
max-height: ${cardHeight}px;
}
to {
max-height: 0px;
}
}
.details-container {
max-height: ${cardHeight}px;
animation: 0.5s 1 slidein;
overflow: hidden;
border-top: solid 1px #e3e3e3;
border-bottom: solid 1px #e3e3e3;
display: flex;
flex-direction: column;
}
.details-container.exit {
max-height: 0;
animation: 0.5s 1 slideout;
}
@media (max-width: 700px) {
.amount {
font-size: 14px;
min-width: 110px;
padding-left: 8px;
}
.item {
padding-left: 30px;
background-position: 6px center;
}
.arrow {
padding: 0 2px;
}
}
`}</style>
</Fragment>
);
}
Example #17
Source File: Row.tsx From crypto-fees with MIT License | 4 votes |
Row: React.FC<RowProps> = ({ protocol, sort }) => {
const plausible = usePlausible();
const [open, setOpen] = useState(false);
const icon = protocol.icon || icons[protocol.id];
const isApp = protocol.category !== 'l1' && protocol.category !== 'l2';
return (
<Fragment>
<a
href={`/protocol/${protocol.id}`}
onClick={(e: any) => {
e.preventDefault();
setOpen(toggle);
ReactGA.event({
category: 'Navigation',
action: open ? 'Close details' : 'Open details',
label: protocol.name,
});
plausible('open-details', {
props: {
label: protocol.name,
},
});
}}
className={`item ${isApp ? 'app' : ''} ${open ? 'open' : ''}`}
style={{
backgroundImage: icon ? `url('${icon}')` : undefined,
}}
>
<RowName name={protocol.name} shortName={protocol.shortName} subtitle={protocol.subtitle} />
<div className="amount">
{protocol.oneDay?.toLocaleString('en-US', {
style: 'currency',
currency: 'USD',
})}
</div>
<div className="amount">
{protocol.sevenDayMA?.toLocaleString('en-US', {
style: 'currency',
currency: 'USD',
})}
</div>
<div className="arrow">{open ? <ChevronUp /> : <ChevronDown />}</div>
</a>
<CSSTransition in={open} timeout={500} unmountOnExit>
<div className="details-container">
<DetailsCard protocol={protocol} sort={sort} />
</div>
</CSSTransition>
<style jsx>{`
.item {
display: flex;
padding: 0 4px;
background-color: #fff;
font-size: 18px;
background-repeat: no-repeat;
background-position: 10px center;
background-size: 20px 20px;
padding-left: 10px;
color: black;
text-decoration: none;
align-items: center;
height: 54px;
}
.item:hover {
background-color: #f5f5f5;
}
.item.app {
background-color: #fad3f6;
}
.item.app:hover {
background-color: #f8c3f3;
}
.amount {
padding-left: 32px;
}
.amount {
min-width: 200px;
text-align: right;
font-family: 'Noto Sans TC', sans-serif;
}
.arrow {
padding: 0 4px;
height: 24px;
opacity: 0.7;
}
@keyframes slidein {
from {
max-height: 0px;
}
to {
max-height: ${cardHeight}px;
}
}
@keyframes slideout {
from {
max-height: ${cardHeight}px;
}
to {
max-height: 0px;
}
}
.details-container {
max-height: ${cardHeight}px;
animation: 0.5s 1 slidein;
overflow: hidden;
border-top: solid 1px #e3e3e3;
border-bottom: solid 1px #e3e3e3;
display: flex;
flex-direction: column;
}
.details-container.exit {
max-height: 0;
animation: 0.5s 1 slideout;
}
@media (max-width: 700px) {
.amount {
font-size: 14px;
min-width: 110px;
padding-left: 8px;
}
.item {
padding-left: 30px;
background-position: 6px center;
}
.arrow {
padding: 0 2px;
}
}
`}</style>
</Fragment>
);
}
Example #18
Source File: index.tsx From cheeseswap-interface with GNU General Public License v3.0 | 4 votes |
export default function FullPositionCard({ pair, border }: PositionCardProps) {
const { account } = useActiveWeb3React()
const currency0 = unwrappedToken(pair.token0)
const currency1 = unwrappedToken(pair.token1)
const [showMore, setShowMore] = useState(false)
const userPoolBalance = useTokenBalance(account ?? undefined, pair.liquidityToken)
const totalPoolTokens = useTotalSupply(pair.liquidityToken)
const poolTokenPercentage =
!!userPoolBalance && !!totalPoolTokens && JSBI.greaterThanOrEqual(totalPoolTokens.raw, userPoolBalance.raw)
? new Percent(userPoolBalance.raw, totalPoolTokens.raw)
: undefined
const [token0Deposited, token1Deposited] =
!!pair &&
!!totalPoolTokens &&
!!userPoolBalance &&
// this condition is a short-circuit in the case where useTokenBalance updates sooner than useTotalSupply
JSBI.greaterThanOrEqual(totalPoolTokens.raw, userPoolBalance.raw)
? [
pair.getLiquidityValue(pair.token0, totalPoolTokens, userPoolBalance, false),
pair.getLiquidityValue(pair.token1, totalPoolTokens, userPoolBalance, false)
]
: [undefined, undefined]
return (
<HoverCard border={border}>
<AutoColumn gap="12px">
<FixedHeightRow onClick={() => setShowMore(!showMore)} style={{ cursor: 'pointer' }}>
<RowFixed>
<DoubleCurrencyLogo currency0={currency0} currency1={currency1} margin={true} size={20} />
<Text fontWeight={700} fontSize={18}>
{!currency0 || !currency1 ? <Dots>Loading</Dots> : `${currency0.symbol}/${currency1.symbol}`}
</Text>
</RowFixed>
<RowFixed>
{showMore ? (
<ChevronUp size="20" style={{ marginLeft: '10px' }} />
) : (
<ChevronDown size="20" style={{ marginLeft: '10px' }} />
)}
</RowFixed>
</FixedHeightRow>
{showMore && (
<AutoColumn gap="8px">
<FixedHeightRow>
<RowFixed>
<Text fontSize={16} fontWeight={700}>
Pooled {currency0.symbol}:
</Text>
</RowFixed>
{token0Deposited ? (
<RowFixed>
<Text fontSize={16} fontWeight={700} marginLeft={'6px'}>
{token0Deposited?.toSignificant(6)}
</Text>
<CurrencyLogo size="20px" style={{ marginLeft: '8px' }} currency={currency0} />
</RowFixed>
) : (
'-'
)}
</FixedHeightRow>
<FixedHeightRow>
<RowFixed>
<Text fontSize={16} fontWeight={700}>
Pooled {currency1.symbol}:
</Text>
</RowFixed>
{token1Deposited ? (
<RowFixed>
<Text fontSize={16} fontWeight={700} marginLeft={'6px'}>
{token1Deposited?.toSignificant(6)}
</Text>
<CurrencyLogo size="20px" style={{ marginLeft: '8px' }} currency={currency1} />
</RowFixed>
) : (
'-'
)}
</FixedHeightRow>
<FixedHeightRow>
<Text fontSize={16} fontWeight={700}>
Your pool tokens:
</Text>
<Text fontSize={16} fontWeight={700}>
{userPoolBalance ? userPoolBalance.toSignificant(4) : '-'}
</Text>
</FixedHeightRow>
<FixedHeightRow>
<Text fontSize={16} fontWeight={700}>
Your pool share:
</Text>
<Text fontSize={16} fontWeight={700}>
{poolTokenPercentage ? poolTokenPercentage.toFixed(2) + '%' : '-'}
</Text>
</FixedHeightRow>
<RowBetween marginTop="10px">
<ButtonSecondary as={Link} to={`/add/${currencyId(currency0)}/${currencyId(currency1)}`} width="48%">
Add
</ButtonSecondary>
<ButtonSecondary as={Link} width="48%" to={`/remove/${currencyId(currency0)}/${currencyId(currency1)}`}>
Remove
</ButtonSecondary>
</RowBetween>
</AutoColumn>
)}
</AutoColumn>
</HoverCard>
)
}
Example #19
Source File: PositionCard.tsx From interface-v2 with GNU General Public License v3.0 | 4 votes |
FullPositionCard: React.FC<PositionCardProps> = ({ pair }) => {
const { account } = useActiveWeb3React();
const currency0 = unwrappedToken(pair.token0);
const currency1 = unwrappedToken(pair.token1);
const [showMore, setShowMore] = useState(false);
const userPoolBalance = useTokenBalance(
account ?? undefined,
pair.liquidityToken,
);
const totalPoolTokens = useTotalSupply(pair.liquidityToken);
const poolTokenPercentage =
!!userPoolBalance &&
!!totalPoolTokens &&
JSBI.greaterThanOrEqual(totalPoolTokens.raw, userPoolBalance.raw)
? new Percent(userPoolBalance.raw, totalPoolTokens.raw)
: undefined;
const [token0Deposited, token1Deposited] =
!!pair &&
!!totalPoolTokens &&
!!userPoolBalance &&
// this condition is a short-circuit in the case where useTokenBalance updates sooner than useTotalSupply
JSBI.greaterThanOrEqual(totalPoolTokens.raw, userPoolBalance.raw)
? [
pair.getLiquidityValue(
pair.token0,
totalPoolTokens,
userPoolBalance,
false,
),
pair.getLiquidityValue(
pair.token1,
totalPoolTokens,
userPoolBalance,
false,
),
]
: [undefined, undefined];
return (
<Box>
<Box>
<Box>
<DoubleCurrencyLogo
currency0={currency0}
currency1={currency1}
margin={true}
size={20}
/>
<Typography>
{!currency0 || !currency1 ? (
<Typography>Loading</Typography>
) : (
`${currency0.symbol}/${currency1.symbol}`
)}
</Typography>
</Box>
<Button onClick={() => setShowMore(!showMore)}>
{showMore ? (
<>
{' '}
Manage
<ChevronUp size='20' style={{ marginLeft: '10px' }} />
</>
) : (
<>
Manage
<ChevronDown size='20' style={{ marginLeft: '10px' }} />
</>
)}
</Button>
</Box>
{showMore && (
<Box>
<Box>
<Typography>Your pool tokens:</Typography>
<Typography>{formatTokenAmount(userPoolBalance)}</Typography>
</Box>
<Box>
<Typography>Pooled {currency0.symbol}:</Typography>
<Box>
<Typography>{formatTokenAmount(token0Deposited)}</Typography>
<CurrencyLogo
size='20px'
style={{ marginLeft: '8px' }}
currency={currency0}
/>
</Box>
</Box>
<Box>
<Typography>Pooled {currency1.symbol}:</Typography>
<Box>
<Typography>{formatTokenAmount(token1Deposited)}</Typography>
<CurrencyLogo
size='20px'
style={{ marginLeft: '8px' }}
currency={currency1}
/>
</Box>
</Box>
<Box>
<Typography>Your pool share:</Typography>
<Typography>
{poolTokenPercentage ? poolTokenPercentage.toFixed(2) + '%' : '-'}
</Typography>
</Box>
<Button>
<a
style={{ width: '100%', textAlign: 'center' }}
href={`https://info.quickswap.exchange/account/${account}`}
target='_blank'
rel='noopener noreferrer'
>
View accrued fees and analytics
<span style={{ fontSize: '11px' }}>↗</span>
</a>
</Button>
<Box display='flex'>
<Box width='48%'>
<Link
to={`/add/${currencyId(currency0)}/${currencyId(currency1)}`}
>
Add
</Link>
</Box>
<Box width='48%'>
<Link
to={`/remove/${currencyId(currency0)}/${currencyId(currency1)}`}
>
Remove
</Link>
</Box>
</Box>
</Box>
)}
</Box>
);
}
Example #20
Source File: PoolPositionCard.tsx From interface-v2 with GNU General Public License v3.0 | 4 votes |
PoolPositionCard: React.FC<{ pair: Pair }> = ({ pair }) => {
const [bulkPairData, setBulkPairData] = useState<any>(null);
const { palette, breakpoints } = useTheme();
const isMobile = useMediaQuery(breakpoints.down('xs'));
const currency0 = unwrappedToken(pair.token0);
const currency1 = unwrappedToken(pair.token1);
const stakingInfos = useStakingInfo(pair);
const dualStakingInfos = useDualStakingInfo(pair);
const stakingInfo = useMemo(
() =>
stakingInfos && stakingInfos.length > 0
? stakingInfos[0]
: dualStakingInfos && dualStakingInfos.length > 0
? dualStakingInfos[0]
: null,
[stakingInfos, dualStakingInfos],
);
const pairId = pair.liquidityToken.address;
useEffect(() => {
const pairLists = [pairId];
getBulkPairData(pairLists).then((data) => setBulkPairData(data));
return () => setBulkPairData(null);
}, [pairId]);
const [showMore, setShowMore] = useState(false);
const apyWithFee = useMemo(() => {
if (stakingInfo && bulkPairData) {
const dayVolume = bulkPairData[stakingInfo.pair]?.oneDayVolumeUSD;
const reserveUSD = bulkPairData[stakingInfo.pair]?.reserveUSD;
const oneYearFee =
dayVolume && reserveUSD ? getOneYearFee(dayVolume, reserveUSD) : 0;
return formatAPY(
getAPYWithFee(stakingInfo.perMonthReturnInRewards ?? 0, oneYearFee),
);
}
}, [stakingInfo, bulkPairData]);
return (
<Box
width={1}
border={`1px solid ${palette.secondary.dark}`}
borderRadius={10}
bgcolor={showMore ? palette.secondary.dark : 'transparent'}
style={{ overflow: 'hidden' }}
>
<Box
paddingX={isMobile ? 1.5 : 3}
paddingY={isMobile ? 2 : 3}
display='flex'
alignItems='center'
justifyContent='space-between'
>
<Box display='flex' alignItems='center'>
<DoubleCurrencyLogo
currency0={currency0}
currency1={currency1}
margin={true}
size={28}
/>
<Typography
variant='h6'
style={{ color: palette.text.primary, marginLeft: 16 }}
>
{!currency0 || !currency1
? 'Loading'
: `${currency0.symbol}/${currency1.symbol}`}
</Typography>
</Box>
<Box
display='flex'
alignItems='center'
color={palette.primary.main}
style={{ cursor: 'pointer' }}
onClick={() => setShowMore(!showMore)}
>
<Typography variant='body1' style={{ marginRight: 8 }}>
Manage
</Typography>
{showMore ? <ChevronUp size='20' /> : <ChevronDown size='20' />}
</Box>
</Box>
{showMore && <PoolPositionCardDetails pair={pair} />}
{stakingInfo && !stakingInfo.ended && apyWithFee && (
<Box bgcolor='#404557' paddingY={0.75} paddingX={isMobile ? 2 : 3}>
<Typography variant='body2'>
Earn{' '}
<span style={{ color: palette.success.main }}>
{apyWithFee}% APY
</span>{' '}
by staking your LP tokens in {currency0.symbol?.toUpperCase()} /{' '}
{currency1.symbol?.toUpperCase()} Farm
</Typography>
</Box>
)}
</Box>
);
}