Dropdown fix

This commit is contained in:
Bel Curcio 2022-03-15 19:28:13 +01:00
parent d30fe2367a
commit 17e8d4c4da
12 changed files with 70 additions and 75 deletions

View File

@ -13,10 +13,7 @@ import { Sidebar, Button, LoadingDots } from '@components/ui'
import PaymentMethodView from '@components/checkout/PaymentMethodView' import PaymentMethodView from '@components/checkout/PaymentMethodView'
import CheckoutSidebarView from '@components/checkout/CheckoutSidebarView' import CheckoutSidebarView from '@components/checkout/CheckoutSidebarView'
import { CheckoutProvider } from '@components/checkout/context' import { CheckoutProvider } from '@components/checkout/context'
import { import { MenuSidebarView } from '@components/common/UserNav'
AuthMenuSidebarView,
MenuSidebarView,
} from '@components/common/UserNav'
import type { Page } from '@commerce/types/page' import type { Page } from '@commerce/types/page'
import type { Category } from '@commerce/types/site' import type { Category } from '@commerce/types/site'
import type { Link as LinkProps } from '../UserNav/MenuSidebarView' import type { Link as LinkProps } from '../UserNav/MenuSidebarView'
@ -89,7 +86,6 @@ const SidebarView: React.FC<{
{sidebarView === 'CHECKOUT_VIEW' && <CheckoutSidebarView />} {sidebarView === 'CHECKOUT_VIEW' && <CheckoutSidebarView />}
{sidebarView === 'PAYMENT_VIEW' && <PaymentMethodView />} {sidebarView === 'PAYMENT_VIEW' && <PaymentMethodView />}
{sidebarView === 'SHIPPING_VIEW' && <ShippingView />} {sidebarView === 'SHIPPING_VIEW' && <ShippingView />}
{sidebarView === 'MOBILE_CUSTOMERMENU_VIEW' && <AuthMenuSidebarView />}
{sidebarView === 'MOBILE_MENU_VIEW' && <MenuSidebarView links={links} />} {sidebarView === 'MOBILE_MENU_VIEW' && <MenuSidebarView links={links} />}
</Sidebar> </Sidebar>
) )

View File

@ -38,9 +38,8 @@ const SidebarLayout: FC<ComponentProps> = ({
<span className="ml-2 text-accent-7 text-xs">Back</span> <span className="ml-2 text-accent-7 text-xs">Back</span>
</button> </button>
)} )}
<span className={s.nav}>
<UserNav /> <UserNav />
</span>
</header> </header>
<div className={s.container}>{children}</div> <div className={s.container}>{children}</div>
</div> </div>

View File

@ -1,3 +0,0 @@
.root {
min-height: 100vh;
}

View File

@ -1,11 +0,0 @@
import { useUI } from '@components/ui/context'
import SidebarLayout from '@components/common/SidebarLayout'
export default function AuthMenuSidebarView() {
const { closeSidebar } = useUI()
return (
<SidebarLayout handleClose={() => closeSidebar()}>
THIS IS A SIDEBAR VIEW
</SidebarLayout>
)
}

View File

@ -1 +0,0 @@
export { default } from './AuthMenuSidebarView'

View File

@ -14,11 +14,22 @@
} }
.root { .root {
display: hidden; @apply inset-0 fixed;
left: 72px;
z-index: 10;
height: 100vh;
min-width: 100vw;
transition: none;
} }
@media (min-width: 767px) { .placeholder {
height: 68px;
}
@media screen(lg) {
.root { .root {
display: block; @apply static;
min-width: inherit;
height: inherit;
} }
} }

View File

@ -1,12 +1,15 @@
import cn from 'clsx' import cn from 'clsx'
import { useTheme } from 'next-themes' import { useTheme } from 'next-themes'
import { useRouter } from 'next/router' import { useRouter } from 'next/router'
import { Moon, Sun } from '@components/icons' import { UserNav } from '@components/common'
import { Moon, Sun, Cross } from '@components/icons'
import s from './CustomerMenuContent.module.css' import s from './CustomerMenuContent.module.css'
import useLogout from '@framework/auth/use-logout' import useLogout from '@framework/auth/use-logout'
import { import {
Dropdown as DropdownRoot,
DropdownMenuItem, DropdownMenuItem,
DropdownContent, DropdownContent,
DropdownTrigger,
} from '@components/ui/Dropdown/Dropdown' } from '@components/ui/Dropdown/Dropdown'
const LINKS = [ const LINKS = [
@ -24,6 +27,8 @@ const LINKS = [
}, },
] ]
export const Dropdown = <DropdownRoot />
export default function CustomerMenuContent() { export default function CustomerMenuContent() {
const router = useRouter() const router = useRouter()
const logout = useLogout() const logout = useLogout()
@ -35,14 +40,32 @@ export default function CustomerMenuContent() {
} }
return ( return (
<DropdownContent id="CustomerMenuContent"> <DropdownContent
asChild
side="bottom"
sideOffset={10}
className={s.root}
id="CustomerMenuContent"
>
{/* <div className={s.placeholder}>
<button
aria-label="Close"
className="hover:text-accent-5 transition ease-in-out duration-150 flex items-center focus:outline-none mr-6"
>
<Cross className="h-6 w-6 hover:text-accent-3" />
<span className="ml-2 text-accent-7 text-sm ">Close</span>
</button>
<div className={s.nav}>
<UserNav />
</div>
</div> */}
{LINKS.map(({ name, href }) => ( {LINKS.map(({ name, href }) => (
<DropdownMenuItem key={href}> <DropdownMenuItem key={href}>
<a <a
onClick={(e) => handleClick(e, href)}
className={cn(s.link, { className={cn(s.link, {
[s.active]: pathname === href, [s.active]: pathname === href,
})} })}
onClick={(e) => handleClick(e, href)}
> >
{name} {name}
</a> </a>
@ -52,7 +75,7 @@ export default function CustomerMenuContent() {
<a <a
className={cn(s.link, 'justify-between')} className={cn(s.link, 'justify-between')}
onClick={() => { onClick={() => {
theme === 'dark' ? setTheme('light') : setTheme('dark') setTheme(theme === 'dark' ? 'light' : 'dark')
}} }}
> >
<div> <div>

View File

@ -1 +1 @@
export { default } from './CustomerMenuContent' export { default as CustomerMenuContent } from './CustomerMenuContent'

View File

@ -1,19 +1,18 @@
import cn from 'clsx' import cn from 'clsx'
import Link from 'next/link' import Link from 'next/link'
import s from './UserNav.module.css' import s from './UserNav.module.css'
import useCart from '@framework/cart/use-cart'
import CustomerMenuContent from './CustomerMenuContent'
import Button from '@components/ui/Button'
import { useUI } from '@components/ui/context'
import { Avatar } from '@components/common' import { Avatar } from '@components/common'
import useCart from '@framework/cart/use-cart'
import { useUI } from '@components/ui/context'
import { Heart, Bag, Menu } from '@components/icons' import { Heart, Bag, Menu } from '@components/icons'
import { CustomerMenuContent, Dropwdown } from './CustomerMenuContent'
import useCustomer from '@framework/customer/use-customer' import useCustomer from '@framework/customer/use-customer'
import React from 'react'
import { import {
Dropdown, Dropdown,
DropdownContent, DropdownTrigger as DropdownTriggerInst,
DropdownTrigger, Button,
DropdownMenuItem, } from '@components/ui'
} from '@components/ui/Dropdown/Dropdown'
import type { LineItem } from '@commerce/types/cart' import type { LineItem } from '@commerce/types/cart'
@ -33,6 +32,9 @@ const UserNav: React.FC<{
} = useUI() } = useUI()
const itemsCount = data?.lineItems.reduce(countItem, 0) ?? 0 const itemsCount = data?.lineItems.reduce(countItem, 0) ?? 0
const DropdownTrigger = isCustomerLoggedIn
? DropdownTriggerInst
: React.Fragment
return ( return (
<nav className={cn(s.root, className)}> <nav className={cn(s.root, className)}>
@ -66,39 +68,18 @@ const UserNav: React.FC<{
)} )}
{process.env.COMMERCE_CUSTOMERAUTH_ENABLED && ( {process.env.COMMERCE_CUSTOMERAUTH_ENABLED && (
<li className={s.item}> <li className={s.item}>
{isCustomerLoggedIn ? ( <Dropdown>
<Dropdown> <DropdownTrigger asChild>
<div className={s.dropdownDesktop}> <button
<div className={s.dropdownCustomerMenu}> aria-label="Menu"
<DropdownTrigger asChild> className={s.avatarButton}
<button className="inline-flex justify-center rounded-full"> onClick={() => (isCustomerLoggedIn ? null : openModal())}
<Avatar /> >
</button> <Avatar />
</DropdownTrigger> </button>
<CustomerMenuContent /> </DropdownTrigger>
</div> <CustomerMenuContent />
</div> </Dropdown>
<div className={s.dropdownMobile}>
<button
className="inline-flex justify-center rounded-full"
onClick={() => {
openSidebar()
setSidebarView('MOBILE_CUSTOMERMENU_VIEW')
}}
>
<Avatar />
</button>
</div>
</Dropdown>
) : (
<button
className={s.avatarButton}
aria-label="Menu"
onClick={() => openModal()}
>
<Avatar />
</button>
)}
</li> </li>
)} )}
<li className={s.mobileMenu}> <li className={s.mobileMenu}>

View File

@ -1,4 +1,3 @@
export { default } from './UserNav' export { default } from './UserNav'
export { default as MenuSidebarView } from './MenuSidebarView' export { default as MenuSidebarView } from './MenuSidebarView'
export { default as AuthMenuSidebarView } from './AuthMenuSidebarView'
export { default as CustomerMenuContent } from './CustomerMenuContent' export { default as CustomerMenuContent } from './CustomerMenuContent'

View File

@ -5,9 +5,9 @@
min-width: 100%; min-width: 100%;
} }
@media screen(md) { @media screen(lg) {
.root { .root {
@apply shadow-lg bg-accent-0; @apply bg-accent-0;
box-shadow: hsl(206 22% 7% / 45%) 0px 10px 38px -10px, box-shadow: hsl(206 22% 7% / 45%) 0px 10px 38px -10px,
hsl(206 22% 7% / 20%) 0px 10px 20px -15px; hsl(206 22% 7% / 20%) 0px 10px 20px -15px;
min-width: 14rem; min-width: 14rem;

View File

@ -13,4 +13,5 @@ export { default as Input } from './Input'
export { default as Collapse } from './Collapse' export { default as Collapse } from './Collapse'
export { default as Quantity } from './Quantity' export { default as Quantity } from './Quantity'
export { default as Rating } from './Rating' export { default as Rating } from './Rating'
export * from './Dropdown/Dropdown'
export { useUI } from './context' export { useUI } from './context'