chatweb / client /src /App.tsx
cnmksjs's picture
Upload 60 files
e3eb984 verified
import { Routes, Route, Navigate } from 'react-router-dom'
import { useEffect } from 'react'
import { useAuthStore } from './store/authStore'
import { Toaster } from './components/ui/toaster'
// Pages
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'
// Components
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