Spaces:
Runtime error
Runtime error
| import { useEffect, useState } from "react"; | |
| import { | |
| BrowserRouter as Router, | |
| Routes, | |
| Route, | |
| Navigate, | |
| } from "react-router-dom"; | |
| import Profile from "@/pages/profile"; | |
| import Chat from "@/pages/chat"; | |
| import Auth from "@/pages/auth"; | |
| import PracticeZone from "@/pages/practice-zone"; // Add this import | |
| import apiClient from "@/lib/api-client"; | |
| import { GET_USERINFO_ROUTE } from "@/lib/constants"; | |
| import { useAppStore } from "@/store"; | |
| const PrivateRoute = ({ children }) => { | |
| const { userInfo } = useAppStore(); | |
| const isAuthenticated = !!userInfo; | |
| return isAuthenticated ? children : <Navigate to="/auth" />; | |
| }; | |
| const AuthRoute = ({ children }) => { | |
| const { userInfo } = useAppStore(); | |
| const isAuthenticated = !!userInfo; | |
| return isAuthenticated ? <Navigate to="/chat" /> : children; | |
| }; | |
| function App() { | |
| const { userInfo, setUserInfo } = useAppStore(); | |
| const [loading, setLoading] = useState(true); | |
| useEffect(() => { | |
| const getUserData = async () => { | |
| try { | |
| const response = await apiClient.get(GET_USERINFO_ROUTE, { | |
| withCredentials: true, | |
| }); | |
| if (response.status === 200 && response.data.id) { | |
| setUserInfo(response.data); | |
| } else { | |
| setUserInfo(undefined); | |
| } | |
| } catch (error) { | |
| setUserInfo(undefined); | |
| } finally { | |
| setLoading(false); | |
| } | |
| }; | |
| if (!userInfo) { | |
| getUserData(); | |
| } else { | |
| setLoading(false); | |
| } | |
| }, [userInfo, setUserInfo]); | |
| if (loading) { | |
| return <div>Loading...</div>; | |
| } | |
| return ( | |
| <Router> | |
| <Routes> | |
| <Route | |
| path="/auth" | |
| element={ | |
| <AuthRoute> | |
| <Auth /> | |
| </AuthRoute> | |
| } | |
| /> | |
| <Route | |
| path="/chat" | |
| element={ | |
| <PrivateRoute> | |
| <Chat /> | |
| </PrivateRoute> | |
| } | |
| /> | |
| <Route | |
| path="/profile" | |
| element={ | |
| <PrivateRoute> | |
| <Profile /> | |
| </PrivateRoute> | |
| } | |
| /> | |
| <Route | |
| path="/practice-zone" | |
| element={ | |
| <PrivateRoute> | |
| <PracticeZone /> | |
| </PrivateRoute> | |
| } | |
| /> | |
| <Route path="*" element={<Navigate to="/auth" />} /> | |
| </Routes> | |
| </Router> | |
| ); | |
| } | |
| export default App; |