Files
FlowReader/web/src/App.tsx
T

54 lines
1.5 KiB
TypeScript

import { useEffect } from 'react';
import { BrowserRouter, Routes, Route, Navigate } from 'react-router-dom';
import { QueryClient, QueryClientProvider } from '@tanstack/react-query';
import { useAuthStore } from './stores/authStore';
import { authApi } from './api/auth';
import { LoginPage } from './pages/LoginPage';
import { RegisterPage } from './pages/RegisterPage';
import { DashboardPage } from './pages/DashboardPage';
import { ProtectedRoute } from './components/ProtectedRoute';
import './App.css';
const queryClient = new QueryClient({
defaultOptions: {
queries: {
retry: 1,
staleTime: 5 * 60 * 1000, // 5 minutes
},
},
});
function AuthChecker({ children }: { children: React.ReactNode }) {
const { setUser, setLoading } = useAuthStore();
useEffect(() => {
// Check if user is authenticated on app load
authApi.getMe()
.then((user) => setUser(user))
.catch(() => setUser(null));
}, [setUser, setLoading]);
return <>{children}</>;
}
function App() {
return (
<QueryClientProvider client={queryClient}>
<BrowserRouter>
<AuthChecker>
<Routes>
<Route path="/login" element={<LoginPage />} />
<Route path="/register" element={<RegisterPage />} />
<Route element={<ProtectedRoute />}>
<Route path="/" element={<DashboardPage />} />
</Route>
<Route path="*" element={<Navigate to="/" replace />} />
</Routes>
</AuthChecker>
</BrowserRouter>
</QueryClientProvider>
);
}
export default App;