react-feather#ChevronDown TypeScript Examples
The following examples show how to use
react-feather#ChevronDown.
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: index.tsx From cuiswap with GNU General Public License v3.0 | 6 votes |
export function ButtonDropdownLight({ disabled = false, children, ...rest }: { disabled?: boolean } & ButtonProps) {
return (
<ButtonOutlined {...rest} disabled={disabled}>
<RowBetween>
<div style={{ display: 'flex', alignItems: 'center' }}>{children}</div>
<ChevronDown size={24} />
</RowBetween>
</ButtonOutlined>
)
}
Example #2
Source File: Trigger.tsx From calories-in with MIT License | 6 votes |
function Trigger({ forwardedRef, onClick, ...rest }: Props) {
const screenSize = useScreenSize()
const isPhone = screenSize <= ScreenSize.Small
return (
<Tooltip label="All days">
<IconButton
borderRadius="full"
bg="white"
size="md"
aria-label="Add variant"
icon={<ChevronDown size={20} pointerEvents="none" />}
variant="outline"
mr={isPhone ? 0 : 2}
ml={isPhone ? 2 : 0}
flexShrink={0}
ref={forwardedRef}
onClick={onClick}
{...rest}
/>
</Tooltip>
)
}
Example #3
Source File: index.tsx From luaswap-interface with GNU General Public License v3.0 | 6 votes |
export function ButtonDropdownLight({ disabled = false, children, ...rest }: { disabled?: boolean } & ButtonProps) {
return (
<ButtonOutlined {...rest} disabled={disabled}>
<RowBetween>
<div style={{ display: 'flex', alignItems: 'center' }}>{children}</div>
<ChevronDown size={24} />
</RowBetween>
</ButtonOutlined>
)
}
Example #4
Source File: index.tsx From luaswap-interface with GNU General Public License v3.0 | 6 votes |
export function ButtonDropdown({ disabled = false, children, ...rest }: { disabled?: boolean } & ButtonProps) {
return (
<ButtonPrimary {...rest} disabled={disabled}>
<RowBetween>
<div style={{ display: 'flex', alignItems: 'center' }}>{children}</div>
<ChevronDown size={24} />
</RowBetween>
</ButtonPrimary>
)
}
Example #5
Source File: index.tsx From sushiswap-exchange with GNU General Public License v3.0 | 6 votes |
export function ButtonDropdownLight({ disabled = false, children, ...rest }: { disabled?: boolean } & ButtonProps) {
return (
<ButtonOutlined {...rest} disabled={disabled}>
<RowBetween>
<div style={{ display: 'flex', alignItems: 'center' }}>{children}</div>
<ChevronDown size={24} />
</RowBetween>
</ButtonOutlined>
)
}
Example #6
Source File: index.tsx From sushiswap-exchange with GNU General Public License v3.0 | 6 votes |
export function ButtonDropdown({ disabled = false, children, ...rest }: { disabled?: boolean } & ButtonProps) {
return (
<ButtonPrimary {...rest} disabled={disabled}>
<RowBetween>
<div style={{ display: 'flex', alignItems: 'center' }}>{children}</div>
<ChevronDown size={24} />
</RowBetween>
</ButtonPrimary>
)
}
Example #7
Source File: index.tsx From forward.swaps with GNU General Public License v3.0 | 6 votes |
export function ButtonDropdownLight({ disabled = false, children, ...rest }: { disabled?: boolean } & ButtonProps) {
return (
<ButtonOutlined {...rest} disabled={disabled}>
<RowBetween>
<div style={{ display: 'flex', alignItems: 'center' }}>{children}</div>
<ChevronDown size={24} />
</RowBetween>
</ButtonOutlined>
)
}
Example #8
Source File: index.tsx From forward.swaps with GNU General Public License v3.0 | 6 votes |
export function ButtonDropdownGrey({ disabled = false, children, ...rest }: { disabled?: boolean } & ButtonProps) {
return (
<ButtonGray {...rest} disabled={disabled} style={{ borderRadius: '20px' }}>
<RowBetween>
<div style={{ display: 'flex', alignItems: 'center' }}>{children}</div>
<ChevronDown size={24} />
</RowBetween>
</ButtonGray>
)
}
Example #9
Source File: index.tsx From forward.swaps with GNU General Public License v3.0 | 6 votes |
export function ButtonDropdown({ disabled = false, children, ...rest }: { disabled?: boolean } & ButtonProps) {
return (
<ButtonPrimary {...rest} disabled={disabled}>
<RowBetween>
<div style={{ display: 'flex', alignItems: 'center' }}>{children}</div>
<ChevronDown size={24} />
</RowBetween>
</ButtonPrimary>
)
}
Example #10
Source File: index.tsx From limit-orders-lib with GNU General Public License v3.0 | 6 votes |
export function ButtonDropdownLight({
disabled = false,
children,
...rest
}: { disabled?: boolean } & ButtonProps) {
return (
<ButtonOutlined {...rest} disabled={disabled}>
<RowBetween>
<div style={{ display: "flex", alignItems: "center" }}>{children}</div>
<ChevronDown size={24} />
</RowBetween>
</ButtonOutlined>
);
}
Example #11
Source File: index.tsx From limit-orders-lib with GNU General Public License v3.0 | 6 votes |
export function ButtonDropdownGrey({
disabled = false,
children,
...rest
}: { disabled?: boolean } & ButtonProps) {
return (
<ButtonGray {...rest} disabled={disabled} style={{ borderRadius: "20px" }}>
<RowBetween>
<div style={{ display: "flex", alignItems: "center" }}>{children}</div>
<ChevronDown size={24} />
</RowBetween>
</ButtonGray>
);
}
Example #12
Source File: index.tsx From limit-orders-lib with GNU General Public License v3.0 | 6 votes |
export function ButtonDropdown({
disabled = false,
children,
...rest
}: { disabled?: boolean } & ButtonProps) {
return (
<ButtonPrimary {...rest} disabled={disabled}>
<RowBetween>
<div style={{ display: "flex", alignItems: "center" }}>{children}</div>
<ChevronDown size={24} />
</RowBetween>
</ButtonPrimary>
);
}
Example #13
Source File: index.tsx From dyp with Do What The F*ck You Want To Public License | 6 votes |
export function ButtonDropdownLight({ disabled = false, children, ...rest }: { disabled?: boolean } & ButtonProps) {
return (
<ButtonOutlined {...rest} disabled={disabled}>
<RowBetween>
<div style={{ display: 'flex', alignItems: 'center' }}>{children}</div>
<ChevronDown size={24} />
</RowBetween>
</ButtonOutlined>
)
}
Example #14
Source File: index.tsx From dyp with Do What The F*ck You Want To Public License | 6 votes |
export function ButtonDropdown({ disabled = false, children, ...rest }: { disabled?: boolean } & ButtonProps) {
return (
<ButtonPrimary {...rest} disabled={disabled}>
<RowBetween>
<div style={{ display: 'flex', alignItems: 'center' }}>{children}</div>
<ChevronDown size={24} />
</RowBetween>
</ButtonPrimary>
)
}
Example #15
Source File: index.tsx From cuiswap with GNU General Public License v3.0 | 6 votes |
export function ButtonDropdown({ disabled = false, children, ...rest }: { disabled?: boolean } & ButtonProps) {
return (
<ButtonPrimary {...rest} disabled={disabled}>
<RowBetween>
<div style={{ display: 'flex', alignItems: 'center' }}>{children}</div>
<ChevronDown size={24} />
</RowBetween>
</ButtonPrimary>
)
}
Example #16
Source File: index.tsx From cheeseswap-interface with GNU General Public License v3.0 | 6 votes |
export function ButtonDropdownLight({ disabled = false, children, ...rest }: { disabled?: boolean } & ButtonProps) {
return (
<ButtonOutlined {...rest} disabled={disabled}>
<RowBetween>
<div style={{ display: 'flex', alignItems: 'center' }}>{children}</div>
<ChevronDown size={24} />
</RowBetween>
</ButtonOutlined>
)
}
Example #17
Source File: index.tsx From cheeseswap-interface with GNU General Public License v3.0 | 6 votes |
export function ButtonDropdown({ disabled = false, children, ...rest }: { disabled?: boolean } & ButtonProps) {
return (
<ButtonPrimary {...rest} disabled={disabled}>
<RowBetween>
<div style={{ display: 'flex', alignItems: 'center' }}>{children}</div>
<ChevronDown size={24} />
</RowBetween>
</ButtonPrimary>
)
}
Example #18
Source File: HeaderButton.tsx From yet-another-generic-startpage with MIT License | 6 votes |
HeaderButton = ({
open,
label,
children,
}: PropsWithChildren<HeaderButtonProps>) => {
return (
<Button label={label}>
<CaretLayout>{open ? <ChevronDown /> : <ChevronRight />}</CaretLayout>
{children}
</Button>
)
}
Example #19
Source File: ReavealButton.tsx From calories-in with MIT License | 5 votes |
ChevronDownStyled = chakra(ChevronDown)
Example #20
Source File: PoolSelection.styles.ts From frontend-v1 with GNU Affero General Public License v3.0 | 5 votes |
ToggleIcon = styled(ChevronDown)`
margin-left: auto;
`
Example #21
Source File: CoinSelection.styles.ts From frontend-v1 with GNU Affero General Public License v3.0 | 5 votes |
ToggleIcon = styled(ChevronDown)`
margin-left: auto;
`
Example #22
Source File: ChainSelection.styles.tsx From frontend-v1 with GNU Affero General Public License v3.0 | 5 votes |
ToggleIcon = styled(ChevronDown)`
margin-left: auto;
`
Example #23
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 #24
Source File: AddressSelection.styles.ts From frontend-v1 with GNU Affero General Public License v3.0 | 5 votes |
ToggleIcon = styled(ChevronDown)`
margin-left: auto;
`
Example #25
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 #26
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 #27
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 #28
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 #29
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>
);
}