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 AdminRoute from "./components/auth/AdminRoute"; import GlobalErrorDisplay from "./components/common/GlobalErrorDisplay"; import LoadingStateMonitor from "./components/common/LoadingStateMonitor"; import { PageProvider } from "./context/PageContext"; 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"; // Legal pages - Public const Terms = lazy(() => import("./pages/legal/Terms")); const Privacy = lazy(() => import("./pages/legal/Privacy")); // 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")); // 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 Approved = lazy(() => import("./pages/Writer/Approved")); // 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")); // TeamManagementPage - Now integrated as tab in AccountSettingsPage const UsageAnalyticsPage = lazy(() => import("./pages/account/UsageAnalyticsPage")); const ContentSettingsPage = lazy(() => import("./pages/account/ContentSettingsPage")); const NotificationsPage = lazy(() => import("./pages/account/NotificationsPage")); // 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")); // ProfileSettingsPage - Now integrated as tab in AccountSettingsPage 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 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")); // ImportExport - Removed from UI, individual pages have their own import/export // Sites - Lazy loaded const SiteList = lazy(() => import("./pages/Sites/List")); 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")); const PublishingQueue = lazy(() => import("./pages/Sites/PublishingQueue")); // Help - Lazy loaded const Help = lazy(() => import("./pages/Help/Help")); // 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 */} } /> } /> } /> {/* Legal Pages - 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) */} } /> } /> } /> } /> } /> {/* Legacy route - redirect published to approved */} } /> {/* Automation Module */} } /> {/* Linker Module - Redirect dashboard to content */} } /> } /> {/* Optimizer Module - Redirect dashboard to content */} } /> } /> } /> {/* Thinker Module - Admin Only (Prompts & AI Configuration) */} } /> } /> } /> } /> } /> } /> {/* Billing Module */} } /> } /> } /> } /> } /> {/* Account Section - Billing & Management Pages */} {/* Notifications */} } /> {/* Account Settings - with sub-routes for sidebar navigation */} } /> } /> } /> {/* Legacy redirect - Team is now a tab in Account Settings */} } /> {/* Plans & Billing - with sub-routes for sidebar navigation */} } /> } /> } /> } /> {/* Usage - with sub-routes for sidebar navigation */} } /> } /> } /> {/* Content Settings - with sub-routes for sidebar navigation */} } /> } /> } /> {/* Reference Data */} } /> } /> {/* Setup Pages */} } /> {/* Legacy redirect */} } /> {/* Settings */} {/* Legacy redirect - Profile is now a tab in Account Settings */} } /> } /> } /> } /> } /> } /> } /> } /> } /> {/* AI Models Settings - Admin Only */} } /> } /> } /> {/* Legacy redirect - Import/Export removed, redirect to dashboard */} } /> {/* Sites Management */} } /> } /> } /> } /> } /> } /> } /> } /> } /> } /> } /> } /> {/* Help */} } /> {/* Components (Showcase Page) */} } /> {/* Fallback Route */} } />
); }