From 52a5217d9bf60ad1e887bf834ee362e5f1abf3f1 Mon Sep 17 00:00:00 2001 From: Your Name Date: Tue, 14 Jul 2026 02:26:38 -0400 Subject: [PATCH] x --- apps/admin/src/App.tsx | 11 +- apps/admin/src/components/Sidebar.tsx | 38 ++- .../pages/menu-manager/FooterExplorePage.tsx | 11 + .../pages/menu-manager/FooterSupportPage.tsx | 11 + .../pages/menu-manager/MainNavigationPage.tsx | 11 + .../MenuEditorPage.tsx} | 313 +++++++++++++++--- .../components/navigation/DesktopMegaMenu.tsx | 253 ++++++++++---- .../src/components/navigation/menuTypes.ts | 13 + 8 files changed, 554 insertions(+), 107 deletions(-) create mode 100644 apps/admin/src/pages/menu-manager/FooterExplorePage.tsx create mode 100644 apps/admin/src/pages/menu-manager/FooterSupportPage.tsx create mode 100644 apps/admin/src/pages/menu-manager/MainNavigationPage.tsx rename apps/admin/src/pages/{MenuManagerPage.tsx => menu-manager/MenuEditorPage.tsx} (60%) diff --git a/apps/admin/src/App.tsx b/apps/admin/src/App.tsx index 3ca3d7c..243488e 100644 --- a/apps/admin/src/App.tsx +++ b/apps/admin/src/App.tsx @@ -1,4 +1,4 @@ -import { BrowserRouter, Routes, Route } from 'react-router-dom' +import { BrowserRouter, Routes, Route, Navigate } from 'react-router-dom' import AdminLayout from './components/AdminLayout' import DashboardPage from './pages/DashboardPage' import ProductsPage from './pages/ProductsPage' @@ -17,7 +17,9 @@ import PaymentSettingsPage from './pages/PaymentSettingsPage' import ThemeSettingsPage from './pages/ThemeSettingsPage' import ContentSettingsPage from './pages/ContentSettingsPage' import SystemMaintenancePage from './pages/SystemMaintenancePage' -import MenuManagerPage from './pages/MenuManagerPage' +import MainNavigationPage from './pages/menu-manager/MainNavigationPage' +import FooterExplorePage from './pages/menu-manager/FooterExplorePage' +import FooterSupportPage from './pages/menu-manager/FooterSupportPage' import NewsletterSubscribersPage from './pages/NewsletterSubscribersPage' import ArticlesPage from './pages/ArticlesPage' import ArticleEditPage from './pages/ArticleEditPage' @@ -70,7 +72,10 @@ function App() { } /> } /> } /> - } /> + } /> + } /> + } /> + } /> } /> } /> } /> diff --git a/apps/admin/src/components/Sidebar.tsx b/apps/admin/src/components/Sidebar.tsx index 1bd83a5..a326c9b 100644 --- a/apps/admin/src/components/Sidebar.tsx +++ b/apps/admin/src/components/Sidebar.tsx @@ -53,11 +53,16 @@ const MAIN_MENU = [ { icon: BarChart3, label: 'Lazada Analytics', to: '/lazada-analytics' }, { icon: Layers, label: 'Lazada ทุกร้าน', to: '/lazada-overview' }, { icon: Globe2, label: 'All Analytics', to: '/global-analytics' }, - { icon: Layers, label: 'Menu Manager', to: '/menu-manager' }, { icon: Users, label: 'Subscribers', to: '/subscribers' }, { icon: MessageSquare, label: 'Contact Messages', to: '/contacts' }, ] +const MENU_MANAGER_MENU = [ + { icon: Layers, label: 'Main Navigation', to: '/menu-manager/main-navigation' }, + { icon: FileText, label: 'Footer Explore', to: '/menu-manager/footer-explore' }, + { icon: MessageSquare, label: 'Footer Support', to: '/menu-manager/footer-support' }, +] + const SETTINGS_MENU = [ { icon: Store, label: 'Store Settings', to: '/settings' }, { icon: CreditCard, label: 'Payment & Shipping',to: '/settings/payments' }, @@ -69,7 +74,9 @@ const SETTINGS_MENU = [ export default function Sidebar() { const navigate = useNavigate() const location = useLocation() + const isInMenuManager = location.pathname.startsWith('/menu-manager') const isInSettings = location.pathname.startsWith('/settings') + const [menuManagerOpen, setMenuManagerOpen] = useState(isInMenuManager) const [settingsOpen, setSettingsOpen] = useState(isInSettings) const handleLogout = () => { @@ -104,6 +111,35 @@ export default function Sidebar() { ))} + {/* Menu Manager Group */} +
+ + + {menuManagerOpen && ( +
+ {MENU_MANAGER_MENU.map((item) => ( + + `sidebar-link text-sm ${isActive ? 'sidebar-link-active' : 'sidebar-link-inactive'}` + } + > + + {item.label} + + ))} +
+ )} +
+ {/* Settings Group */}
+ ))} +
+ + {activeTab === 'content' ? ( +
+
+ {languages.map(lang => ( + + ))} +
+ + {contentFields.map(([field, label, placeholder]) => { + const value = featured[field]?.[activeLang] || ''; + const isLongText = field === 'subtitle'; + + return ( +
+ + {isLongText ? ( +