import React, { Suspense } from "react"; import { Routes, Route, Navigate } from "react-router-dom"; import LoadingSpinner from "./components/LoadingSpinner"; import Layout from "./components/Layout"; import ProtectedRoute from "./components/ProtectedRoute"; /* ── Eagerly loaded (core pages) ──────────────────────────────────── */ import LoginPage from "./pages/LoginPage"; import DashboardPage from "./pages/DashboardPage"; /* ── Lazy loaded (V1-V3 pages) ────────────────────────────────────── */ const TechniquesPage = React.lazy(() => import("./pages/TechniquesPage")); const MatrixPage = React.lazy(() => import("./pages/MatrixPage")); const ExecutiveDashboardPage = React.lazy(() => import("./pages/ExecutiveDashboardPage")); const CompliancePage = React.lazy(() => import("./pages/CompliancePage")); const TechniqueDetailPage = React.lazy(() => import("./pages/TechniqueDetailPage")); const TestsPage = React.lazy(() => import("./pages/TestsPage")); const TestCreatePage = React.lazy(() => import("./pages/TestCreatePage")); const TestDetailPage = React.lazy(() => import("./pages/TestDetailPage")); const TestCatalogPage = React.lazy(() => import("./pages/TestCatalogPage")); const ReportsPage = React.lazy(() => import("./pages/ReportsPage")); const SystemPage = React.lazy(() => import("./pages/SystemPage")); const UsersPage = React.lazy(() => import("./pages/UsersPage")); const AuditLogPage = React.lazy(() => import("./pages/AuditLogPage")); const DataSourcesPage = React.lazy(() => import("./pages/DataSourcesPage")); const ThreatActorsPage = React.lazy(() => import("./pages/ThreatActorsPage")); const ThreatActorDetailPage = React.lazy(() => import("./pages/ThreatActorDetailPage")); const CampaignsPage = React.lazy(() => import("./pages/CampaignsPage")); const CampaignDetailPage = React.lazy(() => import("./pages/CampaignDetailPage")); const ComparisonPage = React.lazy(() => import("./pages/ComparisonPage")); export default function App() { return ( {/* Public */} } /> {/* Protected — wrapped in shared Layout */} } > {/* ── Core ─────────────────────────────────────────────── */} } /> }>} /> }>} /> }>} /> {/* ── Executive Dashboard (leads + admin) ──────────────── */} }> } /> {/* ── Tests ────────────────────────────────────────────── */} }>} /> }>} /> }>} /> }>} /> }>} /> {/* ── Campaigns ────────────────────────────────────────── */} }>} /> }>} /> {/* ── Threat Actors ────────────────────────────────────── */} }>} /> }>} /> {/* ── Compliance ───────────────────────────────────────── */} }>} /> {/* ── Comparison (leads + admin) ───────────────────────── */} }> } /> {/* ── Reports ──────────────────────────────────────────── */} }>} /> {/* ── System (admin only) ──────────────────────────────── */} }> } /> }> } /> }> } /> }> } /> {/* Catch-all → dashboard */} } /> ); }