import React, { useRef, RefObject, useCallback, useState, useMemo, } from "react"; import Column from "../Column"; import { ExplorerDataType, getExplorerLink } from "../../utils/getExplorerLink"; import { PaddedColumn, Separator, SearchInput } from "./styleds"; import Row, { RowBetween, RowFixed } from "../Row"; import { TYPE, ExternalLinkIcon, TrashIcon, ButtonText, ExternalLink, } from "../../theme"; import { useToken } from "../../hooks/Tokens"; import styled from "styled-components/macro"; import { useUserAddedTokens, useRemoveUserAddedToken, } from "../../state/guser/hooks"; import { Token } from "@uniswap/sdk-core"; import CurrencyLogo from "../CurrencyLogo"; import { isAddress } from "../../utils"; import { useWeb3 } from "../../web3"; import Card from "../Card"; import ImportRow from "./ImportRow"; import useTheme from "../../hooks/useTheme"; import { CurrencyModalView } from "./CurrencySearchModal"; const Wrapper = styled.div` width: 100%; height: calc(100% - 60px); position: relative; padding-bottom: 80px; `; const Footer = styled.div` position: absolute; bottom: 0; width: 100%; border-radius: 20px; border-top-right-radius: 0; border-top-left-radius: 0; border-top: 1px solid ${({ theme }) => theme.bg3}; padding: 20px; text-align: center; `; export default function ManageTokens({ setModalView, setImportToken, }: { setModalView: (view: CurrencyModalView) => void; setImportToken: (token: Token) => void; }) { const { chainId } = useWeb3(); const [searchQuery, setSearchQuery] = useState(""); const theme = useTheme(); // 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 isAddressSearch = isAddress(searchQuery); 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]); return ( } onChange={handleInput} /> {searchQuery !== "" && !isAddressSearch && ( Enter valid token address )} {searchToken && ( setModalView(CurrencyModalView.importToken) } setImportToken={setImportToken} style={{ height: "fit-content" }} /> )} {userAddedTokens?.length} Custom{" "} {userAddedTokens.length === 1 ? "Token" : "Tokens"} {userAddedTokens.length > 0 && ( Clear all )} {tokenList} ); }