import { CHAIN_ID_SOLANA } from "@certusone/wormhole-sdk"; import { Button, makeStyles, MenuItem, TextField } from "@material-ui/core"; import { Restore } from "@material-ui/icons"; import { useCallback } from "react"; import { useDispatch, useSelector } from "react-redux"; import { useHistory } from "react-router"; import useIsWalletReady from "../../hooks/useIsWalletReady"; import useTokenBlacklistWarning from "../../hooks/useTokenBlacklistWarning"; import { selectTransferAmount, selectTransferIsSourceComplete, selectTransferShouldLockFields, selectTransferSourceBalanceString, selectTransferSourceChain, selectTransferSourceError, selectTransferSourceParsedTokenAccount, } from "../../store/selectors"; import { incrementStep, setAmount, setSourceChain, } from "../../store/transferSlice"; import { CHAINS, MIGRATION_ASSET_MAP } from "../../utils/consts"; import ButtonWithLoader from "../ButtonWithLoader"; import KeyAndBalance from "../KeyAndBalance"; import StepDescription from "../StepDescription"; import { TokenSelector } from "../TokenSelectors/SourceTokenSelector"; const useStyles = makeStyles((theme) => ({ transferField: { marginTop: theme.spacing(5), }, })); function Source({ setIsRecoveryOpen, }: { setIsRecoveryOpen: (open: boolean) => void; }) { const classes = useStyles(); const dispatch = useDispatch(); const history = useHistory(); const sourceChain = useSelector(selectTransferSourceChain); const parsedTokenAccount = useSelector( selectTransferSourceParsedTokenAccount ); const hasParsedTokenAccount = !!parsedTokenAccount; const isMigrationAsset = sourceChain === CHAIN_ID_SOLANA && !!parsedTokenAccount && !!MIGRATION_ASSET_MAP.get(parsedTokenAccount.mintKey); const uiAmountString = useSelector(selectTransferSourceBalanceString); const amount = useSelector(selectTransferAmount); const error = useSelector(selectTransferSourceError); const isSourceComplete = useSelector(selectTransferIsSourceComplete); const shouldLockFields = useSelector(selectTransferShouldLockFields); const { isReady, statusMessage } = useIsWalletReady(sourceChain); const tokenBlacklistWarning = useTokenBlacklistWarning( sourceChain, parsedTokenAccount?.mintKey ); const handleMigrationClick = useCallback(() => { parsedTokenAccount?.mintKey && history.push("/migrate/" + parsedTokenAccount.mintKey); }, [history, parsedTokenAccount]); const handleSourceChange = useCallback( (event) => { dispatch(setSourceChain(event.target.value)); }, [dispatch] ); const handleAmountChange = useCallback( (event) => { dispatch(setAmount(event.target.value)); }, [dispatch] ); const handleNextClick = useCallback(() => { dispatch(incrementStep()); }, [dispatch]); return ( <>
Select tokens to send through the Wormhole Token Bridge.
{CHAINS.map(({ id, name }) => ( {name} ))} {isReady || uiAmountString ? (
) : null} {isMigrationAsset ? ( ) : ( <> {hasParsedTokenAccount ? ( ) : null} Next )} ); } export default Source;