diff --git a/apps/web/src/components/PageWithNav.tsx b/apps/web/src/components/PageWithNav.tsx index d334b953..f909d62c 100644 --- a/apps/web/src/components/PageWithNav.tsx +++ b/apps/web/src/components/PageWithNav.tsx @@ -4,6 +4,7 @@ import React from 'react' import { AppNavBar } from './AppNavBar' import { useGameMode } from '../contexts/GameModeContext' import { useUserProfile } from '../contexts/UserProfileContext' +import { GameContextNav } from './nav/GameContextNav' interface PageWithNavProps { navTitle?: string @@ -16,7 +17,6 @@ export function PageWithNav({ navTitle, navEmoji, emphasizeGameContext = false, const { players, activePlayerCount, updatePlayer } = useGameMode() const { profile } = useUserProfile() const [mounted, setMounted] = React.useState(false) - const [hoveredPlayerId, setHoveredPlayerId] = React.useState(null) // Delay mounting animation slightly for smooth transition React.useEffect(() => { @@ -28,7 +28,11 @@ export function PageWithNav({ navTitle, navEmoji, emphasizeGameContext = false, updatePlayer(playerId, { isActive: false }) } - // Transform players to use profile emojis for players 1 and 2 (same as EnhancedChampionArena) + const handleAddPlayer = (playerId: number) => { + updatePlayer(playerId, { isActive: true }) + } + + // Transform players to use profile emojis for players 1 and 2 const activePlayers = players .filter(p => p.isActive) .map(player => ({ @@ -37,144 +41,36 @@ export function PageWithNav({ navTitle, navEmoji, emphasizeGameContext = false, name: player.id === 1 ? profile.player1Name : player.id === 2 ? profile.player2Name : player.name })) + const inactivePlayers = players + .filter(p => !p.isActive) + .map(player => ({ + ...player, + emoji: player.id === 1 ? profile.player1Emoji : player.id === 2 ? profile.player2Emoji : player.emoji, + name: player.id === 1 ? profile.player1Name : player.id === 2 ? profile.player2Name : player.name + })) + // Compute game mode from active player count - const gameMode = activePlayerCount === 1 ? 'single' : + const gameMode = activePlayerCount === 0 ? 'none' : + activePlayerCount === 1 ? 'single' : activePlayerCount === 2 ? 'battle' : - activePlayerCount >= 3 ? 'tournament' : 'single' + activePlayerCount >= 3 ? 'tournament' : 'none' - const gameModeConfig = { - single: { label: 'Solo', emoji: '🎯', color: '#3b82f6' }, - battle: { label: 'Battle', emoji: '⚔️', color: '#8b5cf6' }, - tournament: { label: 'Tournament', emoji: '🏆', color: '#f59e0b' } - } - - const modeInfo = gameModeConfig[gameMode] - - // Use mounted state to trigger initial animation const shouldEmphasize = emphasizeGameContext && mounted + const showFullscreenSelection = shouldEmphasize && activePlayerCount === 0 // Create nav content if title is provided const navContent = navTitle ? ( -
-

- {navEmoji && `${navEmoji} `}{navTitle} -

- - {/* Game Mode Badge */} -
- {modeInfo.emoji} - {modeInfo.label} -
- - {/* Active Players */} - {activePlayers.length > 0 && ( -
- {activePlayers.map(player => ( -
setHoveredPlayerId(player.id)} - onMouseLeave={() => setHoveredPlayerId(null)} - > - {player.emoji} - {hoveredPlayerId === player.id && ( - - )} -
- ))} -
- )} -
+ ) : null return (