budget-view-finance/src/App.tsx
gpt-engineer-app[bot] 002836773d Fix: React refresh preamble error
The error "React refresh preamble was not loaded" in `sonner.tsx` suggests a problem with the Vite configuration or React refresh setup. The AI will investigate the Vite configuration (`vite.config.ts`) and the component's import/export structure to ensure proper React refresh functionality.
2025-05-22 14:15:37 +00:00

77 lines
3.2 KiB
TypeScript

import { BrowserRouter as Router, Routes, Route, Navigate } from 'react-router-dom';
import { Suspense, lazy, useEffect } from 'react';
import { Toaster } from "@/components/ui/sonner";
import Auth from './pages/Auth';
import ProtectedRoute from './components/auth/ProtectedRoute';
import { authStore } from './stores/authStore';
// Lazy-loaded components
const Dashboard = lazy(() => import('./pages/Index'));
const Transacoes = lazy(() => import('./pages/Transacoes'));
const Categorias = lazy(() => import('./pages/Categorias'));
const Metas = lazy(() => import('./pages/Metas'));
const Calendario = lazy(() => import('./pages/Calendario'));
const WhatsApp = lazy(() => import('./pages/WhatsApp'));
const GruposWhatsApp = lazy(() => import('./pages/GruposWhatsApp'));
const NotFound = lazy(() => import('./pages/NotFound'));
const CartoesCredito = lazy(() => import('./pages/CartoesCredito'));
function App() {
const isLoggedIn = authStore((state) => state.isLoggedIn);
const setLoggedIn = authStore((state) => state.setLoggedIn);
// Initialize authStore state once at mount time
useEffect(() => {
const storedAuth = localStorage.getItem('autenticado') === 'true';
setLoggedIn(storedAuth);
}, [setLoggedIn]);
return (
<Router>
<Toaster />
<Routes>
{/* The auth route should not be inside ProtectedRoute */}
<Route
path="/auth"
element={isLoggedIn ? <Navigate to="/" replace /> : <Auth />}
/>
{/* Protected routes */}
<Route path="/" element={
<ProtectedRoute>
<Suspense fallback={<div className="flex items-center justify-center min-h-screen">Carregando...</div>}>
<Dashboard />
</Suspense>
</ProtectedRoute>
} />
<Route path="/transacoes" element={
<ProtectedRoute>
<Suspense fallback={<div className="flex items-center justify-center min-h-screen">Carregando...</div>}>
<Transacoes />
</Suspense>
</ProtectedRoute>
} />
<Route path="/cartoes" element={<ProtectedRoute><Suspense fallback={<div>Carregando...</div>}><CartoesCredito /></Suspense></ProtectedRoute>} />
<Route path="/categorias" element={<ProtectedRoute><Suspense fallback={<div>Carregando...</div>}><Categorias /></Suspense></ProtectedRoute>} />
<Route path="/metas" element={<ProtectedRoute><Suspense fallback={<div>Carregando...</div>}><Metas /></Suspense></ProtectedRoute>} />
<Route path="/calendario" element={<ProtectedRoute><Suspense fallback={<div>Carregando...</div>}><Calendario /></Suspense></ProtectedRoute>} />
<Route path="/whatsapp" element={<ProtectedRoute><Suspense fallback={<div>Carregando...</div>}><WhatsApp /></Suspense></ProtectedRoute>} />
<Route path="/grupos-whatsapp" element={<ProtectedRoute><Suspense fallback={<div>Carregando...</div>}><GruposWhatsApp /></Suspense></ProtectedRoute>} />
{/* Not found route */}
<Route path="*" element={
<Suspense fallback={<div className="flex items-center justify-center min-h-screen">Carregando...</div>}>
<NotFound />
</Suspense>
} />
</Routes>
</Router>
);
}
export default App;