import { useState, useEffect, useRef, useCallback } from 'react'; import { getPlayersByIds } from '@bettoredge/api'; import type { PublicPlayerProps } from '@bettoredge/types'; export interface CalcuttaPlayersState { players: Record; loading: boolean; } export const useCalcuttaPlayers = (player_ids: string[]) => { const [state, setState] = useState({ players: {}, loading: false, }); const fetchedRef = useRef>(new Set()); const fetchPlayers = useCallback(async (ids: string[]) => { // Dedupe against already-fetched const newIds = ids.filter(id => id && !fetchedRef.current.has(id)); if (newIds.length === 0) return; setState(prev => ({ ...prev, loading: true })); try { const resp = await getPlayersByIds(newIds); const map: Record = {}; for (const p of resp.players) { map[p.player_id] = p; fetchedRef.current.add(p.player_id); } setState(prev => ({ players: { ...prev.players, ...map }, loading: false, })); } catch { setState(prev => ({ ...prev, loading: false })); } }, []); useEffect(() => { if (player_ids.length > 0) { fetchPlayers(player_ids); } }, [player_ids.join(','), fetchPlayers]); return { ...state, fetchPlayers }; };