/* Copyright (C) 2025 QuantumNous This program is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more details. You should have received a copy of the GNU Affero General Public License along with this program. If not, see . For commercial licensing, please contact support@quantumnous.com */ import React from 'react'; import { Link, useLocation } from 'react-router-dom'; import { Box, LayoutDashboard, Trophy, BookOpen } from 'lucide-react'; import SkeletonWrapper from '../components/SkeletonWrapper'; const NAV_ICONS = { pricing: Box, console: LayoutDashboard, benchmark: Trophy, docs: BookOpen, }; const Navigation = ({ mainNavLinks, isMobile, isLoading, userState, pricingRequireAuth, }) => { const location = useLocation(); const isActive = (linkPath) => { if (!linkPath) return false; const currentPath = location.pathname; if (linkPath === "/") { return currentPath === "/"; } return currentPath.startsWith(linkPath); }; const renderNavLinks = () => { const baseClasses = "flex-shrink-0 inline-flex items-center gap-1.5 text-[14px] transition-colors duration-150 rounded-md px-3 py-1.5"; const hoverClasses = "hover:bg-accent hover:text-accent-foreground"; return mainNavLinks.map((link) => { const Icon = NAV_ICONS[link.itemKey]; const linkContent = ( <> {Icon && } {link.text} ); if (link.isExternal) { const openInNewTab = link.openInNewTab !== false; return ( {linkContent} ); } let targetPath = link.to; if (link.itemKey === "console" && !userState.user) { targetPath = "/login"; } if (link.itemKey === "pricing" && pricingRequireAuth && !userState.user) { targetPath = "/login"; } const active = isActive(link.to); const activeClasses = active ? "bg-accent text-accent-foreground font-semibold" : "text-muted-foreground"; return ( {linkContent} ); }); }; return ( ); }; export default Navigation;