"use client"; import { ChevronRight, type LucideIcon } from "lucide-react"; import { useMemo } from "react"; import { useTranslations } from "next-intl"; import { Collapsible, CollapsibleContent, CollapsibleTrigger } from "@/components/ui/collapsible"; import { SidebarGroup, SidebarGroupLabel, SidebarMenu, SidebarMenuAction, SidebarMenuButton, SidebarMenuItem, SidebarMenuSub, SidebarMenuSubButton, SidebarMenuSubItem, } from "@/components/ui/sidebar"; interface NavItem { title: string; url: string; icon: LucideIcon; isActive?: boolean; items?: { title: string; url: string; }[]; } export function NavMain({ items }: { items: NavItem[] }) { const t = useTranslations('nav_menu'); // Translation function that handles both exact matches and fallback to original const translateTitle = (title: string): string => { const titleMap: Record = { 'Researcher': 'researcher', 'Manage LLMs': 'manage_llms', 'Documents': 'documents', 'Upload Documents': 'upload_documents', 'Add Webpages': 'add_webpages', 'Add Youtube Videos': 'add_youtube', 'Manage Documents': 'manage_documents', 'Connectors': 'connectors', 'Add Connector': 'add_connector', 'Manage Connectors': 'manage_connectors', 'Podcasts': 'podcasts', 'Logs': 'logs', 'Platform': 'platform', }; const key = titleMap[title]; return key ? t(key) : title; }; // Memoize items to prevent unnecessary re-renders const memoizedItems = useMemo(() => items, [items]); return ( {translateTitle('Platform')} {memoizedItems.map((item, index) => { const translatedTitle = translateTitle(item.title); return ( {translatedTitle} {item.items?.length ? ( <> Toggle submenu {item.items?.map((subItem, subIndex) => { const translatedSubTitle = translateTitle(subItem.title); return ( {translatedSubTitle} ); })} ) : null} ); })} ); }