'use client' import { FC, useEffect, useMemo, useRef } from 'react' import Link from 'next/link' import { useRouter, usePathname } from 'next/navigation' import Image from 'next/image' import { Fragment, useState } from 'react' import { Dialog, Tab, Transition } from '@headlessui/react' import { Bars3Icon, MagnifyingGlassIcon, QuestionMarkCircleIcon, XMarkIcon, } from '@heroicons/react/24/outline' // Product data import { GLOVES_DATA } from '@/data/Gloves' import { INDUSTRIAL_DATA } from '@/data/Industrial' import CartModal from '@/components/cart/modal' let _scrollTopValue: number | null = null const navigation = { pages: [ { name: 'Industrial', href: '/collections/industrial' }, { name: 'Abrasive', href: '/collections/abrasives' }, { name: 'Adhesive', href: '/collections/adhesives' }, { name: 'Gloves', href: '/collections/gloves' }, { name: 'Oscillating Accessories', href: '/collections/oscillating-accessories', }, ], } interface Link { href: string label: string } interface NavbarProps { links?: Link[] } const NAVIGATION = [ { category: 'Industrial', link: '/collections/industrial', // hidden: true, subMenus: [ { name: 'Warehouse Racks', link: '/collections/industrial/warehouse-racks', image: INDUSTRIAL_DATA.WAREHOUSE_RACKS.navbarImage, }, { name: 'Fences', link: '/collections/industrial/fences', image: INDUSTRIAL_DATA.FENCES.navbarImage, }, { name: 'Pallet Trucks & Forklifts', link: '/collections/industrial/pallet-trucks-forklifts', image: INDUSTRIAL_DATA.FORKLIFTS.navbarImage, }, { name: 'Warehouse Accessories', link: '/collections/industrial/warehouse-accessories', image: INDUSTRIAL_DATA.WAREHOUSE_ACCESSORIES.navbarImage, }, ], }, { category: 'Abrasives', link: '/collections/abrasives', subMenus: [ { name: 'Cut off Discs', link: '/collections/abrasives/cut-off-discs', image: 'https://linconson-a.netlify.app/Abrasive.jpg', }, { name: 'Flap Discs', link: '/collections/abrasives/flap-discs', image: 'https://linconson-a.netlify.app/flap.jpg', }, { name: 'Grinding Wheels', link: '/collections/abrasives/metal-grinding-wheel', image: '/assets/navbar/grinding_wheel.jpeg', }, { name: 'Sanding Discs', link: '/collections/abrasives/sanding-discs', image: '/assets/navbar/sanding_disc.jpeg', }, ], }, { category: 'Adhesives', link: '/collections/adhesives', subMenus: [ { name: 'Grip Tape', link: '/collections/adhesives/grip-tape', // image: 'https://linconson-a.netlify.app/gtape.jpg', image: '/assets/navbar/grip_tape.jpeg', }, { name: 'Tread Tape', link: '/collections/adhesives/tread-tape', image: '/assets/navbar/tread_tape.jpg', }, { name: 'Carpet Tread', link: '/collections/adhesives/carpet-tread', image: '/assets/navbar/carpet_tread.jpg', }, ], }, { category: 'Gloves', link: '/collections/gloves', subMenus: [ { name: 'Latex foam', link: '#latex-foam', image: GLOVES_DATA.LATEX_FOAM.navbarImage, }, { name: 'Wrinkled Foam', link: '#wrinkled-foam', image: GLOVES_DATA.WRINKLED_FOAM.navbarImage, }, { name: 'PU Coated', link: '#pu-coated', image: GLOVES_DATA.PU_COATED.navbarImage, }, { name: 'PU Cut-resistant', link: '#pu-cut-resistant', image: GLOVES_DATA.PU_CUT_RESISTANT.navbarImage, }, { name: 'Nitrile Cut-resistant', link: '#nitrile-cut-resistant', image: GLOVES_DATA.NITRILE_CUT_RESISTANT.navbarImage, }, { name: 'Latex Cut-resistant', link: '#latex-cut-resistant', image: GLOVES_DATA.LATEX_CUT_RESISTANT.navbarImage, }, { name: 'Nitrile Coated', link: '#nitrile-coated', image: GLOVES_DATA.NITRILE_COATED.navbarImage, }, { name: 'Spandex', link: '#spandex', image: GLOVES_DATA.SPANDEX.navbarImage, }, { name: 'Cotton Latex', link: '#cotton-latex', image: GLOVES_DATA.COTTON_LATEX.navbarImage, }, { name: 'Winter', link: '#winter', image: GLOVES_DATA.WINTER.navbarImage, }, { name: 'Leather', link: '#leather', image: GLOVES_DATA.LEATHER.navbarImage, }, ], }, { category: 'Oscillating Accessories', link: '/collections/oscillating-accessories', }, ] const Navbar: FC = ({ links }) => { const router = useRouter() const pathname = usePathname() const [isMounted, setIsMounted] = useState(false) useEffect(() => { setIsMounted(true) }, []) const correspondingNavItem = useMemo( () => isMounted ? NAVIGATION.find((_item) => pathname?.includes(_item.link)) : null, [pathname, isMounted], ) const correspondingNavSubMenu = useMemo(() => { if (!isMounted) return null if (correspondingNavItem && Array.isArray(correspondingNavItem.subMenus)) { return (correspondingNavItem.subMenus as object[]).find((subMenu: any) => pathname?.includes(subMenu.link), ) } }, [correspondingNavItem, pathname, isMounted]) const [mobileMenuOpen, setMobileMenuOpen] = useState(false) const isHomePage = useMemo( () => isMounted && pathname === '/', [pathname, isMounted], ) /* * Fixed nav positioning */ const headerRef = useRef(null) const [showNav, setShowNav] = useState(true) const trackScrolling = () => { if (typeof window !== 'undefined') { const scrollTop = window.pageYOffset || document.documentElement.scrollTop if ( (_scrollTopValue === null || scrollTop > _scrollTopValue) && scrollTop > 400 ) { setShowNav(false) } else { setShowNav(true) } _scrollTopValue = scrollTop <= 0 ? 0 : scrollTop } } useEffect(() => { document.addEventListener('scroll', trackScrolling, { passive: true }) if (typeof window !== 'undefined') { window.addEventListener('resize', trackScrolling, { passive: true }) } }, []) return ( <> {/* Mobile menu */}
{/* Links */}
{/* {navigation.categories.map((category) => ( classNames( selected ? 'text-indigo-600 border-indigo-600' : 'text-gray-900 border-transparent', 'flex-1 whitespace-nowrap border-b-2 py-4 px-1 text-base font-medium' ) } > {category.name} ))} */}
{/* {navigation.categories.map((category) => (
{category.featured.map((item) => (
{item.imageAlt}
))}
))} */}
{navigation.pages.map((page) => (
{ setMobileMenuOpen(false) }} > {page.name}
))}
{/* */} {/*
*/}
{/* Navigation */}
{correspondingNavItem && correspondingNavItem.subMenus && (
{correspondingNavItem.subMenus?.map((subMenu) => { const _isActive = pathname?.includes(subMenu.link) return ( { e.preventDefault() // Smooth scroll to item if (subMenu.link && document) { const elementToScrollTo = document.getElementById( subMenu.link.replace('#', ''), ) if (elementToScrollTo) { elementToScrollTo.scrollIntoView() } } } : undefined } >

{subMenu.name}

) })}
)} ) } export default Navbar