"use client"; import { useEffect, useState } from "react"; interface Player { name: string; position: string; team: string | null; tag: string | null; country: string | null; logo: string | null; championId: number; teamId: number; wr: number; championImage: string; countryFlag: string; positionIcon: string; } interface LobbyData { inGame: boolean; gameId?: number; players?: Player[]; } export default function Lobby ( { player }: { player: string } ) { const [ data, setData ] = useState( null ); const [ lastGameId, setLastGameId ] = useState( null ); const [ showAnimation, setShowAnimation ] = useState( false ); useEffect( () => { const fetchLobby = async () => { const res = await fetch( `/api/lobby/${ player }` ); if ( !res.ok ) return; const json = await res.json(); setData( json ); if ( json.inGame && json.gameId !== lastGameId ) { setShowAnimation( true ); setLastGameId( json.gameId ); } }; fetchLobby(); const interval = setInterval( fetchLobby, 45 * 1000 ); return () => clearInterval( interval ); }, [ player, lastGameId ] ); if ( !data || !data.inGame || !data.players ) return null; const overlayClass = `overlay slide-animation max-h-screen grid grid-rows-2 items-center font-sans font-bold tracking-wide ${ showAnimation ? "" : "hidden" }`; return (
setShowAnimation( false ) }> { [ 200, 100 ].map( ( teamId ) => (
{ data.players .filter( ( p ) => p.teamId === teamId ) .map( ( player, i ) => { const playerClass = "player flex flex-row justify-between items-center my-2 min-w-56 w-full max-w-[400px] bg-opacity-50 rounded-xl shadow-md " + ( teamId === 100 ? "bg-sky-800" : "bg-red-800" ); return (
{ player.tag ? `${ player.tag } ${ player.name }` : player.name }
{ player.wr }%
{ player.logo && (
) }
); } ) }
) ) }
); }