import React, { useEffect } from 'react'; import { HashRouter as Router, Routes, Route } from 'react-router-dom'; import { LuMenu } from 'react-icons/lu'; import { recomaze_ai_personalization_env } from './env'; import { SidebarProvider, useSidebar } from './context/sidebar.context'; import Support from './pages/Support'; import Settings from './pages/Settings'; import SideBar from './components/layout/SideBar'; import Customization from './pages/Customization'; import ImportProducts from './pages/ImportProducts'; import { useAppStateContext } from './context/user.data.context'; import Pricing from './pages/Pricing'; import AgenticFeedPage from './pages/AgenticFeed'; import AIReadiness from './pages/AIReadiness'; import AiVisibility from './pages/AiVisibility'; import ProductImprovements from './pages/ProductImprovements'; import LlmTxtPage from './pages/LlmTxt'; import AgentAnalytics from './pages/AgentAnalytics'; import KnowledgeBase from './pages/KnowledgeBase'; import ContentGenerator from './pages/ContentGenerator'; import Campaigns from './pages/Campaigns'; import CampaignCreate from './pages/CampaignCreate'; import CampaignDetail from './pages/CampaignDetail'; import CatalogQuality from './pages/CatalogQuality'; import Dashboard from './pages/Dashboard'; import { useAccessControl } from './hooks/useAccessControl'; import PreviewBanner from './components/PreviewBanner'; import { updatePreviewMode } from './service/user/user.service'; import VerificationModal from './components/VerificationModal'; import ErrorBoundary from './components/ErrorBoundary'; // In-flow top bar shown only on small screens; opens the off-canvas sidebar. const MobileTopBar = (): JSX.Element => { const { setMobileOpen } = useSidebar(); const logo = recomaze_ai_personalization_env?.plugin_icon; return (
{logo ? ( Recomaze ) : null} Recomaze
); }; const App = (): JSX.Element => { const { token, clientId, user, setUser, setToken, setClientId, fetchUser, setCanUseWpApi, } = useAppStateContext(); useEffect(() => { if (!token && recomaze_ai_personalization_env?.auth?.token) setToken(recomaze_ai_personalization_env?.auth?.token); if (!clientId && recomaze_ai_personalization_env?.auth?.client_id) setClientId(recomaze_ai_personalization_env?.auth?.client_id); if (!user && token) fetchUser(); if (!recomaze_ai_personalization_env?.can_use_wp_api) setCanUseWpApi(false); }, [token, clientId]); const { canAccessAllRoutes, canSeeBulkUpload } = useAccessControl(user); const handleActivatePreview = async () => { if (!token) return; try { await updatePreviewMode({ token, preview_mode: true }); if (user) setUser({ ...user, preview_mode: true }); } catch (error) { console.error('Error enabling preview mode:', error); } }; const handleDeactivatePreview = async () => { if (!token) return; try { await updatePreviewMode({ token, preview_mode: false }); if (user) setUser({ ...user, preview_mode: false }); } catch (error) { console.error('Error disabling preview mode:', error); } }; return (
{!canAccessAllRoutes ? ( }> ) : ( } /> } /> } /> } /> } /> } /> } /> } /> } /> : } /> } /> } /> } /> } /> } /> } /> } /> } /> } /> )}
); }; export default App;