'use client'; import React, { useState, useEffect } from 'react'; import { ethers } from 'ethers'; import Header from '../../components/custom/header'; import Footer from '../../components/custom/footer'; import { Button } from '@/components/ui/button'; import { Card, CardContent, CardDescription, CardHeader, CardTitle, } from '@/components/ui/card'; import EventManagerABI from '../../contracts/EventManagerABI.json'; const RPC_URL = process.env.NEXT_PUBLIC_RPC_URL; const CONTRACT_ADDRESS = process.env.NEXT_PUBLIC_CONTRACT_ADDRESS; if (!RPC_URL || !CONTRACT_ADDRESS) { console.error( 'Missing environment variables. Please check your .env.local file.' ); } interface TicketDetails { ticketId: number; eventName: string; eventLocation: string; eventDate: string; imageUrl: string; } export default function Component() { const [isClient, setIsClient] = useState(false); const [userTickets, setUserTickets] = useState([]); const [userAddress, setUserAddress] = useState(''); const [loading, setLoading] = useState(false); const [error, setError] = useState(''); const [networkName, setNetworkName] = useState(''); useEffect(() => { setIsClient(true); checkNetwork(); }, []); const checkNetwork = async () => { if (typeof window.ethereum !== 'undefined') { try { const provider = new ethers.providers.Web3Provider(window.ethereum); const network = await provider.getNetwork(); console.log('Network:', network); setNetworkName(network.name); } catch (error) { console.error('Failed to get network:', error); } } }; const connectWallet = async () => { setLoading(true); setError(''); if (typeof window.ethereum !== 'undefined') { try { await window.ethereum.request({ method: 'eth_requestAccounts' }); const provider = new ethers.providers.Web3Provider(window.ethereum); const signer = provider.getSigner(); const address = await signer.getAddress(); setUserAddress(address); await fetchUserTickets(address); } catch (error) { console.error('Failed to connect wallet:', error); setError('Failed to connect wallet. Please try again.'); } } else { setError('Please install MetaMask!'); } setLoading(false); }; const fetchUserTickets = async (address: string) => { try { const provider = new ethers.providers.JsonRpcProvider(RPC_URL); const contract = new ethers.Contract( CONTRACT_ADDRESS!, EventManagerABI, provider ); const ticketIds = await contract.getUserTickets(address); console.log('Raw tickets data:', ticketIds); const ticketDetailsPromises = ticketIds.map( async (ticketId: ethers.BigNumber) => { const ticketNumber = ticketId.toNumber(); const ticket = await contract.tickets(ticketNumber); const event = await contract.events(ticket.eventId); console.log(`Ticket ${ticketNumber} data:`, ticket); console.log(`Event ${ticket.eventId} data:`, event); // Process event data to ensure it has all necessary fields const eventDate = new Date(event.eventStartDate.toNumber() * 1000); return { ticketId: ticketNumber, eventName: event.name || 'Unnamed Event', eventLocation: event.location || 'No location specified', eventDate: eventDate.toISOString().split('T')[0], imageUrl: event.images && event.images.length > 0 ? event.images[0] : 'https://via.placeholder.com/150', }; } ); const details = (await Promise.all(ticketDetailsPromises)).filter( Boolean ); setUserTickets(details); } catch (error) { console.error('Failed to fetch user tickets:', error); // @ts-ignore setError(`Failed to fetch user tickets: ${error.message}`); } }; return (
{isClient && ( )}

Your Profile

{userAddress ? (

Connected Address: {userAddress}

) : (

Not connected

)} {error && (
{error}
)} {loading ? (

Loading...

) : (
{userTickets.length > 0 ? ( userTickets.map((details) => ( {details.eventName} {details.eventName} {details.eventLocation}

Ticket ID: {details.ticketId}

Date: {details.eventDate}

)) ) : (

You don't have any tickets yet.

)}
)}
); }