Merge pull request #327 from blockworks-foundation/popular-swap-tokens
add popular tokens to swap token select
This commit is contained in:
commit
1ff87c0ce9
|
@ -1138,6 +1138,7 @@ const JupiterForm: FunctionComponent = () => {
|
||||||
inputMint: new PublicKey(token?.address),
|
inputMint: new PublicKey(token?.address),
|
||||||
}))
|
}))
|
||||||
}}
|
}}
|
||||||
|
walletTokens={walletTokens}
|
||||||
/>
|
/>
|
||||||
) : null}
|
) : null}
|
||||||
{showOutputTokenSelect ? (
|
{showOutputTokenSelect ? (
|
||||||
|
@ -1184,6 +1185,7 @@ const JupiterForm: FunctionComponent = () => {
|
||||||
inputMint: new PublicKey(token?.address),
|
inputMint: new PublicKey(token?.address),
|
||||||
}))
|
}))
|
||||||
}}
|
}}
|
||||||
|
walletTokens={walletTokens}
|
||||||
/>
|
/>
|
||||||
) : null}
|
) : null}
|
||||||
{showOutputTokenSelect ? (
|
{showOutputTokenSelect ? (
|
||||||
|
|
|
@ -75,14 +75,36 @@ const SwapTokenSelect = ({
|
||||||
sortedTokenMints,
|
sortedTokenMints,
|
||||||
onClose,
|
onClose,
|
||||||
onTokenSelect,
|
onTokenSelect,
|
||||||
|
walletTokens,
|
||||||
}: {
|
}: {
|
||||||
isOpen: boolean
|
isOpen: boolean
|
||||||
sortedTokenMints: Token[]
|
sortedTokenMints: Token[]
|
||||||
onClose?: (x?) => void
|
onClose?: (x?) => void
|
||||||
onTokenSelect?: (x?) => void
|
onTokenSelect?: (x?) => void
|
||||||
|
walletTokens?: Array<any>
|
||||||
}) => {
|
}) => {
|
||||||
const [search, setSearch] = useState('')
|
const [search, setSearch] = useState('')
|
||||||
|
|
||||||
|
const popularTokenSymbols = ['USDC', 'SOL', 'USDT', 'MNGO', 'BTC', 'ETH']
|
||||||
|
|
||||||
|
const popularTokens = useMemo(() => {
|
||||||
|
return walletTokens?.length
|
||||||
|
? sortedTokenMints.filter((token) => {
|
||||||
|
const walletMints = walletTokens.map((tok) =>
|
||||||
|
tok.account.mint.toString()
|
||||||
|
)
|
||||||
|
return !token?.name || !token?.symbol
|
||||||
|
? false
|
||||||
|
: popularTokenSymbols.includes(token.symbol) &&
|
||||||
|
walletMints.includes(token.address)
|
||||||
|
})
|
||||||
|
: sortedTokenMints.filter((token) => {
|
||||||
|
return !token?.name || !token?.symbol
|
||||||
|
? false
|
||||||
|
: popularTokenSymbols.includes(token.symbol)
|
||||||
|
})
|
||||||
|
}, [walletTokens])
|
||||||
|
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
function onEscape(e) {
|
function onEscape(e) {
|
||||||
if (e.keyCode === 27) {
|
if (e.keyCode === 27) {
|
||||||
|
@ -95,9 +117,20 @@ const SwapTokenSelect = ({
|
||||||
|
|
||||||
const tokenInfos = useMemo(() => {
|
const tokenInfos = useMemo(() => {
|
||||||
if (sortedTokenMints?.length) {
|
if (sortedTokenMints?.length) {
|
||||||
return sortedTokenMints.filter((token) => {
|
const filteredTokens = sortedTokenMints.filter((token) => {
|
||||||
return !token?.name || !token?.symbol ? false : true
|
return !token?.name || !token?.symbol ? false : true
|
||||||
})
|
})
|
||||||
|
if (walletTokens?.length) {
|
||||||
|
const walletMints = walletTokens.map((tok) =>
|
||||||
|
tok.account.mint.toString()
|
||||||
|
)
|
||||||
|
return filteredTokens.sort(
|
||||||
|
(a, b) =>
|
||||||
|
walletMints.indexOf(b.address) - walletMints.indexOf(a.address)
|
||||||
|
)
|
||||||
|
} else {
|
||||||
|
return filteredTokens
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
return []
|
return []
|
||||||
}
|
}
|
||||||
|
@ -116,13 +149,33 @@ const SwapTokenSelect = ({
|
||||||
<SearchIcon className="h-8 w-8" />
|
<SearchIcon className="h-8 w-8" />
|
||||||
<input
|
<input
|
||||||
type="text"
|
type="text"
|
||||||
className="ml-4 flex-1 bg-th-bkg-2 focus:outline-none"
|
className="ml-4 flex-1 bg-th-bkg-1 focus:outline-none"
|
||||||
placeholder="Search by token or paste address"
|
placeholder="Search by token or paste address"
|
||||||
autoFocus
|
autoFocus
|
||||||
value={search}
|
value={search}
|
||||||
onChange={handleUpdateSearch}
|
onChange={handleUpdateSearch}
|
||||||
/>
|
/>
|
||||||
</div>
|
</div>
|
||||||
|
{popularTokens.length && onTokenSelect ? (
|
||||||
|
<div className="flex flex-wrap px-4">
|
||||||
|
{popularTokens.map((token) => (
|
||||||
|
<button
|
||||||
|
className="mx-1 mb-2 flex items-center rounded-md border border-th-fgd-4 bg-th-bkg-1 py-1 px-3 hover:border-th-fgd-3 focus:border-th-fgd-2"
|
||||||
|
onClick={() => onTokenSelect(token)}
|
||||||
|
key={token.address}
|
||||||
|
>
|
||||||
|
<img
|
||||||
|
alt=""
|
||||||
|
width="16"
|
||||||
|
height="16"
|
||||||
|
src={`/assets/icons/${token.symbol.toLowerCase()}.svg`}
|
||||||
|
className={`mr-1.5`}
|
||||||
|
/>
|
||||||
|
<span className="text-th-fgd-1">{token.symbol}</span>
|
||||||
|
</button>
|
||||||
|
))}
|
||||||
|
</div>
|
||||||
|
) : null}
|
||||||
<FixedSizeList
|
<FixedSizeList
|
||||||
width="100%"
|
width="100%"
|
||||||
height={403}
|
height={403}
|
||||||
|
|
Loading…
Reference in New Issue