import { useEffect, useState } from 'react'; import { createRoot } from 'react-dom/client'; import { QueryClientProvider } from '@tanstack/react-query'; import { BrowserRouter, Routes, Route, Navigate, useLocation } from 'react-router-dom'; import { Toaster } from 'react-hot-toast'; import { AuthProvider, useAuth } from './lib/auth'; import { queryClient } from './lib/query-client'; import { LoginPage } from './pages/Login'; import { DashboardPage } from './pages/Dashboard'; import { NotFoundPage } from './pages/NotFound'; import { ComingSoonPage } from './pages/ComingSoon'; import { FeedsList } from './modules/feeds/FeedsList'; import { FeedDetail } from './modules/feeds/FeedDetail'; import { FeedNew } from './modules/feeds/FeedNew'; import { ProductsList } from './modules/products/ProductsList'; import { HomepageEditor } from './modules/content/HomepageEditor'; import { CollectionsList } from './modules/content/CollectionsList'; import { CollectionEditor } from './modules/content/CollectionEditor'; import { BrandsList } from './modules/content/BrandsList'; import { BrandEditor } from './modules/content/BrandEditor'; import { ReleaseCalendar } from './modules/content/ReleaseCalendar'; import { CategoriesList } from './modules/content/CategoriesList'; import { EmailsList } from './modules/marketing/EmailsList'; import { EmailEditor } from './modules/marketing/EmailEditor'; import { SubscribersList } from './modules/marketing/SubscribersList'; import { PushComposer } from './modules/marketing/PushComposer'; import { JobsList } from './modules/ops/JobsList'; import { AuditLog } from './modules/ops/AuditLog'; import { CronMonitor } from './modules/ops/CronMonitor'; import { SystemHealth } from './modules/ops/SystemHealth'; import { ErrorLog } from './modules/ops/ErrorLog'; function PrivateRoute({ children }: { children: React.ReactNode }) { const { user, loading } = useAuth(); const location = useLocation(); if (loading) { return (
); } if (!user) return ; return <>{children}; } export default function AdminRoot() { const [mounted, setMounted] = useState(false); useEffect(() => setMounted(true), []); if (!mounted) return null; return ( } /> } /> } /> } /> } /> } /> } /> } /> } /> } /> } /> } /> } /> } /> } /> } /> } /> } /> } /> } /> } /> } /> } /> } /> ); } // Bootstrap: mount into #cms-root when module loads (client:only="react" in Astro) if (typeof document !== 'undefined') { const el = document.getElementById('cms-root'); if (el) { const root = createRoot(el); root.render(); } }