Commit b623380d authored by Zach Pomerantz's avatar Zach Pomerantz Committed by GitHub

feat: show widget in token details (#4337)

* build: install widgets

* feat: show widget in token details

* basic integration props

* ts fix and update widget to 2.1.1

* url map

* yarn-deduplicate --strategy=highest
Co-authored-by: default avatarJordan Frankfurt <jordanwfrankfurt@gmail.com>
parent 7645094d
import { SwapWidget } from '@uniswap/widgets'
import { useWeb3React } from '@web3-react/core' import { useWeb3React } from '@web3-react/core'
import { import {
LARGE_MEDIA_BREAKPOINT, LARGE_MEDIA_BREAKPOINT,
...@@ -13,11 +14,13 @@ import TokenDetail from 'components/Explore/TokenDetails/TokenDetail' ...@@ -13,11 +14,13 @@ import TokenDetail from 'components/Explore/TokenDetails/TokenDetail'
import TokenSafetyMessage from 'components/TokenSafety/TokenSafetyMessage' import TokenSafetyMessage from 'components/TokenSafety/TokenSafetyMessage'
import { getChainInfo } from 'constants/chainInfo' import { getChainInfo } from 'constants/chainInfo'
import { L1_CHAIN_IDS, L2_CHAIN_IDS, SupportedChainId, TESTNET_CHAIN_IDS } from 'constants/chains' import { L1_CHAIN_IDS, L2_CHAIN_IDS, SupportedChainId, TESTNET_CHAIN_IDS } from 'constants/chains'
import { RPC_URLS } from 'constants/networks'
import { checkWarning } from 'constants/tokenSafety' import { checkWarning } from 'constants/tokenSafety'
import { useToken } from 'hooks/Tokens' import { useToken } from 'hooks/Tokens'
import { useActiveLocale } from 'hooks/useActiveLocale'
import { useNetworkTokenBalances } from 'hooks/useNetworkTokenBalances' import { useNetworkTokenBalances } from 'hooks/useNetworkTokenBalances'
import useTokenDetailPageQuery from 'hooks/useTokenDetailPageQuery' import useTokenDetailPageQuery from 'hooks/useTokenDetailPageQuery'
import { useMemo } from 'react' import { useCallback, useMemo } from 'react'
import { useParams } from 'react-router-dom' import { useParams } from 'react-router-dom'
import styled from 'styled-components/macro' import styled from 'styled-components/macro'
...@@ -53,22 +56,35 @@ const RightPanel = styled.div` ...@@ -53,22 +56,35 @@ const RightPanel = styled.div`
display: none; display: none;
} }
` `
const Widget = styled.div`
height: 348px;
width: 284px;
background-color: ${({ theme }) => theme.backgroundModule};
border-radius: 12px;
border: 1px solid ${({ theme }) => theme.backgroundOutline};
`
function NetworkBalances(tokenAddress: string) { function NetworkBalances(tokenAddress: string) {
return useNetworkTokenBalances({ address: tokenAddress }) return useNetworkTokenBalances({ address: tokenAddress })
} }
// widget configuration
const WIDGET_THEME = {}
const ROUTER_URL = 'https://api.uniswap.org/v1/'
const WIDGET_URL_MAP = Object.keys(RPC_URLS).reduce(
(acc, cur) => ({ ...acc, [cur]: [RPC_URLS[cur as unknown as SupportedChainId]] }),
{}
)
export default function TokenDetails() { export default function TokenDetails() {
const { tokenAddress } = useParams<{ tokenAddress?: string }>() const { tokenAddress } = useParams<{ tokenAddress?: string }>()
const { loading } = useTokenDetailPageQuery(tokenAddress) const { loading } = useTokenDetailPageQuery(tokenAddress)
const tokenSymbol = useToken(tokenAddress)?.symbol const tokenSymbol = useToken(tokenAddress)?.symbol
const locale = useActiveLocale()
const onTxSubmit = useCallback(() => {
console.log('onTxSubmit')
}, [])
const onTxSuccess = useCallback(() => {
console.log('onTxSuccess')
}, [])
const onTxFail = useCallback(() => {
console.log('onTxFail')
}, [])
let tokenDetail let tokenDetail
if (!tokenAddress) { if (!tokenAddress) {
// TODO: handle no address / invalid address cases // TODO: handle no address / invalid address cases
...@@ -82,7 +98,7 @@ export default function TokenDetails() { ...@@ -82,7 +98,7 @@ export default function TokenDetails() {
const tokenWarning = tokenAddress ? checkWarning(tokenAddress) : null const tokenWarning = tokenAddress ? checkWarning(tokenAddress) : null
/* network balance handling */ /* network balance handling */
const { data: networkData } = tokenAddress ? NetworkBalances(tokenAddress) : { data: null } const { data: networkData } = tokenAddress ? NetworkBalances(tokenAddress) : { data: null }
const { chainId: connectedChainId } = useWeb3React() const { chainId: connectedChainId, provider } = useWeb3React()
const totalBalance = 4.3 // dummy data const totalBalance = 4.3 // dummy data
const chainsToList = useMemo(() => { const chainsToList = useMemo(() => {
...@@ -122,7 +138,22 @@ export default function TokenDetails() { ...@@ -122,7 +138,22 @@ export default function TokenDetails() {
{tokenAddress && ( {tokenAddress && (
<> <>
<RightPanel> <RightPanel>
<Widget /> <SwapWidget
defaultChainId={connectedChainId}
defaultInputTokenAddress={'NATIVE'}
defaultOutputTokenAddress={tokenAddress}
hideConnectionUI
jsonRpcUrlMap={WIDGET_URL_MAP}
locale={locale}
onTxSubmit={onTxSubmit}
onTxSuccess={onTxSuccess}
onTxFail={onTxFail}
provider={provider}
routerUrl={ROUTER_URL}
theme={WIDGET_THEME}
// tokenList={[]}
width={290}
/>
{tokenWarning && <TokenSafetyMessage tokenAddress={tokenAddress} warning={tokenWarning} />} {tokenWarning && <TokenSafetyMessage tokenAddress={tokenAddress} warning={tokenWarning} />}
{!loading && ( {!loading && (
<BalanceSummary address={tokenAddress} totalBalance={totalBalance} networkBalances={balancesByNetwork} /> <BalanceSummary address={tokenAddress} totalBalance={totalBalance} networkBalances={balancesByNetwork} />
......
This diff is collapsed.
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment