65 lines
1.8 KiB
TypeScript
65 lines
1.8 KiB
TypeScript
import React from 'react';
|
|
import { BrowserRouter, Routes, Route, Navigate } from 'react-router-dom';
|
|
import { QueryClientProvider } from '@tanstack/react-query';
|
|
import { queryClient } from './lib/queryClient';
|
|
import { AuthProvider, ProtectedRoute, useAuth } from './auth/AuthProvider';
|
|
import { ToastProvider } from './components/ui/Toast';
|
|
import { LandingPage } from './components/landing/LandingPage';
|
|
import { DashboardPage } from './components/dashboard/DashboardPage';
|
|
|
|
function AppRoutes() {
|
|
const { isAuthenticated, isLoading, login } = useAuth();
|
|
|
|
if (isLoading) {
|
|
return (
|
|
<div className="min-h-screen flex items-center justify-center bg-slate-950 text-slate-400 text-xs">
|
|
<div className="flex flex-col items-center gap-3">
|
|
<div className="h-6 w-6 animate-spin rounded-full border-2 border-emerald-500 border-t-transparent" />
|
|
<span>Loading session...</span>
|
|
</div>
|
|
</div>
|
|
);
|
|
}
|
|
|
|
return (
|
|
<Routes>
|
|
<Route
|
|
path="/"
|
|
element={
|
|
isAuthenticated ? (
|
|
<Navigate to="/dashboard" replace />
|
|
) : (
|
|
<LandingPage onLogin={login} isLoading={isLoading} />
|
|
)
|
|
}
|
|
/>
|
|
<Route
|
|
path="/dashboard"
|
|
element={
|
|
<ProtectedRoute>
|
|
<DashboardPage />
|
|
</ProtectedRoute>
|
|
}
|
|
/>
|
|
<Route
|
|
path="*"
|
|
element={<Navigate to={isAuthenticated ? '/dashboard' : '/'} replace />}
|
|
/>
|
|
</Routes>
|
|
);
|
|
}
|
|
|
|
export default function App() {
|
|
return (
|
|
<QueryClientProvider client={queryClient}>
|
|
<ToastProvider>
|
|
<AuthProvider>
|
|
<BrowserRouter>
|
|
<AppRoutes />
|
|
</BrowserRouter>
|
|
</AuthProvider>
|
|
</ToastProvider>
|
|
</QueryClientProvider>
|
|
);
|
|
}
|