import AppLogo from '@/components/app-logo'; import { Button } from '@/components/ui/button'; import { DropdownMenu, DropdownMenuContent, DropdownMenuItem, DropdownMenuTrigger } from '@/components/ui/dropdown-menu'; import { ScrollArea } from '@/components/ui/scroll-area'; import { useAuth } from '@/hooks/use-auth'; import useScreen from '@/hooks/use-screen'; import { cn } from '@/lib/utils'; import { SharedData } from '@/types/global'; import { Link, usePage } from '@inertiajs/react'; import { ChevronDown, Menu, X } from 'lucide-react'; import { Fragment, useEffect, useState } from 'react'; import Actions from './partials/actions'; interface NavbarProps { language?: boolean; heightCover?: boolean; customizable?: boolean; } const Navbar = ({ language = false, heightCover = true, customizable = true }: NavbarProps) => { const { props } = usePage(); const { ziggy, navbar, translate } = props; const { isAdmin, isLoggedIn } = useAuth(); const [isSticky, setIsSticky] = useState(false); const [isMenuOpen, setIsMenuOpen] = useState(false); const { screen } = useScreen(); useEffect(() => { const handleScroll = () => { const scrollPosition = window.scrollY; if (scrollPosition > 100) { setIsSticky(true); } else { setIsSticky(false); } }; window.addEventListener('scroll', handleScroll); return () => { window.removeEventListener('scroll', handleScroll); }; }, []); const renderNavItems = (item: NavbarItem) => { if (item.active) { switch (item.type) { case 'url': return ( {item.title} ); case 'dropdown': return ( {item.title} {item.items && Array.isArray(item.items) && item.items.map((subItem: any, idx: number) => ( {subItem.title} ))} ); default: return null; } } }; const sortedItems = navbar.navbar_items.sort((a, b) => a.sort - b.sort); const customizeLink = props.customize ? ziggy.location : '?customize=true'; return ( <>
{/* Mobile menu button */} {/* Logo */}
{/* Desktop Navigation */}
{sortedItems.map((item) => ( {renderNavItems(item)} ))}
{customizable && isAdmin && ( )}
{/* Mobile Menu */} {isMenuOpen && (
{sortedItems.map((item) => ( {renderNavItems(item)} ))} {customizable && isAdmin && ( )} {!isLoggedIn && (
)}
)}
{heightCover &&
} ); }; export default Navbar;