New Updates.

This commit is contained in:
Bel Curcio 2022-03-15 12:17:29 +01:00
parent b140fef036
commit d30fe2367a
10 changed files with 86 additions and 43 deletions

View File

@ -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>
) )

View File

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

View File

@ -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>
)
}

View File

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

View File

@ -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>
) )
} }

View File

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

View File

@ -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;
}
}

View File

@ -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 />

View File

@ -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'