@ubertheme/mega-menu
Version:
UB Mega Menu Module for Magento PWA Studio
138 lines (124 loc) • 4.23 kB
JavaScript
import React, { Suspense } from 'react';
import { shape, string } from 'prop-types';
import { mergeClasses } from '@magento/venia-ui/lib/classify';
import AuthBar from '@magento/venia-ui/lib/components/AuthBar';
import CurrencySwitcher from '@magento/venia-ui/lib/components/Header/currencySwitcher';
import StoreSwitcher from '@magento/venia-ui/lib/components/Header/storeSwitcher';
import LoadingIndicator from "@magento/venia-ui/lib/components/LoadingIndicator";
import { useNavigation } from '../../talons/Navigation/useNavigation';
import UBNavHeader from './navHeader';
import UBMegaMenu from '../../components/MegaMenu';
import defaultClasses from './navigation.module.css';
const AuthModal = React.lazy(() => import('@magento/venia-ui/lib/components/AuthModal'));
const UBNavigation = props => {
const {
parentMenuItemId,
setParentMenuItemId,
navTitle,
setNavTitle,
setBackMenuItem,
handleBack,
handleClose,
hasModal,
isOpen,
isTopLevel,
showCreateAccount,
showForgotPassword,
showMainMenu,
showMyAccount,
showSignIn,
view
} = useNavigation();
const classes = mergeClasses(defaultClasses, props.classes);
//const rootClassName = isOpen ? classes.root_open : classes.root;
let rootClassName = isOpen ? classes.root_open : classes.root;
const modalClassName = hasModal ? classes.modal_open : classes.modal;
const bodyClassName = hasModal ? classes.body_masked : classes.body;
const rootHeaderClassName =
isTopLevel && view === 'MENU' ? classes.isRoot : classes.header;
const isDarkMode = false;
if (isDarkMode){
rootClassName = `${rootClassName} ${classes.dark_style}`;
} else {
rootClassName = `${rootClassName}`;
}
// Lazy load the auth modal because it may not be needed.
const authModal = hasModal ? (
<div className={modalClassName}>
<Suspense fallback={<LoadingIndicator />}>
<AuthModal
closeDrawer={handleClose}
showCreateAccount={showCreateAccount}
showForgotPassword={showForgotPassword}
showMainMenu={showMainMenu}
showMyAccount={showMyAccount}
showSignIn={showSignIn}
view={view}
/>
</Suspense>
</div>
) : null;
const header = (
<header className={classes.header}>
<UBNavHeader
isTopLevel={isTopLevel}
onBack={handleBack}
onClose={handleClose}
view={view}
navTitle={navTitle}
/>
</header>
);
const menu =
view === 'MENU' ? (
<div className={bodyClassName}>
<UBMegaMenu
menuType="off-canvas"
menuKey={props.menuKey}
onNavigate={handleClose}
parentMenuItemId={parentMenuItemId}
setParentMenuItemId={setParentMenuItemId}
setBackMenuItem={setBackMenuItem}
setNavTitle={setNavTitle}
/>
</div>
) : null;
const footer = !parentMenuItemId ? (
<div className={classes.footer}>
<div className={classes.switchers}>
<StoreSwitcher />
<CurrencySwitcher />
</div>
<AuthBar
disabled={hasModal}
showMyAccount={showMyAccount}
showSignIn={showSignIn}
/>
</div>
) : null;
return (
<aside className={rootClassName}>
{header}
{menu}
{footer}
{authModal}
</aside>
);
};
export default UBNavigation;
UBNavigation.propTypes = {
classes: shape({
body: string,
form_closed: string,
form_open: string,
footer: string,
header: string,
root: string,
root_open: string,
menuKey: string,
dark_style: string,
signIn_closed: string,
signIn_open: string,
isRoot: string
})
};