import { useEffect, useState, FormEvent } from 'react'; import { useContract, useSigner } from 'wagmi'; import contracts from '../../contracts/hardhat_contracts.json'; import { NETWORK_ID } from '../config'; export const SetGreeter = () => { const chainId = Number(NETWORK_ID); const [newGreeter, setNewGreeter] = useState(''); const [loading, setLoading] = useState(true); const [error, setError] = useState(''); const { data: signerData } = useSigner(); const allContracts = contracts as any; const greeterAddress = allContracts[chainId][0].contracts.Greeter.address; const greeterABI = allContracts[chainId][0].contracts.Greeter.abi; const greeterContract = useContract({ address: greeterAddress, abi: greeterABI, signerOrProvider: signerData, }); useEffect(() => { if (signerData) { setError(''); setLoading(false); } else { setLoading(false); setError('please connect your wallet'); } }, [signerData]); const handleSubmit = async (e: FormEvent) => { e.preventDefault(); try { setLoading(true); const tx = await greeterContract?.setGreeting(newGreeter); await tx.wait(); setNewGreeter(''); setLoading(false); } catch (error) { setError('txn failed, check contract'); setLoading(false); } }; if (loading) { return
Loading...
; } if (error) { return
{error}
; } return (
handleSubmit(e)}> setNewGreeter(e.target.value)} />
); };