import { useEffect, useState } from "react"; import { useLocation } from "wouter"; import { createApiClient } from "../api/client"; import type { components } from "../api/schema"; import { getToken } from "../auth"; 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, logout } = useAuth(); const [, navigate] = useLocation(); const [games, setGames] = useState([]); const [loading, setLoading] = useState(true); useEffect(() => { const token = getToken(); if (!token) return; const apiClient = createApiClient(token); apiClient .getGames() .then(({ games }) => setGames(games)) .finally(() => setLoading(false)); }, []); function handleLogout() { logout(); navigate("/"); } if (loading) { return (

Loading...

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

{user?.display_name}

{games.length === 0 ? (

エントリーできる試合はありません

) : (
    {games.map((game) => (
  • {game.display_name}
    対戦 観戦
  • ))}
)}
{user?.is_admin && ( Admin Dashboard )}
); }