import { FC, useEffect, useState } from 'react' import cn from 'classnames' import useCart from '@lib/bigcommerce/cart/use-cart' import { Avatar } from '@components/core' import { Heart, Bag } from '@components/icon' import { useUI } from '@components/ui/context' import s from './UserNav.module.css' import Link from 'next/link' interface Props { className?: string } const countItem = (count: number, item: any) => count + item.quantity const countItems = (count: number, items: any[]) => items.reduce(countItem, count) const UserNav: FC = ({ className }) => { const { data } = useCart() const [displayDropdown, setDisplayDropdown] = useState(false) const { openSidebar, closeSidebar, displaySidebar } = useUI() const itemsCount = Object.values(data?.line_items ?? {}).reduce(countItems, 0) useEffect(() => { function handleClick(e: any) { const isInside = e?.target?.closest(`#user-dropdown`) !== null if (isInside) return setDisplayDropdown(false) document.removeEventListener('click', handleClick) } function handleKeyPress(e: KeyboardEvent) { if (e.key === 'Escape') { setDisplayDropdown(false) document.removeEventListener('keydown', handleKeyPress) } } if (displayDropdown) { document.addEventListener('click', handleClick) document.addEventListener('keydown', handleKeyPress) return () => { document.removeEventListener('click', handleClick) document.removeEventListener('keydown', handleKeyPress) } } }, [displayDropdown]) return ( ) } export default UserNav