import * as React from 'react'; import { NavItem, NavItemKey } from '../types'; import { Icon } from './ui/Icon'; import { useTranslation, Language } from '../hooks/useI18n'; interface SidebarProps { activePageName: string; activePageThemeColor: string; onOpenPageManager: () => void; activeNavKey: NavItemKey; setActiveNavKey: (page: NavItemKey) => void; theme: 'light' | 'dark'; setTheme: (theme: 'light' | 'dark') => void; currentUser: string; onLogout: () => void; } const NavMenu: React.FC<{ activeKey: NavItemKey; onSelect: (key: NavItemKey) => void; }> = ({ activeKey, onSelect }) => { const { t } = useTranslation(); const navItems: NavItem[] = [ { name: t('nav.page'), key: 'Page', icon: , children: [ { name: t('nav.page.link'), key: 'Page.Link' }, { name: t('nav.page.media'), key: 'Page.Media' }, { name: t('nav.page.design'), key: 'Page.Design' }, ], }, { name: t('nav.ai_assistant'), key: 'AI Assistant', icon: , children: [ { name: t('nav.ai_assistant.persona'), key: 'AI Assistant.Persona' }, { name: t('nav.ai_assistant.knowledge'), key: 'AI Assistant.Knowledge' }, { name: t('nav.ai_assistant.sensitivity'), key: 'AI Assistant.Sensitivity' }, ], }, { name: t('nav.analytics'), key: 'Analytics', icon: , children: [ { name: t('nav.analytics.page'), key: 'Analytics.Page' }, { name: t('nav.analytics.interactions'), key: 'Analytics.Interactions' }, { name: t('nav.analytics.crm'), key: 'Analytics.CRM' }, ], }, { name: t('nav.seo'), key: 'SEO', icon: , children: [ { name: t('nav.seo.short_links'), key: 'SEO.ShortLinks' }, { name: t('nav.seo.hosting'), key: 'SEO.Hosting' }, { name: t('nav.seo.services'), key: 'SEO.Services' }, ], }, { name: t('nav.aigc'), key: 'AIGC', icon: , children: [ { name: t('nav.aigc.creator'), key: 'AIGC.Creator' }, { name: t('nav.aigc.news'), key: 'AIGC.News' }, { name: t('nav.aigc.scheduler'), key: 'AIGC.Scheduler' }, ] }, { name: t('nav.showcase'), key: 'Showcase', icon: , children: [ { name: t('nav.showcase.personal'), key: 'Showcase.Personal' }, { name: t('nav.showcase.enterprise'), key: 'Showcase.Enterprise' }, ], }, ]; return ( {navItems.map(item => { const isActive = activeKey.startsWith(item.key); return ( onSelect(item.children ? item.children[0].key : item.key)} className={`w-full flex items-center gap-3 p-3 rounded-lg text-left transition-colors ${isActive ? 'bg-brand-primary/10 text-brand-primary' : 'hover:bg-gray-200 dark:hover:bg-gray-700'}`} > {item.icon} {item.name} {item.children && isActive && ( {item.children.map(child => ( onSelect(child.key)} className={`block w-full text-left text-sm p-2 rounded-md transition-colors ${activeKey === child.key ? 'text-brand-primary font-semibold' : 'text-gray-500 dark:text-gray-400 hover:text-gray-900 dark:hover:text-white'}`} > {child.name} ))} )} ); })} ); }; export const Sidebar: React.FC = ({ activePageName, activePageThemeColor, onOpenPageManager, activeNavKey, setActiveNavKey, theme, setTheme, currentUser, onLogout }) => { const { t, language, setLanguage } = useTranslation(); return ( ); };