'use client'; import React, { useState } from 'react'; import { ethers } from 'ethers'; import { getContract } from '@/lib/ethers'; declare global { interface Window { ethereum: ethers.providers.ExternalProvider; } } const TransferTicket = () => { const [ticketId, setTicketId] = useState(null); const [recipientAddress, setRecipientAddress] = useState(''); const [transactionHash, setTransactionHash] = useState(null); const [isWalletConnected, setIsWalletConnected] = useState(false); const [walletAddress, setWalletAddress] = useState(null); const [errorMessage, setErrorMessage] = useState(null); // Connect Wallet const handleConnectWallet = async () => { try { if (typeof window.ethereum !== 'undefined' && window.ethereum.request) { const accounts = await window.ethereum.request({ method: 'eth_requestAccounts', }); if (accounts.length > 0) { setIsWalletConnected(true); setWalletAddress(accounts[0]); console.log('Wallet connected:', accounts[0]); } } else { alert('Please install MetaMask or another Ethereum wallet'); } } catch (error) { console.error('Error connecting to wallet:', error); } }; // Handle transferring the ticket const handleTransferTicket = async () => { if (ticketId !== null) { if (ticketId < 0) { alert('Please enter a valid Ticket ID.'); return; } } if (!ethers.utils.isAddress(recipientAddress)) { alert('Please enter a valid recipient address.'); return; } try { // Get the provider and signer const provider = new ethers.providers.Web3Provider(window.ethereum); const signer = provider.getSigner(); const contract = getContract().connect(signer); // Call `transferTicket` function const tx = await contract.transferTicket(ticketId, recipientAddress); const receipt = await tx.wait(); setTransactionHash(receipt.transactionHash); console.log( 'Ticket transferred successfully, transaction hash:', receipt.transactionHash ); setErrorMessage(null); } catch (error) { setErrorMessage( 'Error transferring ticket. Please check ticket ID or recipient address.' ); console.error('Error transferring ticket:', error); } }; return (

Transfer Ticket

{!isWalletConnected ? ( ) : (

Connected Wallet: {walletAddress}

setTicketId(Number(e.target.value))} className="border p-2 mb-2" /> setRecipientAddress(e.target.value)} className="border p-2 mb-2" /> {errorMessage &&

{errorMessage}

} {transactionHash && (

Ticket transfer successful! Hash:{' '} {transactionHash}

)}
)}
); }; export default TransferTicket;