mirror of
https://github.com/vercel/commerce.git
synced 2025-05-18 07:26:59 +00:00
Dropdown fix
This commit is contained in:
parent
d30fe2367a
commit
17e8d4c4da
@ -13,10 +13,7 @@ import { Sidebar, Button, LoadingDots } from '@components/ui'
|
||||
import PaymentMethodView from '@components/checkout/PaymentMethodView'
|
||||
import CheckoutSidebarView from '@components/checkout/CheckoutSidebarView'
|
||||
import { CheckoutProvider } from '@components/checkout/context'
|
||||
import {
|
||||
AuthMenuSidebarView,
|
||||
MenuSidebarView,
|
||||
} from '@components/common/UserNav'
|
||||
import { MenuSidebarView } from '@components/common/UserNav'
|
||||
import type { Page } from '@commerce/types/page'
|
||||
import type { Category } from '@commerce/types/site'
|
||||
import type { Link as LinkProps } from '../UserNav/MenuSidebarView'
|
||||
@ -89,7 +86,6 @@ const SidebarView: React.FC<{
|
||||
{sidebarView === 'CHECKOUT_VIEW' && <CheckoutSidebarView />}
|
||||
{sidebarView === 'PAYMENT_VIEW' && <PaymentMethodView />}
|
||||
{sidebarView === 'SHIPPING_VIEW' && <ShippingView />}
|
||||
{sidebarView === 'MOBILE_CUSTOMERMENU_VIEW' && <AuthMenuSidebarView />}
|
||||
{sidebarView === 'MOBILE_MENU_VIEW' && <MenuSidebarView links={links} />}
|
||||
</Sidebar>
|
||||
)
|
||||
|
@ -38,9 +38,8 @@ const SidebarLayout: FC<ComponentProps> = ({
|
||||
<span className="ml-2 text-accent-7 text-xs">Back</span>
|
||||
</button>
|
||||
)}
|
||||
<span className={s.nav}>
|
||||
<UserNav />
|
||||
</span>
|
||||
|
||||
<UserNav />
|
||||
</header>
|
||||
<div className={s.container}>{children}</div>
|
||||
</div>
|
||||
|
@ -1,3 +0,0 @@
|
||||
.root {
|
||||
min-height: 100vh;
|
||||
}
|
@ -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>
|
||||
)
|
||||
}
|
@ -1 +0,0 @@
|
||||
export { default } from './AuthMenuSidebarView'
|
@ -14,11 +14,22 @@
|
||||
}
|
||||
|
||||
.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 {
|
||||
display: block;
|
||||
@apply static;
|
||||
min-width: inherit;
|
||||
height: inherit;
|
||||
}
|
||||
}
|
||||
|
@ -1,12 +1,15 @@
|
||||
import cn from 'clsx'
|
||||
import { useTheme } from 'next-themes'
|
||||
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 useLogout from '@framework/auth/use-logout'
|
||||
import {
|
||||
Dropdown as DropdownRoot,
|
||||
DropdownMenuItem,
|
||||
DropdownContent,
|
||||
DropdownTrigger,
|
||||
} from '@components/ui/Dropdown/Dropdown'
|
||||
|
||||
const LINKS = [
|
||||
@ -24,6 +27,8 @@ const LINKS = [
|
||||
},
|
||||
]
|
||||
|
||||
export const Dropdown = <DropdownRoot />
|
||||
|
||||
export default function CustomerMenuContent() {
|
||||
const router = useRouter()
|
||||
const logout = useLogout()
|
||||
@ -35,14 +40,32 @@ export default function CustomerMenuContent() {
|
||||
}
|
||||
|
||||
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 }) => (
|
||||
<DropdownMenuItem key={href}>
|
||||
<a
|
||||
onClick={(e) => handleClick(e, href)}
|
||||
className={cn(s.link, {
|
||||
[s.active]: pathname === href,
|
||||
})}
|
||||
onClick={(e) => handleClick(e, href)}
|
||||
>
|
||||
{name}
|
||||
</a>
|
||||
@ -52,7 +75,7 @@ export default function CustomerMenuContent() {
|
||||
<a
|
||||
className={cn(s.link, 'justify-between')}
|
||||
onClick={() => {
|
||||
theme === 'dark' ? setTheme('light') : setTheme('dark')
|
||||
setTheme(theme === 'dark' ? 'light' : 'dark')
|
||||
}}
|
||||
>
|
||||
<div>
|
||||
|
@ -1 +1 @@
|
||||
export { default } from './CustomerMenuContent'
|
||||
export { default as CustomerMenuContent } from './CustomerMenuContent'
|
||||
|
@ -1,19 +1,18 @@
|
||||
import cn from 'clsx'
|
||||
import Link from 'next/link'
|
||||
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 useCart from '@framework/cart/use-cart'
|
||||
import { useUI } from '@components/ui/context'
|
||||
import { Heart, Bag, Menu } from '@components/icons'
|
||||
import { CustomerMenuContent, Dropwdown } from './CustomerMenuContent'
|
||||
import useCustomer from '@framework/customer/use-customer'
|
||||
import React from 'react'
|
||||
import {
|
||||
Dropdown,
|
||||
DropdownContent,
|
||||
DropdownTrigger,
|
||||
DropdownMenuItem,
|
||||
} from '@components/ui/Dropdown/Dropdown'
|
||||
DropdownTrigger as DropdownTriggerInst,
|
||||
Button,
|
||||
} from '@components/ui'
|
||||
|
||||
import type { LineItem } from '@commerce/types/cart'
|
||||
|
||||
@ -33,6 +32,9 @@ const UserNav: React.FC<{
|
||||
} = useUI()
|
||||
|
||||
const itemsCount = data?.lineItems.reduce(countItem, 0) ?? 0
|
||||
const DropdownTrigger = isCustomerLoggedIn
|
||||
? DropdownTriggerInst
|
||||
: React.Fragment
|
||||
|
||||
return (
|
||||
<nav className={cn(s.root, className)}>
|
||||
@ -66,39 +68,18 @@ const UserNav: React.FC<{
|
||||
)}
|
||||
{process.env.COMMERCE_CUSTOMERAUTH_ENABLED && (
|
||||
<li className={s.item}>
|
||||
{isCustomerLoggedIn ? (
|
||||
<Dropdown>
|
||||
<div className={s.dropdownDesktop}>
|
||||
<div className={s.dropdownCustomerMenu}>
|
||||
<DropdownTrigger asChild>
|
||||
<button className="inline-flex justify-center rounded-full">
|
||||
<Avatar />
|
||||
</button>
|
||||
</DropdownTrigger>
|
||||
<CustomerMenuContent />
|
||||
</div>
|
||||
</div>
|
||||
<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>
|
||||
)}
|
||||
<Dropdown>
|
||||
<DropdownTrigger asChild>
|
||||
<button
|
||||
aria-label="Menu"
|
||||
className={s.avatarButton}
|
||||
onClick={() => (isCustomerLoggedIn ? null : openModal())}
|
||||
>
|
||||
<Avatar />
|
||||
</button>
|
||||
</DropdownTrigger>
|
||||
<CustomerMenuContent />
|
||||
</Dropdown>
|
||||
</li>
|
||||
)}
|
||||
<li className={s.mobileMenu}>
|
||||
|
@ -1,4 +1,3 @@
|
||||
export { default } from './UserNav'
|
||||
export { default as MenuSidebarView } from './MenuSidebarView'
|
||||
export { default as AuthMenuSidebarView } from './AuthMenuSidebarView'
|
||||
export { default as CustomerMenuContent } from './CustomerMenuContent'
|
||||
|
@ -5,9 +5,9 @@
|
||||
min-width: 100%;
|
||||
}
|
||||
|
||||
@media screen(md) {
|
||||
@media screen(lg) {
|
||||
.root {
|
||||
@apply shadow-lg bg-accent-0;
|
||||
@apply bg-accent-0;
|
||||
box-shadow: hsl(206 22% 7% / 45%) 0px 10px 38px -10px,
|
||||
hsl(206 22% 7% / 20%) 0px 10px 20px -15px;
|
||||
min-width: 14rem;
|
||||
|
@ -13,4 +13,5 @@ export { default as Input } from './Input'
|
||||
export { default as Collapse } from './Collapse'
|
||||
export { default as Quantity } from './Quantity'
|
||||
export { default as Rating } from './Rating'
|
||||
export * from './Dropdown/Dropdown'
|
||||
export { useUI } from './context'
|
||||
|
Loading…
x
Reference in New Issue
Block a user