import { Bot, Menu } from "lucide-react"; import { Button, Tooltip } from "antd"; import { Link, useLocation } from "react-router-dom"; import { navigationTools, type NavigationToolSlug } from "@/constant/navigation-tools"; import { AppConfigModal } from "@/components/layout/app-config-modal"; import { MobileNavDrawer } from "@/components/layout/mobile-nav-drawer"; import { UserStatusActions } from "@/components/layout/user-status-actions"; import { cn } from "@/lib/utils"; import { useEffect, useRef, useState } from "react"; import { useAgentStore } from "@/stores/use-agent-store"; export function AppTopNav() { const { pathname } = useLocation(); const [mobileNavOpen, setMobileNavOpen] = useState(false); const autoConnectRef = useRef(false); const agentToken = useAgentStore((state) => state.token); const agentEnabled = useAgentStore((state) => state.enabled); const agentConnected = useAgentStore((state) => state.connected); const connectAgent = useAgentStore((state) => state.connectAgent); const togglePanel = useAgentStore((state) => state.togglePanel); const panelOpen = useAgentStore((state) => state.panelOpen); const hideHeader = /^\/canvas\/[^/]+/.test(pathname); const slug = pathname.split("/").filter(Boolean)[0]; const activeToolSlug = navigationTools.some((tool) => tool.slug === slug) ? (slug as NavigationToolSlug) : undefined; useEffect(() => { if (autoConnectRef.current || agentEnabled || agentConnected || !agentToken.trim()) return; autoConnectRef.current = true; connectAgent({ silent: true }); }, [agentConnected, agentEnabled, agentToken, connectAgent]); return ( <> {!hideHeader ? ( 无限画布 setMobileNavOpen(true)} aria-label="打开导航菜单" title="导航菜单" > {navigationTools.map((tool) => { const Icon = tool.icon; const active = tool.slug === activeToolSlug; return ( {tool.label} ); })} } onClick={togglePanel} aria-label="打开 Agent" /> ) : null} setMobileNavOpen(false)} /> > ); }