|
import { Routes, Route, Navigate } from 'react-router-dom' |
|
import { useEffect } from 'react' |
|
import { useAuthStore } from './store/authStore' |
|
import { Toaster } from './components/ui/toaster' |
|
|
|
|
|
import LoginPage from './pages/LoginPage' |
|
import RegisterPage from './pages/RegisterPage' |
|
import ChatPage from './pages/ChatPage' |
|
import AdminPage from './pages/AdminPage' |
|
import ProfilePage from './pages/ProfilePage' |
|
|
|
|
|
import ProtectedRoute from './components/ProtectedRoute' |
|
import LoadingSpinner from './components/LoadingSpinner' |
|
|
|
function App() { |
|
const { user, loading, checkAuth } = useAuthStore() |
|
|
|
useEffect(() => { |
|
checkAuth() |
|
}, [checkAuth]) |
|
|
|
if (loading) { |
|
return ( |
|
<div className="min-h-screen flex items-center justify-center"> |
|
<LoadingSpinner size="lg" /> |
|
</div> |
|
) |
|
} |
|
|
|
return ( |
|
<div className="min-h-screen bg-background"> |
|
<Routes> |
|
{/* Public routes */} |
|
<Route |
|
path="/login" |
|
element={user ? <Navigate to="/chat" replace /> : <LoginPage />} |
|
/> |
|
<Route |
|
path="/register" |
|
element={user ? <Navigate to="/chat" replace /> : <RegisterPage />} |
|
/> |
|
|
|
{/* Protected routes */} |
|
<Route |
|
path="/chat/*" |
|
element={ |
|
<ProtectedRoute> |
|
<ChatPage /> |
|
</ProtectedRoute> |
|
} |
|
/> |
|
<Route |
|
path="/profile" |
|
element={ |
|
<ProtectedRoute> |
|
<ProfilePage /> |
|
</ProtectedRoute> |
|
} |
|
/> |
|
<Route |
|
path="/admin/*" |
|
element={ |
|
<ProtectedRoute requireAdmin> |
|
<AdminPage /> |
|
</ProtectedRoute> |
|
} |
|
/> |
|
|
|
{/* Default redirect */} |
|
<Route |
|
path="/" |
|
element={<Navigate to={user ? "/chat" : "/login"} replace />} |
|
/> |
|
|
|
{/* 404 fallback */} |
|
<Route |
|
path="*" |
|
element={<Navigate to={user ? "/chat" : "/login"} replace />} |
|
/> |
|
</Routes> |
|
|
|
<Toaster /> |
|
</div> |
|
) |
|
} |
|
|
|
export default App |
|
|