Users Hooks
React Query hooks for user data.
useUserEvents
Fetch events for a specific user:
import { useUserEvents } from '@meaple/react-query'
function MyEvents({ userId }) {
const { data: events, isLoading, error } = useUserEvents(userId)
if (isLoading) return <div>Loading your events...</div>
if (error) return <div>Error: {error.message}</div>
return (
<div>
<h2>My Events</h2>
{events?.map(event => (
<div key={event.id}>
<h3>{event.name}</h3>
<p>{event.date}</p>
<p>{event.location}</p>
</div>
))}
</div>
)
}With Authentication
import { useUserEvents } from '@meaple/react-query'
import { useAuth } from '@/hooks/useAuth'
function UserDashboard() {
const { user } = useAuth()
const { data: events } = useUserEvents(user?.id, {
enabled: !!user?.id
})
if (!user) return <div>Please log in</div>
return (
<div>
<h1>Welcome, {user.name}!</h1>
<div>
{events?.map(event => (
<EventCard key={event.id} event={event} />
))}
</div>
</div>
)
}Filtering User Events
function FilteredUserEvents({ userId }) {
const { data: allEvents } = useUserEvents(userId)
const upcomingEvents = allEvents?.filter(
event => new Date(event.date) > new Date()
)
const pastEvents = allEvents?.filter(
event => new Date(event.date) <= new Date()
)
return (
<div>
<section>
<h2>Upcoming Events</h2>
{upcomingEvents?.map(event => (
<EventCard key={event.id} event={event} />
))}
</section>
<section>
<h2>Past Events</h2>
{pastEvents?.map(event => (
<EventCard key={event.id} event={event} />
))}
</section>
</div>
)
}Auto-refresh
const { data: events } = useUserEvents(userId, {
refetchInterval: 30000,
refetchOnWindowFocus: true,
});With Suspense
import { Suspense } from 'react'
function UserEventsWithSuspense({ userId }) {
const { data: events } = useUserEvents(userId, {
suspense: true
})
return (
<div>
{events.map(event => (
<EventCard key={event.id} event={event} />
))}
</div>
)
}
function Page() {
return (
<Suspense fallback={<div>Loading events...</div>}>
<UserEventsWithSuspense userId="123" />
</Suspense>
)
}