'use client'; import styles from './HomeSidebar.module.css'; import { useEffect, useState } from 'react'; import { SidebarChild, SidebarChildVO, } from '@/app/home/components/home-sidebar/HomeSidebarChild'; import { useRouter, usePathname } from 'next/navigation'; import { sidebarConfigList } from '@/app/home/components/home-sidebar/sidbarConfigList'; import langbotIcon from '../../assets/langbot-logo.webp'; import { Button } from '@/components/ui/button'; // TODO 侧边导航栏要加动画 export default function HomeSidebar({ onSelectedChangeAction, }: { onSelectedChangeAction: (sidebarChild: SidebarChildVO) => void; }) { // 路由相关 const router = useRouter(); const pathname = usePathname(); // 路由被动变化时处理 useEffect(() => { handleRouteChange(pathname); }, [pathname]); const [selectedChild, setSelectedChild] = useState( sidebarConfigList[0], ); useEffect(() => { console.log('HomeSidebar挂载完成'); initSelect(); return () => console.log('HomeSidebar卸载'); // eslint-disable-next-line react-hooks/exhaustive-deps }, []); function handleChildClick(child: SidebarChildVO) { setSelectedChild(child); handleRoute(child); onSelectedChangeAction(child); } function initSelect() { handleChildClick(sidebarConfigList[0]); } function handleRoute(child: SidebarChildVO) { console.log(child); router.push(`${child.route}`); } function handleRouteChange(pathname: string) { // TODO 这段逻辑并不好,未来router封装好后改掉 // 判断在home下,并且路由更改的是自己的路由子组件则更新UI const routeList = pathname.split('/'); if ( routeList[1] === 'home' && sidebarConfigList.find((childConfig) => childConfig.route === pathname) ) { console.log('find success'); const routeSelectChild = sidebarConfigList.find( (childConfig) => childConfig.route === pathname, ); if (routeSelectChild) { setSelectedChild(routeSelectChild); } } } return (
{/* LangBot、ICON区域 */}
{/* icon */} langbot-icon {/* 文字 */}
LangBot
v4.0.0
{/* 菜单列表,后期可升级成配置驱动 */}
{sidebarConfigList.map((config) => { return (
{ console.log('click:', config.id); handleChildClick(config); }} > {}} isSelected={selectedChild.id === config.id} icon={config.icon} name={config.name} />
); })}
{}} isSelected={false} icon={} name="系统设置" /> { // open docs.langbot.app window.open('https://docs.langbot.app', '_blank'); }} isSelected={false} icon={} name="帮助文档" />
); }