Files
homaroma/apps/admin/src/App.tsx
T
Your Name c78a898af7 feat(bom): complete 100% master catalog BOM and add Profitability Management Suite
- Configured BOMs for all 585 master variants across 5 categories (Oil Ozone, Aroma Oil, Car Diffuser, Room Spray, Reed Diffuser)
- Mapped 2,111 marketplace products (Shopee and Lazada) to master catalog variants
- Added backend profitability routes (/api/profitability/matrix, /omnichannel, /mrp)
- Added 3 admin pages under Product menu: Cost & Profitability Matrix, Omnichannel Margin, and MRP & Material Demand
- Added comprehensive ledgers and production sync scripts
2026-10-18 18:58:11 +07:00

209 lines
13 KiB
TypeScript

import { BrowserRouter, Routes, Route, Navigate } from 'react-router-dom'
import AdminLayout from './components/AdminLayout'
import DashboardPage from './pages/DashboardPage'
import ProductsPage from './pages/ProductsPage'
import ProductEditPage from './pages/ProductEditPage'
import ProductBomPage from './pages/ProductBomPage'
import ProductCmsPage from './pages/ProductCmsPage'
import CategoriesPage from './pages/CategoriesPage'
import BrandsPage from './pages/BrandsPage'
import CategoryEditPage from './pages/CategoryEditPage'
import CategoryCmsPage from './pages/CategoryCmsPage'
import CustomersPage from './pages/CustomersPage'
import PageBuilderPage from './pages/PageBuilderPage'
import PageReorderPage from './pages/PageReorderPage'
import CmsMockupPage from './pages/CmsMockupPage'
import RawMaterialsPage from './pages/RawMaterialsPage'
import RawMaterialDetailPage from './pages/RawMaterialDetailPage'
import LoginPage from './pages/LoginPage'
import InstallSeedPage from './pages/InstallSeedPage'
import ProtectedRoute from './components/ProtectedRoute'
import OrdersPage from './pages/OrdersPage'
import OrderDetailPage from './pages/OrderDetailPage'
import StoreSettingsPage from './pages/StoreSettingsPage'
import BrandIntelligencePage from './pages/BrandIntelligencePage'
import PaymentSettingsPage from './pages/PaymentSettingsPage'
import ThemeSettingsPage from './pages/ThemeSettingsPage'
import ContentSettingsPage from './pages/ContentSettingsPage'
import SystemMaintenancePage from './pages/SystemMaintenancePage'
import MainNavigationPage from './pages/menu-manager/MainNavigationPage'
import FooterExplorePage from './pages/menu-manager/FooterExplorePage'
import FooterSupportPage from './pages/menu-manager/FooterSupportPage'
import FooterBrandPage from './pages/menu-manager/FooterBrandPage'
import FooterLayoutPage from './pages/menu-manager/FooterLayoutPage'
import NewsletterSubscribersPage from './pages/NewsletterSubscribersPage'
import ArticlesPage from './pages/ArticlesPage'
import ArticleEditPage from './pages/ArticleEditPage'
import CouponsPage from './pages/CouponsPage'
import PromotionsPage from './pages/PromotionsPage'
import TiktokPage from './pages/TiktokPage'
import TiktokAnalysisPage from './pages/TiktokAnalysisPage'
import ShopeePage from './pages/ShopeePage'
import ShopeeOrderDetailPage from './pages/ShopeeOrderDetailPage'
import ShopeeSalesMapPage from './pages/ShopeeSalesMapPage'
import ShopeeAnalyticsPage from './pages/ShopeeAnalyticsPage'
import ShopeeOverviewPage from './pages/ShopeeOverviewPage'
import TiktokOrderPage from './pages/TiktokOrderPage'
import TiktokOrderDetailPage from './pages/TiktokOrderDetailPage'
import TiktokSalesMapPage from './pages/TiktokSalesMapPage'
import TiktokAnalyticsPage from './pages/TiktokAnalyticsPage'
import TiktokOverviewPage from './pages/TiktokOverviewPage'
import LazadaOrderPage from './pages/LazadaOrderPage'
import LazadaAnalyticsPage from './pages/LazadaAnalyticsPage'
import LazadaOverviewPage from './pages/LazadaOverviewPage'
import GlobalAnalyticsPage from './pages/GlobalAnalyticsPage'
import MediaLibraryPage from './pages/MediaLibraryPage'
import ContactMessagesPage from './pages/ContactMessagesPage'
import ProductAttributesPage from './pages/ProductAttributesPage'
import ProductAttributeEditPage from './pages/ProductAttributeEditPage'
import TiktokPriceSimulatorPage from './pages/TiktokPriceSimulatorPage'
import TiktokShopCasePage from './pages/TiktokShopCasePage'
import ShopeeShopCasePage from './pages/ShopeeShopCasePage'
import BackupDashboardPage from './pages/backup/BackupDashboardPage'
import BackupDatabasePage from './pages/backup/BackupDatabasePage'
import BackupCatalogPage from './pages/backup/BackupCatalogPage'
import BackupOrdersPage from './pages/backup/BackupOrdersPage'
import BackupCmsPage from './pages/backup/BackupCmsPage'
import BackupMediaPage from './pages/backup/BackupMediaPage'
import OmnichannelSalesMapPage from './pages/analytics/OmnichannelSalesMapPage'
import ProductSalesMapPage from './pages/analytics/ProductSalesMapPage'
import MalaysiaSalesMapPage from './pages/analytics/MalaysiaSalesMapPage'
import VietnamSalesMapPage from './pages/analytics/VietnamSalesMapPage'
import RepeatCustomersPage from './pages/analytics/RepeatCustomersPage'
import RepeatCustomersCalendarPage from './pages/analytics/RepeatCustomersCalendarPage'
import RepeatCustomersTimelinePage from './pages/analytics/RepeatCustomersTimelinePage'
import RepeatCustomersActionPlanPage from './pages/analytics/RepeatCustomersActionPlanPage'
import RepeatCustomerDetailPage from './pages/analytics/RepeatCustomerDetailPage'
import MarketplaceProductsPage from './pages/tools/MarketplaceProductsPage'
import MarketplaceCrmPage from './pages/crm/MarketplaceCrmPage'
import MarketplaceCustomerDetailPage from './pages/crm/MarketplaceCustomerDetailPage'
import PosPage from './pages/PosPage'
import UserLlmPromptsPage from './pages/UserLlmPromptsPage'
import CostProfitabilityMatrixPage from './pages/profitability/CostProfitabilityMatrixPage'
import OmnichannelMarginPage from './pages/profitability/OmnichannelMarginPage'
import MrpPlanningPage from './pages/profitability/MrpPlanningPage'
import { StoreSettingsProvider } from './contexts/StoreSettingsContext'
function App() {
return (
<StoreSettingsProvider>
<BrowserRouter>
<Routes>
{/* Public Routes */}
<Route path="/login" element={<LoginPage />} />
<Route path="/install-seed" element={<InstallSeedPage />} />
{/* Guarded Admin Routes */}
<Route element={<ProtectedRoute />}>
{/* Fullscreen POS Route (no admin sidebar) */}
<Route path="/pos" element={<PosPage />} />
<Route element={<AdminLayout />}>
<Route path="/" element={<DashboardPage />} />
<Route path="/products" element={<ProductsPage />} />
<Route path="/product-attributes" element={<ProductAttributesPage />} />
<Route path="/product-attributes/new" element={<ProductAttributeEditPage />} />
<Route path="/product-attributes/:id" element={<ProductAttributeEditPage />} />
<Route path="/product-attributes/:id/edit" element={<ProductAttributeEditPage />} />
<Route path="/products/new" element={<ProductEditPage />} />
<Route path="/products/:id/edit" element={<ProductEditPage />} />
<Route path="/products/:id/cms" element={<ProductCmsPage />} />
<Route path="/products/:id/bom" element={<ProductBomPage />} />
<Route path="/categories" element={<CategoriesPage />} />
<Route path="/brands" element={<BrandsPage />} />
<Route path="/categories/new" element={<CategoryEditPage />} />
<Route path="/categories/:id" element={<CategoryEditPage />} />
<Route path="/categories/:id/edit" element={<CategoryEditPage />} />
<Route path="/categories/:id/cms" element={<CategoryCmsPage />} />
<Route path="/customers" element={<CustomersPage />} />
<Route path="/page-builder" element={<PageBuilderPage />} />
<Route path="/page-builder/:id/reorder" element={<PageReorderPage />} />
<Route path="/pages/:id/reorder" element={<PageReorderPage />} />
<Route path="/cms-mockup" element={<CmsMockupPage />} />
<Route path="/orders" element={<OrdersPage />} />
<Route path="/orders/:id" element={<OrderDetailPage />} />
<Route path="/media" element={<MediaLibraryPage />} />
<Route path="/promotions" element={<PromotionsPage />} />
<Route path="/coupons" element={<CouponsPage />} />
<Route path="/raw-materials" element={<RawMaterialsPage />} />
<Route path="/raw-materials/new" element={<RawMaterialDetailPage />} />
<Route path="/raw-materials/:id" element={<RawMaterialDetailPage />} />
<Route path="/profitability" element={<CostProfitabilityMatrixPage />} />
<Route path="/omnichannel-margin" element={<OmnichannelMarginPage />} />
<Route path="/mrp-planning" element={<MrpPlanningPage />} />
<Route path="/settings" element={<StoreSettingsPage />} />
<Route path="/settings/brand-intelligence" element={<BrandIntelligencePage />} />
<Route path="/brand-intelligence" element={<BrandIntelligencePage />} />
<Route path="/settings/payments" element={<PaymentSettingsPage />} />
<Route path="/settings/theme" element={<ThemeSettingsPage />} />
<Route path="/settings/content" element={<ContentSettingsPage />} />
<Route path="/settings/system" element={<SystemMaintenancePage />} />
<Route path="/menu-manager" element={<Navigate to="/menu-manager/main-navigation" replace />} />
<Route path="/menu-manager/main-navigation" element={<MainNavigationPage />} />
<Route path="/menu-manager/footer-explore" element={<FooterExplorePage />} />
<Route path="/menu-manager/footer-support" element={<FooterSupportPage />} />
<Route path="/menu-manager/footer-brand" element={<FooterBrandPage />} />
<Route path="/menu-manager/footer-layout" element={<FooterLayoutPage />} />
<Route path="/subscribers" element={<NewsletterSubscribersPage />} />
<Route path="/articles" element={<ArticlesPage />} />
<Route path="/articles/:id" element={<ArticleEditPage />} />
<Route path="/contacts" element={<ContactMessagesPage />} />
<Route path="/tiktok" element={<TiktokPage />} />
<Route path="/tiktok-analysis" element={<TiktokAnalysisPage />} />
<Route path="/tiktok-price-simulator" element={<TiktokPriceSimulatorPage />} />
<Route path="/tiktok-shop-case" element={<TiktokShopCasePage />} />
<Route path="/shopee-shop-case" element={<ShopeeShopCasePage />} />
<Route path="/shopee" element={<ShopeePage />} />
<Route path="/shopee/:orderId" element={<ShopeeOrderDetailPage />} />
<Route path="/shopee-sales-map" element={<ShopeeSalesMapPage />} />
<Route path="/shopee-analytics" element={<ShopeeAnalyticsPage />} />
<Route path="/shopee-overview" element={<ShopeeOverviewPage />} />
<Route path="/tiktok-order" element={<TiktokOrderPage />} />
<Route path="/tiktok-order/:orderId" element={<TiktokOrderDetailPage />} />
<Route path="/tiktok-sales-map" element={<TiktokSalesMapPage />} />
<Route path="/tiktok-analytics" element={<TiktokAnalyticsPage />} />
<Route path="/tiktok-overview" element={<TiktokOverviewPage />} />
<Route path="/lazada-order" element={<LazadaOrderPage />} />
<Route path="/lazada-analytics" element={<LazadaAnalyticsPage />} />
<Route path="/lazada-overview" element={<LazadaOverviewPage />} />
<Route path="/global-analytics" element={<GlobalAnalyticsPage />} />
{/* Business Analytics */}
<Route path="/business-analytics/sales-map" element={<OmnichannelSalesMapPage />} />
<Route path="/business-analytics/sales-map-products" element={<ProductSalesMapPage />} />
<Route path="/business-analytics/malaysia-map" element={<MalaysiaSalesMapPage />} />
<Route path="/business-analytics/vietnam-map" element={<VietnamSalesMapPage />} />
<Route path="/business-analytics/repeat-customers" element={<RepeatCustomersPage />} />
<Route path="/business-analytics/repeat-customers-calendar" element={<RepeatCustomersCalendarPage />} />
<Route path="/business-analytics/repeat-customers-timeline" element={<RepeatCustomersTimelinePage />} />
<Route path="/business-analytics/repeat-customers-action-plan" element={<RepeatCustomersActionPlanPage />} />
<Route path="/business-analytics/repeat-customer-detail" element={<RepeatCustomerDetailPage />} />
{/* Marketplace CRM */}
<Route path="/crm/marketplace-customers" element={<MarketplaceCrmPage />} />
<Route path="/crm/marketplace-customers/:id" element={<MarketplaceCustomerDetailPage />} />
{/* Tools */}
<Route path="/tools" element={<Navigate to="/tools/marketplace-products" replace />} />
<Route path="/tools/marketplace-products" element={<MarketplaceProductsPage />} />
{/* Backup & Restore */}
<Route path="/backup" element={<BackupDashboardPage />} />
<Route path="/backup/database" element={<BackupDatabasePage />} />
<Route path="/backup/catalog" element={<BackupCatalogPage />} />
<Route path="/backup/orders" element={<BackupOrdersPage />} />
<Route path="/backup/cms" element={<BackupCmsPage />} />
<Route path="/backup/media" element={<BackupMediaPage />} />
{/* User & LLM Prompts */}
<Route path="/user" element={<Navigate to="/user/llm-prompts" replace />} />
<Route path="/user/llm-prompts" element={<UserLlmPromptsPage />} />
</Route>
</Route>
{/* Catch-all fallback */}
<Route path="*" element={<Navigate to="/" replace />} />
</Routes>
</BrowserRouter>
</StoreSettingsProvider>
)
}
export default App