import { Routes, Route, Navigate, useLocation } from 'react-router-dom'; import { useAuth } from '@/hooks/useAuth'; import Layout from '@/components/layout/Layout'; import AppNavigation from '@/components/layout/Sidebar'; import { ReleaseNotesDialog } from '@/components/ReleaseNotesDialog'; import LoginPage from '@/pages/LoginPage'; import AdminPage from '@/pages/AdminPage'; import TrackerPage from '@/pages/TrackerPage'; import CalendarPage from '@/pages/CalendarPage'; import SummaryPage from '@/pages/SummaryPage'; import BillsPage from '@/pages/BillsPage'; import CategoriesPage from '@/pages/CategoriesPage'; import SettingsPage from '@/pages/SettingsPage'; import StatusPage from '@/pages/StatusPage'; import AnalyticsPage from '@/pages/AnalyticsPage'; import ReleaseNotesPage from '@/pages/ReleaseNotesPage'; import AboutPage from '@/pages/AboutPage'; import DataPage from '@/pages/DataPage'; import ProfilePage from '@/pages/ProfilePage'; import ErrorBoundary from '@/components/ErrorBoundary'; function RequireAuth({ children, role }) { const { user, singleUserMode } = useAuth(); const location = useLocation(); // Loading state if (user === undefined) { return (
Loading...
); } // Single-user mode bypass if (singleUserMode && role === 'user') return children; // Not authenticated if (!user) { return ; } const roleAllowed = !role || user.role === role || (role === 'user' && user.role === 'admin'); if (role === 'user' && user.is_default_admin) { return ; } // Role mismatch if (!roleAllowed) { return ; } return children; } function AdminShell({ children }) { return (
{children}
); } export default function App() { const { user } = useAuth(); return ( <> {/* Release notes (only for user role) */} {user?.role === 'user' && } } /> } /> } /> } /> } /> } /> } /> } /> } > } /> } /> } /> } /> } /> } /> } /> } /> } /> } /> ); }