import blockNames from '../blockNames' import classNames from 'classnames' import React, { useRef, useState } from 'react' import { Text, Repeater, types, Link, Plain } from 'react-bricks/frontend' import useOnClickOutside from './useClickOutside' export interface MenuItems { linkPath: string linkText: types.TextValue submenuItems?: types.RepeaterItems } interface HeaderMenuItemProps extends MenuItems { mobileRef: React.MutableRefObject setMobileMenuOpen: React.Dispatch> } const HeaderMenuItem: types.Brick = ({ linkPath, linkText, submenuItems, mobileRef, setMobileMenuOpen, }) => { const [open, setOpen] = useState(false) const ref = useRef(null) useOnClickOutside(ref, () => setOpen(false)) useOnClickOutside(mobileRef, () => setMobileMenuOpen(false)) if (!submenuItems || !submenuItems.length) { return (
{children}} />
setMobileMenuOpen(false)}> {' '} {typeof linkText === 'string' ? linkText : Plain.serialize(linkText)}
) } return (
{open && (
(
setOpen((current) => !current)} > {item}
)} />
)}
{typeof linkText === 'string' ? linkText : Plain.serialize(linkText)}
(
setMobileMenuOpen(false)}> {item}
)} />
) } HeaderMenuItem.schema = { name: blockNames.HeaderMenuItem, label: 'Menu Item', category: 'layout', hideFromAddMenu: true, playgroundLinkLabel: 'View source code on Github', playgroundLinkUrl: 'https://github.com/ReactBricks/reactbricks-starters/blob/main/packages/reactbricks-ui/nextjs-pages/src/layout/HeaderMenuItem.tsx', repeaterItems: [ { name: 'submenuItems', itemType: blockNames.HeaderMenuSubItem, }, ], getDefaultProps: () => ({ linkPath: '/about-us', linkText: 'About us', }), sideEditProps: [ { name: 'linkPath', label: 'Link to...', type: types.SideEditPropType.Text, }, ], } export default HeaderMenuItem