| import { createBrowserRouter, redirect, RouterProvider } from 'react-router-dom' | |
| import MainLayout from './layout/MainLayout' | |
| import Home from './pages/Home' | |
| import Settings from './pages/Settings/Settings' | |
| import Friends from './pages/Settings/Friends' | |
| import Password from './pages/Settings/Password' | |
| import Themes from './pages/Settings/Themes' | |
| import PlayLayout from './pages/Play/Layout' | |
| import PlayFriend from './pages/Play/PlayFriend' | |
| import Play from './pages/Play/Play' | |
| import AuthenticationPage from './pages/Authentication/Authentication' | |
| import ChallengeFriend, { playFriendAction } from './pages/Play/ChallengeFriend' | |
| import Profile, { action as profileAction } from './pages/Settings/Profile' | |
| import { getAuthToken, getUserData } from './utils/auth' | |
| import Computer, { playComputerAction } from './pages/Play/Computer' | |
| import ComputerGame from './pages/Play/ComputerGame' | |
| import MultiplayerGame from './pages/Play/MultiplayerGame' | |
| const router = createBrowserRouter([{ | |
| path: '/', | |
| element: <MainLayout />, | |
| loader: () => getUserData() || redirect('/login'), | |
| children: [ | |
| { index: true, element: <Home /> }, | |
| { path: 'home', element: <Home /> }, | |
| { | |
| path: 'play', element: <PlayLayout />, children: [ | |
| { index: true, element: <Play /> }, | |
| { path: 'friend/:friend_username', element: <ChallengeFriend />, action: playFriendAction }, | |
| { path: 'friend', element: <PlayFriend /> }, | |
| { path: 'computer', element: <Computer />, action: playComputerAction }, | |
| { path: 'online', element: <div>Online</div> } | |
| ] | |
| }, | |
| { | |
| path: "game/friend/:roomID", element: <MultiplayerGame /> | |
| }, | |
| { | |
| path: "game/computer", element: <ComputerGame /> | |
| }, | |
| { | |
| path: 'settings', element: <Settings />, children: [ | |
| { index: true, element: <Profile />, action: profileAction }, | |
| { path: 'profile', element: <Profile />, action: profileAction }, | |
| { path: 'themes', element: <Themes /> }, | |
| { path: 'password', element: <Password /> }, | |
| { path: 'friends', element: <Friends /> }, | |
| ] | |
| }, | |
| ] | |
| }, | |
| { | |
| path: '/login', element: <AuthenticationPage isLogin={true} />, loader: () => { if (getAuthToken()) return redirect('/home'); else return null; } | |
| }, { | |
| path: '/signup', element: <AuthenticationPage isLogin={false} />, loader: () => { if (getAuthToken()) return redirect('/signup'); else return null; } | |
| }, { | |
| path: '/logout', loader: () => { getAuthToken() || redirect('/home') } | |
| }]); | |
| function App() { | |
| return ( | |
| <RouterProvider router={router} /> | |
| ) | |
| } | |
| export default App | |