From 79792bda85317d4327b37fbe787b9fe45743e8e8 Mon Sep 17 00:00:00 2001 From: ayomaska18 Date: Sat, 26 Oct 2024 12:27:48 +0100 Subject: [PATCH] added transfer ticket component (to be fixed) --- app/page.tsx | 3 + components/sc/transferTicket.tsx | 126 +++++++++++++++++++++++++++++++ 2 files changed, 129 insertions(+) create mode 100644 components/sc/transferTicket.tsx diff --git a/app/page.tsx b/app/page.tsx index bebd006..b4956d5 100644 --- a/app/page.tsx +++ b/app/page.tsx @@ -6,6 +6,7 @@ import FlareFeed from '@/components/sc/getFlareFeed'; import GetEventImages from '@/components/sc/getEventImages'; import GetEventTickets from '@/components/sc/getEventTickets'; import BuyTicket from '@/components/sc/buyTicket'; +import TransferTicket from '@/components/sc/transferTicket'; export default function Home() { return ( @@ -44,6 +45,8 @@ export default function Home() { + +
{ + 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;