| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354 |
- import { BrowserRouter, Routes, Route, Navigate } from 'react-router-dom'
- import { Toaster } from 'react-hot-toast'
- import { AuthProvider, useAuth } from './context/AuthContext'
- import Layout from './components/Layout'
- import Login from './pages/Login'
- import OAuthCallback from './pages/OAuthCallback'
- import Dashboard from './pages/Dashboard'
- import Properties from './pages/Properties'
- import Tenants from './pages/Tenants'
- import Owners from './pages/Owners'
- import Leases from './pages/Leases'
- import LeaseDetail from './pages/LeaseDetail'
- import Payments from './pages/Payments'
- import Charges from './pages/Charges'
- import InvoiceScanner from './pages/InvoiceScanner'
- import Profile from './pages/Profile'
- function PrivateRoute({ children }) {
- const { user, loading } = useAuth()
- if (loading) return <div className="min-h-screen flex items-center justify-center"><div className="animate-spin rounded-full h-10 w-10 border-b-2 border-blue-600"></div></div>
- return user ? children : <Navigate to="/login" replace />
- }
- function PublicRoute({ children }) {
- const { user, loading } = useAuth()
- if (loading) return null
- return user ? <Navigate to="/" replace /> : children
- }
- export default function App() {
- return (
- <AuthProvider>
- <BrowserRouter>
- <Toaster position="top-right" />
- <Routes>
- <Route path="/login" element={<PublicRoute><Login /></PublicRoute>} />
- <Route path="/auth/callback" element={<OAuthCallback />} />
- <Route path="/" element={<PrivateRoute><Layout /></PrivateRoute>}>
- <Route index element={<Dashboard />} />
- <Route path="properties" element={<Properties />} />
- <Route path="tenants" element={<Tenants />} />
- <Route path="owners" element={<Owners />} />
- <Route path="leases" element={<Leases />} />
- <Route path="leases/:id" element={<LeaseDetail />} />
- <Route path="payments" element={<Payments />} />
- <Route path="charges" element={<Charges />} />
- <Route path="scanner" element={<InvoiceScanner />} />
- <Route path="profile" element={<Profile />} />
- </Route>
- </Routes>
- </BrowserRouter>
- </AuthProvider>
- )
- }
|