import { useNavigate } from "react-router"; import LoadingDisplay from "../components/LoadingDisplay"; import { NavBar } from "../components/NavBar"; import { useAuth } from "../contexts/AuthContext"; import type { SupportedGame } from "../types/game"; import SessionExpiredPopup from "../components/SessionExpiredPopup"; import { useState, useEffect } from "react"; import dancerushImage from "../assets/games/dancerush.webp"; import dancearoundImage from "../assets/games/dancearound.webp"; import divaImage from "../assets/games/diva.webp"; import musicdiverImage from "../assets/games/music_diver.webp"; import reflecbeatImage from "../assets/games/reflecbeat.webp"; import nostalgiaImage from "../assets/games/nostalgia.webp"; import taikoImage from "../assets/games/taiko.webp"; const Home = () => { const { user, isLoading, logout } = useAuth(); const [supportedGames, setSupportedGames] = useState([]); const [gamesLoading, setGamesLoading] = useState(true); const navigate = useNavigate(); const handleLogout = async () => { try { await logout(); navigate("/"); } catch (error) { console.error("Logout failed:", error); alert("Network error during logout. Please try again."); } }; const getGameImage = (internalName: string) => { switch (internalName) { case "dancerush": { return dancerushImage; } case "dancearound": { return dancearoundImage; } case "diva": { return divaImage; } case "musicdiver": { return musicdiverImage; } case "reflecbeat": { return reflecbeatImage; } case "nostalgia": { return nostalgiaImage; } case "taiko": { return taikoImage; } default: { return null; } } }; useEffect(() => { const fetchSupportedGames = async () => { try { const response = await fetch( import.meta.env.VITE_API_URL + "/supportedGames", ); if (!response.ok) { throw new Error("Failed to fetch supported games"); } const data = await response.json(); setSupportedGames(data); } catch (error) { console.error("Failed to fetch supported games:", error); alert("Failed to load supported games. Please refresh the page."); } finally { setGamesLoading(false); } }; fetchSupportedGames(); }, []); if (isLoading || gamesLoading) { return ( ); } if (!user) { return ; } return (
{/* Main Content */}
{/* Header */}

Dashboard

Track your rhythm game progress and performance

{/* Supported Games */}
{supportedGames.map((game) => (
navigate(`/score?game=${game.internalName}`)} >
{getGameImage(game.internalName) !== null ? ( {game.formattedName} ) : (
)}

{game.formattedName}

{game.description}

))}
); }; export default Home;