'use client' import { HambergerMenu, ArrowLeft2 } from 'iconsax-react' import { FC, useState, useRef, useEffect } from 'react' import Image from 'next/image' import { useRouter } from 'next/navigation' import { useGetCategories } from '../hooks/useShareData' import { Category } from '../types/SharedTypes' const Menu: FC = () => { const [isOpen, setIsOpen] = useState(false) const [hoveredPath, setHoveredPath] = useState([]) const [menuPosition, setMenuPosition] = useState({ top: 0, right: 0 }) const { data, isLoading } = useGetCategories() const menuRef = useRef(null) const router = useRouter() useEffect(() => { const handleClickOutside = (event: MouseEvent) => { if (menuRef.current && !menuRef.current.contains(event.target as Node)) { setIsOpen(false) setHoveredPath([]) } } document.addEventListener('mousedown', handleClickOutside) return () => document.removeEventListener('mousedown', handleClickOutside) }, []) useEffect(() => { if (isOpen && menuRef.current) { const rect = menuRef.current.getBoundingClientRect() setMenuPosition({ top: rect.bottom + window.scrollY + 8, right: window.innerWidth - rect.right - window.scrollX }) } }, [isOpen]) const parentCategories = data?.results?.data?.filter(cat => !cat.parent) || [] const handleCategoryHover = (category: Category, level: number) => { const newPath = [...hoveredPath.slice(0, level), category] setHoveredPath(newPath) } const handleCategoryClick = (category: Category) => { router.push(`/products/${category.title_en}`) setIsOpen(false) setHoveredPath([]) } const renderCategoryLevel = (categories: Category[], level: number) => { return (
{categories.map((category) => (
handleCategoryHover(category, level)} onClick={() => handleCategoryClick(category)} >
{category.icon && ( {category.title_fa} )} {category.title_fa} {category.children?.length > 0 && ( )}
))}
) } return (
setIsOpen(!isOpen)} onMouseEnter={() => setIsOpen(true)} >
دسته بندی کالاها
دسته‌ها
{isOpen && (
{ setIsOpen(false) setHoveredPath([]) }} > {/* دسته‌های اصلی (سطح اول) */} {isLoading ? (
در حال بارگذاری...
) : parentCategories.length > 0 ? ( <> {renderCategoryLevel(parentCategories, 0)} {/* سطوح بعدی (recursive) */} {hoveredPath.map((category, index) => { if (category.children && category.children.length > 0) { return (
{renderCategoryLevel(category.children, index + 1)}
) } return null })} ) : (
دسته‌بندی‌ای یافت نشد
)}
)}
) } export default Menu