import { useState, useEffect, useMemo } from "react"; import { Divider, Typography, TableContainer, Table, TableHead, TableBody, TableRow, TableCell, useMediaQuery, } from "@mui/material"; import { isAddress, getAddress } from "@ethersproject/address"; import Modal from "../../components/Modal/Modal"; import SwapCard from "../../components/Swap/SwapCard"; import TokenStack from "../../components/TokenStack/TokenStack"; import { DecimalBigNumber } from "../../helpers/DecimalBigNumber"; import { formatNumber } from "../../helpers/"; import { useBalance, useTokenSymbol } from "../../hooks/tokens"; import { DAI_ADDRESSES, FTSO_ADDRESSES, STNK_ADDRESSES, GHST_ADDRESSES } from "../../constants/addresses"; const TokenModal = ({ chainId, account, listOpen, setListOpen, setTokenAddress }) => { const isSmallScreen = useMediaQuery("(max-width: 599px)"); const isVerySmallScreen = useMediaQuery("(max-width: 425px)"); const [address, setAddress] = useState(""); const [userInput, setUserInput] = useState(""); const [isAddressCorrect, setIsAddressCorrect] = useState(false); const setUsedAddress = (token) => { setTokenAddress(token.address); setListOpen(false); } const { symbol: searchSymbol } = useTokenSymbol(chainId, address); const { balance: searchBalance } = useBalance(chainId, address, account); const { balance: daiBalance } = useBalance(chainId, "GDAI", account); const { balance: ftsoBalance } = useBalance(chainId, "FTSO", account); const { balance: stnkBalance } = useBalance(chainId, "STNK", account); const { balance: ghstBalance } = useBalance(chainId, "GHST", account); const { symbol: daiSymbol } = useTokenSymbol(chainId, "GDAI"); const { symbol: ftsoSymbol } = useTokenSymbol(chainId, "FTSO"); const { symbol: stnkSymbol } = useTokenSymbol(chainId, "STNK"); const { symbol: ghstSymbol } = useTokenSymbol(chainId, "GHST"); const searchToken = useMemo(() => { return [{ name: searchSymbol, icons: ["X"], balance: searchBalance, address: address }] }, [searchSymbol, searchBalance, address]); const knownTokens = useMemo(() => { return [ { name: daiSymbol, icons: ["GDAI"], balance: daiBalance, address: DAI_ADDRESSES[chainId] }, { name: ftsoSymbol, icons: ["FTSO"], balance: ftsoBalance, address: FTSO_ADDRESSES[chainId] }, { name: stnkSymbol, icons: ["STNK"], balance: stnkBalance, address: STNK_ADDRESSES[chainId] }, { name: ghstSymbol, icons: ["GHST"], balance: ghstBalance, address: GHST_ADDRESSES[chainId] } ] }, [daiSymbol, ftsoSymbol, stnkSymbol, ghstSymbol, daiBalance, ftsoBalance, stnkBalance, ghstBalance]); useEffect(() => { if (isAddress(userInput)) { setAddress(getAddress(userInput)); setIsAddressCorrect(true); } else { setAddress(""); setIsAddressCorrect(false); } }, [userInput]) return ( setListOpen(false)} > setUserInput(event.currentTarget.value)} /> Token Name {(isAddressCorrect ? searchToken : knownTokens).map((token, index) => { return ( setUsedAddress(token)} hover key={index} id={index + `--token`} data-testid={index + `--token`}> {token.name} {formatNumber(token.balance, 5)} ) })}
) } export default TokenModal;