Events Components
Headless components for displaying events.
ListEvents
Display a list of events:
import { ListEvents } from '@meaple/react-headless-components'
function EventsGrid() {
return (
<ListEvents filters={{ page: 1, limit: 12 }}>
{({ events, isLoading, error, refetch }) => {
if (isLoading) return <LoadingSpinner />
if (error) return <ErrorMessage error={error} />
return (
<div className="grid">
{events?.map(event => (
<div key={event.id} className="card">
<img src={event.image} alt={event.name} />
<h3>{event.name}</h3>
<p>{event.date}</p>
<p>{event.location}</p>
<button onClick={() => router.push(`/events/${event.id}`)}>
View Details
</button>
</div>
))}
</div>
)
}}
</ListEvents>
)
}ListEventTickets
Display tickets for an event:
import { ListEventTickets } from '@meaple/react-headless-components'
function EventTickets({ eventId }) {
return (
<ListEventTickets eventId={eventId}>
{({ tickets, isLoading }) => (
<div>
{isLoading ? (
<p>Loading tickets...</p>
) : (
<div>
{tickets?.map(ticket => (
<div key={ticket.id}>
<h4>{ticket.name}</h4>
<p>${ticket.price}</p>
<p>{ticket.available} available</p>
<button>Select Ticket</button>
</div>
))}
</div>
)}
</div>
)}
</ListEventTickets>
)
}ListEventProducts
Display products for an event:
import { ListEventProducts } from '@meaple/react-headless-components'
function EventMerchandise({ eventId }) {
return (
<ListEventProducts eventId={eventId}>
{({ products, isLoading }) => (
<div className="products">
{products?.map(product => (
<div key={product.id}>
<img src={product.image} alt={product.name} />
<h3>{product.name}</h3>
<p>${product.price}</p>
<button>Add to Cart</button>
</div>
))}
</div>
)}
</ListEventProducts>
)
}ListUserEvents
Display user’s events:
import { ListUserEvents } from '@meaple/react-headless-components'
function MyEvents({ userId }) {
return (
<ListUserEvents userId={userId}>
{({ events, isLoading, error }) => (
<div>
<h2>My Events</h2>
{events?.map(event => (
<div key={event.id}>
<h3>{event.name}</h3>
<p>{new Date(event.date).toLocaleDateString()}</p>
<a href={`/events/${event.id}`}>View Event</a>
</div>
))}
</div>
)}
</ListUserEvents>
)
}With Filters
function FilteredEvents() {
const [filters, setFilters] = useState({
page: 1,
limit: 10,
category: 'music'
})
return (
<div>
<select onChange={(e) => setFilters({ ...filters, category: e.target.value })}>
<option value="music">Music</option>
<option value="sports">Sports</option>
<option value="arts">Arts</option>
</select>
<ListEvents filters={filters}>
{({ events, isLoading }) => (
<div>
{events?.map(event => (
<EventCard key={event.id} event={event} />
))}
</div>
)}
</ListEvents>
</div>
)
}