import { Routes, Route, Navigate } from 'react-router-dom'; import { useAuthStore } from './stores/authStore'; import { AppLayout } from './components/layout/AppLayout'; import { LoginPage } from './pages/auth/LoginPage'; import { RegisterPage } from './pages/auth/RegisterPage'; import { SelectOrgPage } from './pages/auth/SelectOrgPage'; import { ActivatePage } from './pages/auth/ActivatePage'; import { DashboardPage } from './pages/dashboard/DashboardPage'; import { AccountsPage } from './pages/accounts/AccountsPage'; import { TransactionsPage } from './pages/transactions/TransactionsPage'; import { BudgetsPage } from './pages/budgets/BudgetsPage'; import { UnitsPage } from './pages/units/UnitsPage'; import { InvoicesPage } from './pages/invoices/InvoicesPage'; import { PaymentsPage } from './pages/payments/PaymentsPage'; import { VendorsPage } from './pages/vendors/VendorsPage'; import { ProjectsPage } from './pages/projects/ProjectsPage'; import { InvestmentsPage } from './pages/investments/InvestmentsPage'; import { CapitalProjectsPage } from './pages/capital-projects/CapitalProjectsPage'; import { BalanceSheetPage } from './pages/reports/BalanceSheetPage'; import { IncomeStatementPage } from './pages/reports/IncomeStatementPage'; import { BudgetVsActualPage } from './pages/reports/BudgetVsActualPage'; import { SankeyPage } from './pages/reports/SankeyPage'; import { CashFlowPage } from './pages/reports/CashFlowPage'; import { AgingReportPage } from './pages/reports/AgingReportPage'; import { YearEndPage } from './pages/reports/YearEndPage'; import { QuarterlyReportPage } from './pages/reports/QuarterlyReportPage'; import { SettingsPage } from './pages/settings/SettingsPage'; import { UserPreferencesPage } from './pages/preferences/UserPreferencesPage'; import { OrgMembersPage } from './pages/org-members/OrgMembersPage'; import { AdminPage } from './pages/admin/AdminPage'; import { AssessmentGroupsPage } from './pages/assessment-groups/AssessmentGroupsPage'; import { CashFlowForecastPage } from './pages/cash-flow/CashFlowForecastPage'; import { MonthlyActualsPage } from './pages/monthly-actuals/MonthlyActualsPage'; import { InvestmentPlanningPage } from './pages/investment-planning/InvestmentPlanningPage'; import { InvestmentScenariosPage } from './pages/board-planning/InvestmentScenariosPage'; import { InvestmentScenarioDetailPage } from './pages/board-planning/InvestmentScenarioDetailPage'; import { AssessmentScenariosPage } from './pages/board-planning/AssessmentScenariosPage'; import { AssessmentScenarioDetailPage } from './pages/board-planning/AssessmentScenarioDetailPage'; import { ScenarioComparisonPage } from './pages/board-planning/ScenarioComparisonPage'; import { BudgetPlanningPage } from './pages/board-planning/BudgetPlanningPage'; import { PricingPage } from './pages/pricing/PricingPage'; import { OnboardingPage } from './pages/onboarding/OnboardingPage'; import { OnboardingPendingPage } from './pages/onboarding/OnboardingPendingPage'; function ProtectedRoute({ children }: { children: React.ReactNode }) { const token = useAuthStore((s) => s.token); if (!token) return ; return <>{children}; } function OrgRequiredRoute({ children }: { children: React.ReactNode }) { const token = useAuthStore((s) => s.token); const currentOrg = useAuthStore((s) => s.currentOrg); if (!token) return ; if (!currentOrg) return ; return <>{children}; } function SuperAdminRoute({ children }: { children: React.ReactNode }) { const token = useAuthStore((s) => s.token); const user = useAuthStore((s) => s.user); if (!token) return ; if (!user?.isSuperadmin) return ; return <>{children}; } function AuthRoute({ children }: { children: React.ReactNode }) { const token = useAuthStore((s) => s.token); const user = useAuthStore((s) => s.user); const currentOrg = useAuthStore((s) => s.currentOrg); const organizations = useAuthStore((s) => s.organizations); if (token && currentOrg) return ; // Platform owner / superadmin with no org memberships → admin panel if (token && user?.isSuperadmin && (!organizations || organizations.length === 0)) { return ; } if (token && !currentOrg) return ; return <>{children}; } export function App() { return ( {/* Public routes (no auth required) */} } /> } /> } /> {/* Auth routes (redirect if already logged in) */} } /> } /> } /> {/* Onboarding (requires auth but not org selection) */} } /> {/* Admin routes */} } > } /> {/* Main app routes (require auth + org) */} } > } /> } /> } /> } /> } /> } /> } /> } /> } /> } /> } /> } /> } /> } /> } /> } /> } /> } /> } /> } /> } /> } /> } /> } /> } /> } /> } /> } /> } /> } /> } /> } /> } /> ); }