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 { 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'; 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 ( } /> } /> } /> } > } /> } > } /> } /> } /> } /> } /> } /> } /> } /> } /> } /> } /> } /> } /> } /> } /> } /> } /> } /> } /> } /> } /> } /> } /> } /> } /> } /> } /> ); }