import React from 'react'; import { Link } from 'react-router-dom'; import { ChevronRight } from "lucide-react"; import { SidebarMenuItem, SidebarMenuButton, SidebarMenuSub, SidebarMenuSubButton, SidebarMenuSubItem } from "@/components/ui/sidebar"; import { Collapsible, CollapsibleContent, CollapsibleTrigger } from "@/components/ui/collapsible"; import { MenuItem } from './types'; interface SidebarMenuItemProps { item: MenuItem; isActive: (url: string) => boolean; canAccessItem: (itemKey: string) => boolean; isAdmin: boolean; openGroups: { [key: string]: boolean }; onSubmenuToggle: (itemKey: string, currentState: boolean) => void; onMenuItemClick: (hasSubItems?: boolean) => void; getIconProps: (itemKey?: string) => any; } export const AppSidebarMenuItem: React.FC = ({ item, isActive, canAccessItem, isAdmin, openGroups, onSubmenuToggle, onMenuItemClick, getIconProps }) => { const canAccess = canAccessItem(item.key); if (!canAccess && !isAdmin) { return null; // Don't show item if no access } // Filtrar subitens permitidos para o usuário logado const subItemsPermitidos = (item.subItems || []).filter((subItem) => { if (subItem.url === "/admin/theme-customization" && !isAdmin) { return false; } return isAdmin || canAccessItem(subItem.key); }); // Se o item for apenas um agrupador de subitens e todos estiverem bloqueados, não renderizar o agrupador if (item.subItems && item.subItems.length > 0 && subItemsPermitidos.length === 0 && !isAdmin) { return null; } return ( {item.subItems && item.subItems.length > 0 ? ( onSubmenuToggle(item.key, openGroups[item.key] || false)} >
{item.icon && } {item.title}
{subItemsPermitidos.map((subItem) => ( onMenuItemClick(false)} > {subItem.icon && } {subItem.title} ))}
) : ( onMenuItemClick(false)} > {item.icon && } {item.title} )}
); };