import { Suspense, lazy, useEffect } from "react"; import { Routes, Route, Navigate } from "react-router-dom"; import { HelmetProvider } from "react-helmet-async"; import AppLayout from "./layout/AppLayout"; import { ScrollToTop } from "./components/common/ScrollToTop"; import ProtectedRoute from "./components/auth/ProtectedRoute"; import ModuleGuard from "./components/common/ModuleGuard"; import { AwsAdminGuard } from "./components/auth/AwsAdminGuard"; import GlobalErrorDisplay from "./components/common/GlobalErrorDisplay"; import LoadingStateMonitor from "./components/common/LoadingStateMonitor"; import { useAuthStore } from "./store/authStore"; import { useModuleStore } from "./store/moduleStore"; // Auth pages - loaded immediately (needed for login) import SignIn from "./pages/AuthPages/SignIn"; import SignUp from "./pages/AuthPages/SignUp"; import Payment from "./pages/Payment"; import NotFound from "./pages/OtherPage/NotFound"; // Lazy load all other pages - only loads when navigated to const Home = lazy(() => import("./pages/Dashboard/Home")); // Planner Module - Lazy loaded const PlannerDashboard = lazy(() => import("./pages/Planner/Dashboard")); const Keywords = lazy(() => import("./pages/Planner/Keywords")); const Clusters = lazy(() => import("./pages/Planner/Clusters")); const ClusterDetail = lazy(() => import("./pages/Planner/ClusterDetail")); const Ideas = lazy(() => import("./pages/Planner/Ideas")); const KeywordOpportunities = lazy(() => import("./pages/Planner/KeywordOpportunities")); // Writer Module - Lazy loaded const WriterDashboard = lazy(() => import("./pages/Writer/Dashboard")); const Tasks = lazy(() => import("./pages/Writer/Tasks")); const Content = lazy(() => import("./pages/Writer/Content")); const ContentView = lazy(() => import("./pages/Writer/ContentView")); const Drafts = lazy(() => import("./pages/Writer/Drafts")); const Images = lazy(() => import("./pages/Writer/Images")); const Review = lazy(() => import("./pages/Writer/Review")); const Published = lazy(() => import("./pages/Writer/Published")); // Automation Module - Lazy loaded const AutomationPage = lazy(() => import("./pages/Automation/AutomationPage")); // Linker Module - Lazy loaded const LinkerDashboard = lazy(() => import("./pages/Linker/Dashboard")); const LinkerContentList = lazy(() => import("./pages/Linker/ContentList")); // Optimizer Module - Lazy loaded const OptimizerDashboard = lazy(() => import("./pages/Optimizer/Dashboard")); const OptimizerContentSelector = lazy(() => import("./pages/Optimizer/ContentSelector")); const AnalysisPreview = lazy(() => import("./pages/Optimizer/AnalysisPreview")); // Thinker Module - Lazy loaded const ThinkerDashboard = lazy(() => import("./pages/Thinker/Dashboard")); const Prompts = lazy(() => import("./pages/Thinker/Prompts")); const AuthorProfiles = lazy(() => import("./pages/Thinker/AuthorProfiles")); const ThinkerProfile = lazy(() => import("./pages/Thinker/Profile")); const Strategies = lazy(() => import("./pages/Thinker/Strategies")); const ImageTesting = lazy(() => import("./pages/Thinker/ImageTesting")); // Billing Module - Lazy loaded const Credits = lazy(() => import("./pages/Billing/Credits")); const Transactions = lazy(() => import("./pages/Billing/Transactions")); const Usage = lazy(() => import("./pages/Billing/Usage")); const CreditsAndBilling = lazy(() => import("./pages/Settings/CreditsAndBilling")); const PurchaseCreditsPage = lazy(() => import("./pages/account/PurchaseCreditsPage")); const PlansAndBillingPage = lazy(() => import("./pages/account/PlansAndBillingPage")); const AccountSettingsPage = lazy(() => import("./pages/account/AccountSettingsPage")); const TeamManagementPage = lazy(() => import("./pages/account/TeamManagementPage")); const UsageAnalyticsPage = lazy(() => import("./pages/account/UsageAnalyticsPage")); // Admin Module - Only dashboard for aws-admin users const AdminSystemDashboard = lazy(() => import("./pages/admin/AdminSystemDashboard")); // Reference Data - Lazy loaded const SeedKeywords = lazy(() => import("./pages/Reference/SeedKeywords")); const ReferenceIndustries = lazy(() => import("./pages/Reference/Industries")); // Setup Pages - Lazy loaded const IndustriesSectorsKeywords = lazy(() => import("./pages/Setup/IndustriesSectorsKeywords")); // Settings - Lazy loaded const GeneralSettings = lazy(() => import("./pages/Settings/General")); const ProfileSettingsPage = lazy(() => import("./pages/settings/ProfileSettingsPage")); const Users = lazy(() => import("./pages/Settings/Users")); const Subscriptions = lazy(() => import("./pages/Settings/Subscriptions")); const SystemSettings = lazy(() => import("./pages/Settings/System")); const AccountSettings = lazy(() => import("./pages/Settings/Account")); const ModuleSettings = lazy(() => import("./pages/Settings/Modules")); const AISettings = lazy(() => import("./pages/Settings/AI")); const Plans = lazy(() => import("./pages/Settings/Plans")); const Industries = lazy(() => import("./pages/Settings/Industries")); const Integration = lazy(() => import("./pages/Settings/Integration")); const Publishing = lazy(() => import("./pages/Settings/Publishing")); const Sites = lazy(() => import("./pages/Settings/Sites")); const ImportExport = lazy(() => import("./pages/Settings/ImportExport")); // Sites - Lazy loaded const SiteList = lazy(() => import("./pages/Sites/List")); const SiteManage = lazy(() => import("./pages/Sites/Manage")); const SiteDashboard = lazy(() => import("./pages/Sites/Dashboard")); const SiteContent = lazy(() => import("./pages/Sites/Content")); const PageManager = lazy(() => import("./pages/Sites/PageManager")); const PostEditor = lazy(() => import("./pages/Sites/PostEditor")); const SiteSettings = lazy(() => import("./pages/Sites/Settings")); const SyncDashboard = lazy(() => import("./pages/Sites/SyncDashboard")); const DeploymentPanel = lazy(() => import("./pages/Sites/DeploymentPanel")); // Help - Lazy loaded const Help = lazy(() => import("./pages/Help/Help")); const Docs = lazy(() => import("./pages/Help/Docs")); const SystemTesting = lazy(() => import("./pages/Help/SystemTesting")); const FunctionTesting = lazy(() => import("./pages/Help/FunctionTesting")); // Components - Lazy loaded const Components = lazy(() => import("./pages/Components")); export default function App() { const { isAuthenticated } = useAuthStore(); const { loadModuleSettings } = useModuleStore(); // Load global module settings immediately on mount (public endpoint, no auth required) useEffect(() => { loadModuleSettings(); }, [loadModuleSettings]); return ( <> {/* CRITICAL FIX: Move Suspense OUTSIDE Routes to prevent Router context loss during HMR */}
Loading...
}> {/* Auth Routes - Public */} } /> } /> } /> {/* Protected Routes - Require Authentication */} } > {/* Dashboard */} } /> {/* Planner Module - Redirect dashboard to keywords */} } /> } /> } /> } /> } /> {/* Writer Module - Redirect dashboard to tasks */} } /> } /> {/* Writer Content Routes - Order matters: list route must come before detail route */} } /> {/* Content detail view - matches /writer/content/:id (e.g., /writer/content/10) */} } /> } /> } /> } /> } /> {/* Automation Module */} } /> {/* Linker Module - Redirect dashboard to content */} } /> } /> {/* Optimizer Module - Redirect dashboard to content */} } /> } /> } /> {/* Thinker Module */} {/* Thinker Module - Redirect dashboard to prompts */} } /> } /> } /> } /> } /> } /> {/* Billing Module */} } /> } /> } /> } /> } /> {/* Account Section - Billing & Management Pages */} } /> } /> } /> } /> } /> {/* Admin Routes - Only Dashboard for aws-admin users */} } /> {/* Reference Data */} } /> } /> } /> {/* Setup Pages */} } /> {/* Legacy redirect */} } /> {/* Settings */} } /> } /> } /> } /> } /> } /> } /> } /> } /> } /> } /> } /> } /> } /> {/* Sites Management */} } /> } /> } /> } /> } /> } /> } /> } /> } /> } /> } /> } /> {/* Help */} } /> } /> } /> } /> {/* Components (Showcase Page) */} } /> {/* Fallback Route */} } />
); }