import { Layout, Menu, Space, Tag, Typography } from 'antd'; import type { MainSidebarProps } from './types'; const { Sider } = Layout; const { Text } = Typography; export function MainSidebar({ activeTopMenu, hasAccess, sidebarCollapsed, isMobileViewport, openKeys: controlledOpenKeys, apiMenuItems, docsMenuItems, planMenuItems, chatMenuItems, playMenuItems, selectedApiMenu, selectedDocsMenu, selectedPlanMenu, selectedChatMenu, selectedPlayMenu, introColor, introTag, introDescription, onOpenKeysChange, onSelectApiMenu, onSelectDocsMenu, onSelectPlanMenu, onSelectChatMenu, onSelectPlayMenu, }: MainSidebarProps) { const effectiveTopMenu = !hasAccess ? 'docs' : activeTopMenu; const isDocsGroup = effectiveTopMenu === 'docs' || effectiveTopMenu === 'apis'; const visibleOpenKeys = sidebarCollapsed ? [] : controlledOpenKeys.length ? controlledOpenKeys : isDocsGroup ? !hasAccess ? ['docs-group'] : ['docs-group', 'api-group'] : effectiveTopMenu === 'play' ? ['play-group', 'play-layout-group'] : ['plan-group', 'codex-live-group', 'app-log-group', 'chat-manage-group']; const selectedKeys = effectiveTopMenu === 'docs' ? [selectedDocsMenu] : effectiveTopMenu === 'apis' ? [selectedApiMenu] : effectiveTopMenu === 'plans' ? [selectedPlanMenu] : effectiveTopMenu === 'play' ? [selectedPlayMenu] : [selectedChatMenu]; const sidebarItems = isDocsGroup ? !hasAccess ? [...(docsMenuItems ?? [])] : [...(docsMenuItems ?? []), ...(apiMenuItems ?? [])] : effectiveTopMenu === 'play' ? [...(playMenuItems ?? [])] : [...(planMenuItems ?? []), ...(chatMenuItems ?? [])]; return (
{introTag} {!sidebarCollapsed ? ( {introDescription} ) : null} { onOpenKeysChange(keys as string[]); }} onClick={({ key, keyPath }) => { if (keyPath.includes('docs-group')) { onSelectDocsMenu(key); return; } if (keyPath.includes('api-group')) { onSelectApiMenu(key as MainSidebarProps['selectedApiMenu']); return; } if (keyPath.includes('plan-group') || keyPath.includes('server-group')) { onSelectPlanMenu(key as MainSidebarProps['selectedPlanMenu']); return; } if (keyPath.includes('codex-live-group') || keyPath.includes('app-log-group') || keyPath.includes('chat-manage-group')) { onSelectChatMenu(key as MainSidebarProps['selectedChatMenu']); return; } if (keyPath.includes('play-group') || keyPath.includes('play-layout-group')) { onSelectPlayMenu(key as MainSidebarProps['selectedPlayMenu']); } }} />
); }