Spaces:
Paused
Paused
| import { | |
| BotMessageSquare, | |
| Calendars, | |
| Compass, | |
| KeyRound, | |
| Languages, | |
| LibraryBig, | |
| Settings, | |
| } from 'lucide-react'; | |
| import { useOnborda } from 'onborda'; | |
| import { useNavigate, useLocation } from 'react-router-dom'; | |
| import AgentScope from '@/assets/images/agentscope.svg?react'; | |
| import { CHAT_TOUR_NAME } from '@/components/tour/chatTourSteps'; | |
| import { | |
| Sidebar, | |
| SidebarContent, | |
| SidebarFooter, | |
| SidebarGroup, | |
| SidebarGroupContent, | |
| SidebarHeader, | |
| SidebarMenu, | |
| SidebarMenuButton, | |
| SidebarMenuItem, | |
| } from '@/components/ui/sidebar'; | |
| import i18n from '@/i18n'; | |
| import { useTranslation } from '@/i18n/useI18n'; | |
| export function AppSidebar() { | |
| const navigate = useNavigate(); | |
| const location = useLocation(); | |
| const { t } = useTranslation(); | |
| const { startOnborda } = useOnborda(); | |
| const handleStartTour = () => { | |
| if (!location.pathname.startsWith('/chat')) { | |
| // Page not mounted yet — leave a flag, navigate, and let the | |
| // ChatTourController auto-trigger after ChatPage mounts. | |
| sessionStorage.setItem('force_tour', '1'); | |
| navigate('/chat'); | |
| } else { | |
| startOnborda(CHAT_TOUR_NAME); | |
| } | |
| }; | |
| const handleToggleLanguage = () => { | |
| const next = i18n.language.startsWith('zh') ? 'en' : 'zh'; | |
| i18n.changeLanguage(next); | |
| }; | |
| return ( | |
| <Sidebar collapsible="none" className="w-[calc(var(--sidebar-width-icon)+1px)]! border-r"> | |
| <SidebarHeader> | |
| <div className="flex items-center justify-center h-12 mt-2"> | |
| <AgentScope className="size-8 items-center justify-center rounded-lg" /> | |
| </div> | |
| </SidebarHeader> | |
| <SidebarContent> | |
| <SidebarGroup> | |
| <SidebarGroupContent> | |
| <SidebarMenu> | |
| <SidebarMenuItem key={'chat'}> | |
| <SidebarMenuButton | |
| tooltip={{ children: t('common.chat'), hidden: false }} | |
| isActive={ | |
| location.pathname === '/chat' || | |
| location.pathname.startsWith('/chat/') | |
| } | |
| onClick={() => navigate('/chat')} | |
| className="px-2.5 md:px-2" | |
| > | |
| <BotMessageSquare /> | |
| </SidebarMenuButton> | |
| </SidebarMenuItem> | |
| <SidebarMenuItem> | |
| <SidebarMenuButton | |
| tooltip={{ children: t('common.schedule'), hidden: false }} | |
| isActive={location.pathname === '/schedule'} | |
| onClick={() => navigate('/schedule')} | |
| className="px-2" | |
| > | |
| <Calendars /> | |
| </SidebarMenuButton> | |
| </SidebarMenuItem> | |
| </SidebarMenu> | |
| </SidebarGroupContent> | |
| </SidebarGroup> | |
| <SidebarGroup> | |
| <SidebarGroupContent> | |
| <SidebarMenu> | |
| <SidebarMenuItem> | |
| <SidebarMenuButton | |
| tooltip={{ children: t('common.credential'), hidden: false }} | |
| isActive={location.pathname === '/credential'} | |
| onClick={() => navigate('/credential')} | |
| className="px-2" | |
| > | |
| <KeyRound /> | |
| </SidebarMenuButton> | |
| </SidebarMenuItem> | |
| <SidebarMenuItem> | |
| <SidebarMenuButton | |
| tooltip={{ children: t('common.knowledge'), hidden: false }} | |
| isActive={location.pathname === '/knowledge'} | |
| onClick={() => navigate('/knowledge')} | |
| className="px-2" | |
| > | |
| <LibraryBig /> | |
| </SidebarMenuButton> | |
| </SidebarMenuItem> | |
| </SidebarMenu> | |
| </SidebarGroupContent> | |
| </SidebarGroup> | |
| </SidebarContent> | |
| <SidebarFooter> | |
| <SidebarMenu> | |
| <SidebarMenuItem> | |
| <SidebarMenuButton | |
| tooltip={{ | |
| children: i18n.language.startsWith('zh') | |
| ? t('common.switchToEn') | |
| : t('common.switchToZh'), | |
| hidden: false, | |
| }} | |
| onClick={handleToggleLanguage} | |
| className="px-2" | |
| > | |
| <Languages /> | |
| </SidebarMenuButton> | |
| </SidebarMenuItem> | |
| <SidebarMenuItem> | |
| <SidebarMenuButton | |
| tooltip={{ children: t('tour.trigger'), hidden: false }} | |
| onClick={handleStartTour} | |
| className="px-2" | |
| > | |
| <Compass /> | |
| </SidebarMenuButton> | |
| </SidebarMenuItem> | |
| <SidebarMenuItem> | |
| <SidebarMenuButton | |
| tooltip={{ children: t('common.settings'), hidden: false }} | |
| isActive={location.pathname === '/setup'} | |
| onClick={() => navigate('/setup')} | |
| className="px-2" | |
| > | |
| <Settings /> | |
| </SidebarMenuButton> | |
| </SidebarMenuItem> | |
| </SidebarMenu> | |
| </SidebarFooter> | |
| </Sidebar> | |
| ); | |
| } | |