import { ChevronRight } from 'lucide-react'; import type { MenuItem } from '@/store/menuStore'; import { useEffect, useRef } from 'react'; interface SidebarProps { menuItems: MenuItem[]; activeMenu: string; expandedMenus: string[]; sidebarCollapsed: boolean; isMobile: boolean; onMenuClick: (menuId: string, path: string) => void; onToggleSubmenu: (menuId: string) => void; onCloseMobileSidebar?: () => void; } export default function Sidebar({ menuItems, activeMenu, expandedMenus, sidebarCollapsed, isMobile, onMenuClick, onToggleSubmenu, onCloseMobileSidebar, }: SidebarProps) { // 활성 메뉴 자동 스크롤을 위한 ref // eslint-disable-next-line no-undef const activeMenuRef = useRef(null); // eslint-disable-next-line no-undef const menuContainerRef = useRef(null); // 활성 메뉴가 변경될 때 자동 스크롤 useEffect(() => { if (activeMenuRef.current && menuContainerRef.current) { // 부드러운 스크롤로 활성 메뉴를 화면에 표시 activeMenuRef.current.scrollIntoView({ behavior: 'smooth', block: 'nearest', inline: 'nearest', }); } }, [activeMenu]); // activeMenu 변경 시에만 스크롤 (메뉴 클릭 시) const handleMenuClick = (menuId: string, path: string, hasChildren: boolean) => { if (hasChildren) { onToggleSubmenu(menuId); } else { onMenuClick(menuId, path); if (isMobile && onCloseMobileSidebar) { onCloseMobileSidebar(); } } }; return (
{/* 로고 */}
S
{!sidebarCollapsed && (

SAM

Smart Automation Management

)}
{/* 메뉴 */}
{menuItems.map((item) => { const IconComponent = item.icon; const hasChildren = item.children && item.children.length > 0; const isExpanded = expandedMenus.includes(item.id); const isActive = activeMenu === item.id; return (
{/* 메인 메뉴 버튼 */} {/* 서브메뉴 */} {hasChildren && isExpanded && !sidebarCollapsed && (
{item.children?.map((subItem) => { const SubIcon = subItem.icon; const isSubActive = activeMenu === subItem.id; return (
); })}
)}
); })}
); }