mirror of
https://github.com/vercel/commerce.git
synced 2025-05-18 07:26:59 +00:00
New Updates.
This commit is contained in:
parent
b140fef036
commit
d30fe2367a
@ -1,12 +1,11 @@
|
|||||||
import cn from 'clsx'
|
import cn from 'clsx'
|
||||||
import React from 'react'
|
import s from './Layout.module.css'
|
||||||
import dynamic from 'next/dynamic'
|
import dynamic from 'next/dynamic'
|
||||||
import { useRouter } from 'next/router'
|
import { useRouter } from 'next/router'
|
||||||
import { CommerceProvider } from '@framework'
|
import { CommerceProvider } from '@framework'
|
||||||
|
import LoginView from '@components/auth/LoginView'
|
||||||
import { useUI } from '@components/ui/context'
|
import { useUI } from '@components/ui/context'
|
||||||
import type { Page } from '@commerce/types/page'
|
|
||||||
import { Navbar, Footer } from '@components/common'
|
import { Navbar, Footer } from '@components/common'
|
||||||
import type { Category } from '@commerce/types/site'
|
|
||||||
import ShippingView from '@components/checkout/ShippingView'
|
import ShippingView from '@components/checkout/ShippingView'
|
||||||
import CartSidebarView from '@components/cart/CartSidebarView'
|
import CartSidebarView from '@components/cart/CartSidebarView'
|
||||||
import { useAcceptCookies } from '@lib/hooks/useAcceptCookies'
|
import { useAcceptCookies } from '@lib/hooks/useAcceptCookies'
|
||||||
@ -14,13 +13,14 @@ 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 MenuSidebarView from '../UserNav/MenuSidebarView'
|
import {
|
||||||
|
AuthMenuSidebarView,
|
||||||
|
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'
|
import type { Link as LinkProps } from '../UserNav/MenuSidebarView'
|
||||||
|
|
||||||
import LoginView from '@components/auth/LoginView'
|
|
||||||
import s from './Layout.module.css'
|
|
||||||
|
|
||||||
const Loading = () => (
|
const Loading = () => (
|
||||||
<div className="w-80 h-80 flex items-center text-center justify-center p-3">
|
<div className="w-80 h-80 flex items-center text-center justify-center p-3">
|
||||||
<LoadingDots />
|
<LoadingDots />
|
||||||
@ -89,7 +89,7 @@ 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' && <MenuSidebarView />}
|
{sidebarView === 'MOBILE_CUSTOMERMENU_VIEW' && <AuthMenuSidebarView />}
|
||||||
{sidebarView === 'MOBILE_MENU_VIEW' && <MenuSidebarView links={links} />}
|
{sidebarView === 'MOBILE_MENU_VIEW' && <MenuSidebarView links={links} />}
|
||||||
</Sidebar>
|
</Sidebar>
|
||||||
)
|
)
|
||||||
|
@ -0,0 +1,3 @@
|
|||||||
|
.root {
|
||||||
|
min-height: 100vh;
|
||||||
|
}
|
@ -0,0 +1,11 @@
|
|||||||
|
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>
|
||||||
|
)
|
||||||
|
}
|
@ -0,0 +1 @@
|
|||||||
|
export { default } from './AuthMenuSidebarView'
|
@ -1,12 +1,13 @@
|
|||||||
import s from './DropdownCustomerAuth.module.css'
|
|
||||||
import cn from 'clsx'
|
import cn from 'clsx'
|
||||||
import Link from 'next/link'
|
|
||||||
import { useTheme } from 'next-themes'
|
import { useTheme } from 'next-themes'
|
||||||
import { Moon, Sun } from '@components/icons'
|
|
||||||
import useLogout from '@framework/auth/use-logout'
|
|
||||||
import { useRouter } from 'next/router'
|
import { useRouter } from 'next/router'
|
||||||
|
import { Moon, Sun } from '@components/icons'
|
||||||
import { DropdownMenuItem } from '@components/ui/Dropdown/Dropdown'
|
import s from './CustomerMenuContent.module.css'
|
||||||
|
import useLogout from '@framework/auth/use-logout'
|
||||||
|
import {
|
||||||
|
DropdownMenuItem,
|
||||||
|
DropdownContent,
|
||||||
|
} from '@components/ui/Dropdown/Dropdown'
|
||||||
|
|
||||||
const LINKS = [
|
const LINKS = [
|
||||||
{
|
{
|
||||||
@ -24,20 +25,17 @@ const LINKS = [
|
|||||||
]
|
]
|
||||||
|
|
||||||
export default function CustomerMenuContent() {
|
export default function CustomerMenuContent() {
|
||||||
|
const router = useRouter()
|
||||||
const logout = useLogout()
|
const logout = useLogout()
|
||||||
const { pathname } = useRouter()
|
const { pathname } = useRouter()
|
||||||
const { theme, setTheme } = useTheme()
|
const { theme, setTheme } = useTheme()
|
||||||
const router = useRouter()
|
|
||||||
|
|
||||||
const handleClick = (
|
function handleClick(_: React.MouseEvent<HTMLAnchorElement>, href: string) {
|
||||||
e: React.MouseEvent<HTMLAnchorElement>,
|
|
||||||
href: string
|
|
||||||
) => {
|
|
||||||
router.push(href)
|
router.push(href)
|
||||||
}
|
}
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<div>
|
<DropdownContent id="CustomerMenuContent">
|
||||||
{LINKS.map(({ name, href }) => (
|
{LINKS.map(({ name, href }) => (
|
||||||
<DropdownMenuItem key={href}>
|
<DropdownMenuItem key={href}>
|
||||||
<a
|
<a
|
||||||
@ -77,6 +75,6 @@ export default function CustomerMenuContent() {
|
|||||||
Logout
|
Logout
|
||||||
</a>
|
</a>
|
||||||
</DropdownMenuItem>
|
</DropdownMenuItem>
|
||||||
</div>
|
</DropdownContent>
|
||||||
)
|
)
|
||||||
}
|
}
|
@ -0,0 +1 @@
|
|||||||
|
export { default } from './CustomerMenuContent'
|
@ -44,3 +44,16 @@
|
|||||||
.mobileMenu:focus {
|
.mobileMenu:focus {
|
||||||
@apply outline-none;
|
@apply outline-none;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.dropdownDesktop {
|
||||||
|
@apply hidden -z-10;
|
||||||
|
}
|
||||||
|
|
||||||
|
@media screen(lg) {
|
||||||
|
.dropdownDesktop {
|
||||||
|
@apply block;
|
||||||
|
}
|
||||||
|
.dropdownMobile {
|
||||||
|
@apply hidden;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
@ -2,8 +2,10 @@ 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 useCart from '@framework/cart/use-cart'
|
||||||
import DropdownCustomerAuth from './DropdownCustomerAuth'
|
import CustomerMenuContent from './CustomerMenuContent'
|
||||||
import Button from '@components/ui/Button'
|
import Button from '@components/ui/Button'
|
||||||
|
import { useUI } from '@components/ui/context'
|
||||||
|
import { Avatar } from '@components/common'
|
||||||
import { Heart, Bag, Menu } from '@components/icons'
|
import { Heart, Bag, Menu } from '@components/icons'
|
||||||
import useCustomer from '@framework/customer/use-customer'
|
import useCustomer from '@framework/customer/use-customer'
|
||||||
import {
|
import {
|
||||||
@ -13,9 +15,6 @@ import {
|
|||||||
DropdownMenuItem,
|
DropdownMenuItem,
|
||||||
} from '@components/ui/Dropdown/Dropdown'
|
} from '@components/ui/Dropdown/Dropdown'
|
||||||
|
|
||||||
import { useUI } from '@components/ui/context'
|
|
||||||
import { Avatar } from '@components/common'
|
|
||||||
|
|
||||||
import type { LineItem } from '@commerce/types/cart'
|
import type { LineItem } from '@commerce/types/cart'
|
||||||
|
|
||||||
const countItem = (count: number, item: LineItem) => count + item.quantity
|
const countItem = (count: number, item: LineItem) => count + item.quantity
|
||||||
@ -25,8 +24,14 @@ const UserNav: React.FC<{
|
|||||||
}> = ({ className }) => {
|
}> = ({ className }) => {
|
||||||
const { data } = useCart()
|
const { data } = useCart()
|
||||||
const { data: isCustomerLoggedIn } = useCustomer()
|
const { data: isCustomerLoggedIn } = useCustomer()
|
||||||
const { toggleSidebar, closeSidebarIfPresent, openModal, setSidebarView } =
|
const {
|
||||||
useUI()
|
toggleSidebar,
|
||||||
|
closeSidebarIfPresent,
|
||||||
|
openModal,
|
||||||
|
setSidebarView,
|
||||||
|
openSidebar,
|
||||||
|
} = useUI()
|
||||||
|
|
||||||
const itemsCount = data?.lineItems.reduce(countItem, 0) ?? 0
|
const itemsCount = data?.lineItems.reduce(countItem, 0) ?? 0
|
||||||
|
|
||||||
return (
|
return (
|
||||||
@ -62,21 +67,29 @@ const UserNav: React.FC<{
|
|||||||
{process.env.COMMERCE_CUSTOMERAUTH_ENABLED && (
|
{process.env.COMMERCE_CUSTOMERAUTH_ENABLED && (
|
||||||
<li className={s.item}>
|
<li className={s.item}>
|
||||||
{isCustomerLoggedIn ? (
|
{isCustomerLoggedIn ? (
|
||||||
<div className={s.root}>
|
<Dropdown>
|
||||||
<Dropdown>
|
<div className={s.dropdownDesktop}>
|
||||||
<DropdownTrigger asChild>
|
<div className={s.dropdownCustomerMenu}>
|
||||||
<button className="inline-flex justify-center rounded-full">
|
<DropdownTrigger asChild>
|
||||||
<Avatar />
|
<button className="inline-flex justify-center rounded-full">
|
||||||
</button>
|
<Avatar />
|
||||||
</DropdownTrigger>
|
</button>
|
||||||
<DropdownContent
|
</DropdownTrigger>
|
||||||
className={s.dropdownContent}
|
<CustomerMenuContent />
|
||||||
id="DropdownCustomerAuth"
|
</div>
|
||||||
|
</div>
|
||||||
|
<div className={s.dropdownMobile}>
|
||||||
|
<button
|
||||||
|
className="inline-flex justify-center rounded-full"
|
||||||
|
onClick={() => {
|
||||||
|
openSidebar()
|
||||||
|
setSidebarView('MOBILE_CUSTOMERMENU_VIEW')
|
||||||
|
}}
|
||||||
>
|
>
|
||||||
<DropdownCustomerAuth />
|
<Avatar />
|
||||||
</DropdownContent>
|
</button>
|
||||||
</Dropdown>
|
</div>
|
||||||
</div>
|
</Dropdown>
|
||||||
) : (
|
) : (
|
||||||
<button
|
<button
|
||||||
className={s.avatarButton}
|
className={s.avatarButton}
|
||||||
@ -94,8 +107,8 @@ const UserNav: React.FC<{
|
|||||||
aria-label="Menu"
|
aria-label="Menu"
|
||||||
variant="naked"
|
variant="naked"
|
||||||
onClick={() => {
|
onClick={() => {
|
||||||
|
openSidebar()
|
||||||
setSidebarView('MOBILE_MENU_VIEW')
|
setSidebarView('MOBILE_MENU_VIEW')
|
||||||
toggleSidebar()
|
|
||||||
}}
|
}}
|
||||||
>
|
>
|
||||||
<Menu />
|
<Menu />
|
||||||
|
@ -1 +1,4 @@
|
|||||||
export { default } from './UserNav'
|
export { default } from './UserNav'
|
||||||
|
export { default as MenuSidebarView } from './MenuSidebarView'
|
||||||
|
export { default as AuthMenuSidebarView } from './AuthMenuSidebarView'
|
||||||
|
export { default as CustomerMenuContent } from './CustomerMenuContent'
|
||||||
|
Loading…
x
Reference in New Issue
Block a user