import { useEffect, useState } from "react"; import { useLocation } from "wouter"; import { createApiClient } from "../api/client"; import type { components } from "../api/schema"; import BorderedContainerWithCaption from "../components/BorderedContainerWithCaption"; import NavigateLink from "../components/NavigateLink"; import UserIcon from "../components/UserIcon"; import { APP_NAME, BASE_PATH } from "../config"; import { useAuth } from "../hooks/useAuth"; import { usePageTitle } from "../hooks/usePageTitle"; type Game = components["schemas"]["Game"]; export default function DashboardPage() { usePageTitle(`Dashboard | ${APP_NAME}`); const { user, isLoggedIn, isLoading: authLoading, logout } = useAuth(); const [, navigate] = useLocation(); const [games, setGames] = useState([]); const [loading, setLoading] = useState(true); useEffect(() => { const apiClient = createApiClient(); apiClient .getGames() .then(({ games }) => setGames(games)) .finally(() => setLoading(false)); }, []); async function handleLogout() { await logout(); navigate("/"); } if (loading || authLoading) { return (

Loading...

); } return (
{isLoggedIn && user?.icon_path && ( )} {isLoggedIn ? (

{user?.display_name}

) : (

試合一覧

)}
{games.length === 0 ? (

試合はありません

) : (
    {games.map((game) => (
  • {game.display_name}
    {isLoggedIn && game.started_at == null && ( 問題を見る )} {isLoggedIn && ( 対戦 )} 観戦
  • ))}
)}
{isLoggedIn ? ( ) : ( ログイン )} {isLoggedIn && user?.is_admin && ( Admin Dashboard )}
); }