70 lines
1.4 KiB
TypeScript
70 lines
1.4 KiB
TypeScript
import {
|
|
createBrowserRouter,
|
|
Navigate,
|
|
RouterProvider,
|
|
} from 'react-router-dom';
|
|
import { Suspense } from 'react';
|
|
import Chat from './pages/Chat';
|
|
import Login from './pages/Login';
|
|
import Signup from './pages/Signup';
|
|
import Settings from './pages/Settings';
|
|
import Lost from './pages/404';
|
|
import { AuthProvider } from '@/utils/AuthProvider.tsx';
|
|
import ProtectedRoutes from './utils/ProtectedRoutes';
|
|
import PublicRoute from './utils/PublicRoute';
|
|
import { ChatProvider } from './context/chat/ChatProvider';
|
|
import LoadingScreen from './components/LoadingScreen';
|
|
|
|
const router = createBrowserRouter([
|
|
{
|
|
path: '/',
|
|
element: <Navigate to="/chat" replace />,
|
|
},
|
|
{
|
|
element: <ProtectedRoutes />,
|
|
children: [
|
|
{
|
|
path: '/chat',
|
|
element: (
|
|
<Suspense fallback={<LoadingScreen />}>
|
|
<ChatProvider>
|
|
<Chat />
|
|
</ChatProvider>
|
|
</Suspense>
|
|
),
|
|
},
|
|
{
|
|
path: '/settings',
|
|
element: <Settings />,
|
|
},
|
|
],
|
|
},
|
|
{
|
|
element: <PublicRoute />,
|
|
children: [
|
|
{
|
|
path: '/login',
|
|
element: <Login />,
|
|
},
|
|
{
|
|
path: '/signup',
|
|
element: <Signup />,
|
|
},
|
|
],
|
|
},
|
|
{
|
|
path: '*',
|
|
element: <Lost />,
|
|
},
|
|
]);
|
|
|
|
function App() {
|
|
return (
|
|
<AuthProvider>
|
|
<RouterProvider router={router} />
|
|
</AuthProvider>
|
|
);
|
|
}
|
|
|
|
export default App;
|