import React from 'react'; import { Routes, Route, Navigate } from 'react-router-dom'; import { Loader2 } from 'lucide-react'; import { __ } from '@/lib/i18n'; // Import all routes import ResetPassword from '@/routes/ResetPassword'; import Dashboard from '@/routes/Dashboard'; import DashboardRevenue from '@/routes/Dashboard/Revenue'; import DashboardOrders from '@/routes/Dashboard/Orders'; import DashboardProducts from '@/routes/Dashboard/Products'; import DashboardCustomers from '@/routes/Dashboard/Customers'; import DashboardCoupons from '@/routes/Dashboard/Coupons'; import DashboardTaxes from '@/routes/Dashboard/Taxes'; import OrdersIndex from '@/routes/Orders'; import OrderNew from '@/routes/Orders/New'; import OrderEdit from '@/routes/Orders/Edit'; import OrderDetail from '@/routes/Orders/Detail'; import OrderInvoice from '@/routes/Orders/Invoice'; import OrderLabel from '@/routes/Orders/Label'; import ProductsIndex from '@/routes/Products'; import ProductNew from '@/routes/Products/New'; import ProductEdit from '@/routes/Products/Edit'; import ProductCategories from '@/routes/Products/Categories'; import ProductTags from '@/routes/Products/Tags'; import ProductAttributes from '@/routes/Products/Attributes'; import Licenses from '@/routes/Products/Licenses'; import LicenseDetail from '@/routes/Products/Licenses/Detail'; import SoftwareVersions from '@/routes/Products/SoftwareVersions'; import SubscriptionsIndex from '@/routes/Subscriptions'; import SubscriptionDetail from '@/routes/Subscriptions/Detail'; import CouponsIndex from '@/routes/Marketing/Coupons'; import CouponNew from '@/routes/Marketing/Coupons/New'; import CouponEdit from '@/routes/Marketing/Coupons/Edit'; import CustomersIndex from '@/routes/Customers'; import CustomerNew from '@/routes/Customers/New'; import CustomerEdit from '@/routes/Customers/Edit'; import CustomerDetail from '@/routes/Customers/Detail'; import SettingsIndex from '@/routes/Settings'; import SettingsStore from '@/routes/Settings/Store'; import SettingsPayments from '@/routes/Settings/Payments'; import SettingsShipping from '@/routes/Settings/Shipping'; import SettingsTax from '@/routes/Settings/Tax'; import SettingsCustomers from '@/routes/Settings/Customers'; import SettingsSecurity from '@/routes/Settings/Security'; import SettingsLocalPickup from '@/routes/Settings/LocalPickup'; import SettingsNotifications from '@/routes/Settings/Notifications'; import StaffNotifications from '@/routes/Settings/Notifications/Staff'; import CustomerNotifications from '@/routes/Settings/Notifications/Customer'; import ChannelConfiguration from '@/routes/Settings/Notifications/ChannelConfiguration'; import EmailConfiguration from '@/routes/Settings/Notifications/EmailConfiguration'; import PushConfiguration from '@/routes/Settings/Notifications/PushConfiguration'; import EmailCustomization from '@/routes/Settings/Notifications/EmailCustomization'; import EditTemplate from '@/routes/Settings/Notifications/EditTemplate'; import ActivityLog from '@/routes/Settings/Notifications/ActivityLog'; import SettingsDeveloper from '@/routes/Settings/Developer'; import SettingsModules from '@/routes/Settings/Modules'; import ModuleSettings from '@/routes/Settings/ModuleSettings'; import AppearanceIndex from '@/routes/Appearance'; import AppearanceGeneral from '@/routes/Appearance/General'; import AppearanceHeader from '@/routes/Appearance/Header'; import AppearanceFooter from '@/routes/Appearance/Footer'; import AppearanceShop from '@/routes/Appearance/Shop'; import AppearanceProduct from '@/routes/Appearance/Product'; import AppearanceCart from '@/routes/Appearance/Cart'; import AppearanceCheckout from '@/routes/Appearance/Checkout'; import AppearanceThankYou from '@/routes/Appearance/ThankYou'; import AppearanceAccount from '@/routes/Appearance/Account'; import AppearanceMenus from '@/routes/Appearance/Menus/MenuEditor'; import AppearancePages from '@/routes/Appearance/Pages'; import MarketingIndex from '@/routes/Marketing'; import NewsletterLayout from '@/routes/Marketing/Newsletter'; import NewsletterSubscribers from '@/routes/Marketing/Newsletter/Subscribers'; import NewsletterCampaignsList from '@/routes/Marketing/Campaigns'; import CampaignEdit from '@/routes/Marketing/Campaigns/Edit'; import AffiliatesLayout from '@/routes/Marketing/Affiliates'; import AffiliatesList from '@/routes/Marketing/Affiliates/List'; import AffiliatesReferrals from '@/routes/Marketing/Affiliates/Referrals'; import AffiliatesPayouts from '@/routes/Marketing/Affiliates/Payouts'; import MorePage from '@/routes/More'; import Help from '@/routes/Help'; import Onboarding from '@/routes/Onboarding'; import { LegacyCampaignRedirect } from '@/components/LegacyCampaignRedirect'; // Addon Route Component - Dynamically loads addon components function AddonRoute({ config }: { config: any }) { const [Component, setComponent] = React.useState(null); const [loading, setLoading] = React.useState(true); const [error, setError] = React.useState(null); React.useEffect(() => { if (!config.component_url) { setError('No component URL provided'); setLoading(false); return; } setLoading(true); setError(null); // Dynamically import the addon component import(/* @vite-ignore */ config.component_url) .then((mod) => { setComponent(() => mod.default || mod); setLoading(false); }) .catch((err) => { console.error('[AddonRoute] Failed to load component:', err); setError(err.message || 'Failed to load addon component'); setLoading(false); }); }, [config.component_url]); if (loading) { return (

{__('Loading addon...')}

); } if (error) { return (

{__('Failed to Load Addon')}

{error}

); } if (!Component) { return (

{__('Addon component not found')}

); } // Render the addon component with props return ; } export function AppRoutes() { const addonRoutes = window.WNW_ADDON_ROUTES || []; return ( {/* Dashboard */} } /> } /> } /> } /> } /> } /> } /> } /> } /> } /> {/* Products */} } /> } /> } /> } /> } /> } /> } /> } /> } /> {/* Orders */} } /> } /> } /> } /> } /> } /> {/* Subscriptions */} } /> } /> {/* Coupons (under Marketing) */} } /> } /> } /> } /> } /> } /> {/* Customers */} } /> } /> } /> } /> {/* More */} } /> {/* Settings */} } /> } /> } /> } /> } /> } /> } /> } /> } /> } /> } /> } /> } /> } /> } /> } /> } /> } /> } /> } /> } /> } /> } /> {/* Appearance */} } /> } /> } /> } /> } /> } /> } /> } /> } /> } /> } /> } /> {/* Marketing */} } /> }> } /> } /> } /> } /> }> } /> } /> } /> } /> {/* Legacy Redirects for Newsletter (using component to preserve params) */} } /> } /> } /> {/* Help - Main menu route with no submenu */} } /> {/* Dynamic Addon Routes */} {addonRoutes.map((route: any) => ( } /> ))} ); }