import React, { useRef, RefObject, useCallback, useState, useMemo } from 'react' import { Token } from '@pancakeswap/sdk' import { Text, Button, CloseIcon, IconButton, LinkExternal, Input, Link } from '@pancakeswap/uikit' import styled from 'styled-components' import Row, { RowBetween, RowFixed } from 'components/Layout/Row' import { useToken } from 'hooks/Tokens' import { useRemoveUserAddedToken } from 'state/user/hooks' import useUserAddedTokens from 'state/user/hooks/useUserAddedTokens' import { CurrencyLogo } from 'components/Logo' import { getBscScanLink, isAddress } from 'utils' import useActiveWeb3React from 'hooks/useActiveWeb3React' import { useTranslation } from 'contexts/Localization' import Column, { AutoColumn } from '../Layout/Column' import ImportRow from './ImportRow' import { CurrencyModalView } from './types' const Wrapper = styled.div` width: 100%; height: calc(100% - 60px); position: relative; padding-bottom: 60px; ` const Footer = styled.div` position: absolute; bottom: 0; width: 100%; display: flex; justify-content: space-between; align-items: center; ` export default function ManageTokens({ setModalView, setImportToken, }: { setModalView: (view: CurrencyModalView) => void setImportToken: (token: Token) => void }) { const { chainId } = useActiveWeb3React() const { t } = useTranslation() const [searchQuery, setSearchQuery] = useState('') // manage focus on modal show const inputRef = useRef() const handleInput = useCallback((event) => { const input = event.target.value const checksummedInput = isAddress(input) setSearchQuery(checksummedInput || input) }, []) // if they input an address, use it const searchToken = useToken(searchQuery) // all tokens for local lisr const userAddedTokens: Token[] = useUserAddedTokens() const removeToken = useRemoveUserAddedToken() const handleRemoveAll = useCallback(() => { if (chainId && userAddedTokens) { userAddedTokens.map((token) => { return removeToken(chainId, token.address) }) } }, [removeToken, userAddedTokens, chainId]) const tokenList = useMemo(() => { return ( chainId && userAddedTokens.map((token) => ( {token.symbol} removeToken(chainId, token.address)}> )) ) }, [userAddedTokens, chainId, removeToken]) const isAddressValid = searchQuery === '' || isAddress(searchQuery) return ( } onChange={handleInput} isWarning={!isAddressValid} /> {!isAddressValid && {t('Enter valid token address')}} {searchToken && ( setModalView(CurrencyModalView.importToken)} setImportToken={setImportToken} style={{ height: 'fit-content' }} /> )} {tokenList} ) }