import React, { useCallback } from "react"; import { Routes, Route } from "react-router-dom"; import { Helmet } from "react-helmet"; import { UserProfile } from "@customTypes/Profile"; import Sidebar from "./components/Sidebar"; import "./App.css"; import Profile from "@pages/Profile"; import Games from "@pages/Games"; import Maps from "@pages/Maps"; import User from "@pages/User"; import Homepage from "@pages/Homepage"; import UploadRunDialog from "./components/UploadRunDialog"; import Rules from "@pages/Rules"; import About from "@pages/About"; import { Game } from "@customTypes/Game"; import { API } from "./api/Api"; import Maplist from "@pages/Maplist"; import Rankings from "@pages/Rankings"; import { get_user_id_from_token, get_user_mod_from_token } from "./utils/Jwt"; const App: React.FC = () => { const [token, setToken] = React.useState(undefined); const [profile, setProfile] = React.useState( undefined ); const [isModerator, setIsModerator] = React.useState(false); const [games, setGames] = React.useState([]); const [uploadRunDialog, setUploadRunDialog] = React.useState(false); const _fetch_token = async () => { const token = await API.get_token(); setToken(token); }; const _fetch_games = async () => { const games = await API.get_games(); setGames(games); }; const _set_profile = useCallback( async (user_id?: string) => { if (user_id && token) { const user = await API.get_profile(token); setProfile(user); } }, [token] ); React.useEffect(() => { if (token === undefined) { setProfile(undefined); setIsModerator(false); } else { setProfile({} as UserProfile); // placeholder before we call actual user profile _set_profile(get_user_id_from_token(token)); const modStatus = get_user_mod_from_token(token); if (modStatus) { setIsModerator(true); } else { setIsModerator(false); } } }, [token, _set_profile]); React.useEffect(() => { _fetch_token(); _fetch_games(); }, []); return ( <> LPHUB { setUploadRunDialog(false); if (updateProfile) { _set_profile(get_user_id_from_token(token)); } }} games={games} /> setUploadRunDialog(true)} /> } /> _set_profile(get_user_id_from_token(token))} /> } /> } /> } /> }> } /> } /> } /> }> ); }; export default App;