import { useState, useEffect, useCallback } from 'react'; import { useDubs } from '../provider'; import type { UnifiedEvent, Pagination, GetUpcomingEventsParams, QueryResult } from '../types'; export function useEvents( params?: GetUpcomingEventsParams, ): QueryResult<{ events: UnifiedEvent[]; pagination: Pagination }> { const { client } = useDubs(); const [data, setData] = useState<{ events: UnifiedEvent[]; pagination: Pagination } | null>(null); const [loading, setLoading] = useState(true); const [error, setError] = useState(null); // Serialize params for dependency comparison const paramKey = JSON.stringify(params ?? {}); const fetchData = useCallback(async () => { setLoading(true); setError(null); try { const result = await client.getUpcomingEvents(params); setData(result); } catch (err) { setError(err instanceof Error ? err : new Error(String(err))); } finally { setLoading(false); } }, [client, paramKey]); // eslint-disable-line react-hooks/exhaustive-deps useEffect(() => { fetchData(); }, [fetchData]); return { data, loading, error, refetch: fetchData }; }