diff --git a/components/core/Navbar/Navbar.tsx b/components/core/Navbar/Navbar.tsx index 39e22eb17..c2af8e726 100644 --- a/components/core/Navbar/Navbar.tsx +++ b/components/core/Navbar/Navbar.tsx @@ -3,14 +3,14 @@ import { FC } from 'react' import Link from 'next/link' import { useTheme } from 'next-themes' import { Logo } from '@components/ui' -import { Searchbar, Toggle, UserNav } from '@components/core' +import { Searchbar, UserNav } from '@components/core' interface Props { className?: string } const Navbar: FC = ({ className }) => { const rootClassName = className - const { theme, setTheme } = useTheme() + return (
@@ -38,12 +38,6 @@ const Navbar: FC = ({ className }) => {
- - theme === 'dark' ? setTheme('light') : setTheme('dark') - } - />
diff --git a/components/core/UserNav/UserNav.module.css b/components/core/UserNav/UserNav.module.css index 497d3a73f..8d5ee16e9 100644 --- a/components/core/UserNav/UserNav.module.css +++ b/components/core/UserNav/UserNav.module.css @@ -2,8 +2,11 @@ @apply relative; } +.mainContainer { +} + .list { - @apply flex flex-row items-center h-full; + @apply flex flex-row items-center justify-items-end h-full; } .item { @@ -18,14 +21,26 @@ } .dropdownMenu { - @apply absolute right-0 mt-2 w-screen max-w-xs sm:px-0 z-50 border border-accents-1 bg-primary; - max-width: 160px; + @apply bg-primary fixed right-0 z-50 w-full h-full; - &.dropdownMenuContainer { - @apply shadow-lg overflow-hidden relative grid py-2; + @screen lg { + @apply absolute mt-3 right-0 w-screen; + max-width: 160px; + } + + & .dropdownMenuContainer { + @apply flex-col py-6 bg-primary h-full justify-around; + + @screen lg { + @apply border border-accents-1 shadow-lg py-2 h-auto; + } } & .link { - @apply px-6 py-3 block space-y-1 hover:bg-accents-1 transition ease-in-out duration-150 text-base leading-6 font-medium text-gray-900; + @apply cursor-pointer px-6 py-3 block space-y-1 hover:bg-accents-1 transition ease-in-out duration-150 text-base leading-6 font-medium text-gray-900; + } + + &.off { + @apply hidden; } } diff --git a/components/core/UserNav/UserNav.tsx b/components/core/UserNav/UserNav.tsx index 772ff6c33..7ce78c09a 100644 --- a/components/core/UserNav/UserNav.tsx +++ b/components/core/UserNav/UserNav.tsx @@ -1,25 +1,34 @@ -import { FC, useEffect, useState } from 'react' +import { FC, useEffect, useState, useRef } from 'react' +import Link from 'next/link' import cn from 'classnames' -import useCart from '@lib/bigcommerce/cart/use-cart' +import s from './UserNav.module.css' +import { useTheme } from 'next-themes' 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' +import { FocusScope } from '@react-aria/focus' + +import { + useOverlay, + DismissButton, + usePreventScroll, +} from '@react-aria/overlays' +import useCart from '@lib/bigcommerce/cart/use-cart' + 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 UserNav: FC = ({ className, children, ...props }) => { const { data } = useCart() - const [displayDropdown, setDisplayDropdown] = useState(false) const { openSidebar, closeSidebar, displaySidebar } = useUI() + const [displayDropdown, setDisplayDropdown] = useState(false) const itemsCount = Object.values(data?.line_items ?? {}).reduce(countItems, 0) + let ref = useRef() as React.MutableRefObject useEffect(() => { function handleClick(e: any) { @@ -45,56 +54,92 @@ const UserNav: FC = ({ className }) => { } }, [displayDropdown]) + const toggleDropdown = () => setDisplayDropdown((v) => !v) return ( ) } +interface DropdownMenuProps { + onClose: () => void + innerRef: React.MutableRefObject +} + +const DropdownMenu: FC = ({ + onClose, + children, + innerRef, + ...props +}) => { + const { theme, setTheme } = useTheme() + + let { overlayProps } = useOverlay( + { + onClose: onClose, + isOpen: true, + }, + innerRef + ) + + usePreventScroll() + return ( + + + + ) +} + export default UserNav diff --git a/components/ui/Container/Container.tsx b/components/ui/Container/Container.tsx index b8e07ee07..821c182cd 100644 --- a/components/ui/Container/Container.tsx +++ b/components/ui/Container/Container.tsx @@ -8,7 +8,7 @@ interface Props { } const Container: FC = ({ children, className, el = 'div' }) => { - const rootClassName = cn('mx-auto max-w-7xl px-3 md:px-6', className) + const rootClassName = cn('mx-auto max-w-7xl px-6', className) let Component: React.ComponentType