diff --git a/lib/fetchEventDetails.ts b/lib/fetchEventDetails.ts new file mode 100644 index 0000000..4fe42d2 --- /dev/null +++ b/lib/fetchEventDetails.ts @@ -0,0 +1,78 @@ +import { ethers } from 'ethers'; +import { getContract } from './ethers'; + +interface GetEventDetailsProps { + eventID: number; + toast: ToastFunction; +} + +type ToastFunction = (options: { + title: string; + variant?: 'default' | 'destructive' | null | undefined; +}) => void; + +declare global { + interface Window { + ethereumProvider?: ethers.providers.ExternalProvider & { + isMetaMask?: boolean; + request?: (method: string, params?: unknown[]) => Promise; + }; + } +} + +export const fetchEventDetails = async ({ + eventID, + toast, +}: GetEventDetailsProps) => { + try { + console.log('Starting events call'); + if (typeof window.ethereum === 'undefined') { + console.error('Ethereum provider not found'); + toast({ + title: 'Please install MetaMask or another Ethereum wallet', + variant: 'destructive', + }); + return; + } + + console.log('Connecting to Ethereum provider'); + const provider = new ethers.providers.Web3Provider(window.ethereum); + const contract = getContract(); + + console.log('Requesting data'); + const eventData = await contract.callStatic.events(eventID); + const eventImages = await contract.callStatic.getEventImages(eventID); + console.log(eventData); + + // toast({ + // title: `Data fetched successfully!`, + // }); + + return { + EventID: eventID, + name: eventData.name, + date: eventData.eventStartDate.toNumber(), + location: eventData.location, + ticketPrice: eventData.ticketPrice.div(ethers.BigNumber.from("1000000000000000000")).toNumber() / 100, + description: eventData.description, + capacity: eventData.capacity.toNumber(), + ticketsSold: eventData.ticketsSold.toNumber(), + imageUrl: eventImages, + host: eventData.eventHost + } + } catch (error) { + console.error('Error in createEvent:', error); + // if (error instanceof Error) { + // toast({ + // title: `Transaction failed: ${error.message}`, + // variant: 'destructive', + // }); + // } else { + // toast({ + // title: 'Transaction failed. Please try again.', + // variant: 'destructive', + // }); + // } + throw error; + } +};