import { useEffect, useState } from "react"; import { useNavigate } from "react-router"; import { toast } from "react-toastify"; import { isAddress, parseEther } from "viem"; import { useConnection, useSendTransaction, useWaitForTransactionReceipt } from "wagmi"; export function TransferPage() { const { isConnected } = useConnection(); const navigate = useNavigate(); const [inputAddress, setInputAddress] = useState(''); const [inputValue, setInputValue] = useState(''); const { data: transactionHash, isPending: isSendingTransaction, error, mutate: sendTransaction } = useSendTransaction(); const { data: receipt, isPending, isFetching } = useWaitForTransactionReceipt({ hash: transactionHash, query: { // not stricly needed, because if transactionHash is not defined, // in current versions of wagmi it defaults to disabled // (but, it's good to know so you can control dependent queries) enabled: !!transactionHash } }); useEffect(() => { if (!isConnected) { navigate('/status'); } }, [isConnected, navigate]); function onSubmit(e) { e.preventDefault(); if (!isAddress(inputAddress)) { return toast.error('Invalid address.'); } if (!inputValue || isNaN(Number(inputValue)) || Number(inputValue) <= 0) { return toast.error('Invalid value.'); } sendTransaction({ to: inputAddress, value: parseEther(inputValue) }) } return (

Transfer ETH

setInputAddress(e.target.value)} /> setInputValue(e.target.value)} />
{error &&

An error occurred. Please check the address and the value.

} {(isPending && isFetching) &&

Confirming...

} {receipt &&

Status: {receipt.status}

}
); }