import { Fragment, forwardRef, useMemo } from 'react'; import { motion } from 'framer-motion'; import PropTypes from 'prop-types'; import { HAIRLINE_DIVIDER_CLASSES, MENU_BUTTON_CLASSES } from './ProfileMenuTheme'; import { app as $appContent } from '../../content'; import { clsm } from '../../utils'; import { createAnimationProps } from '../../helpers/animationPropsHelper'; import { Logout } from '../../assets/icons'; import { useUser } from '../../contexts/User'; import Button from '../Button'; import UserAvatar from '../UserAvatar'; import withPortal from '../withPortal'; const $content = $appContent.navbar; const Popup = forwardRef( ({ navData, toggleProfileMenu, menuClassName }, ref) => { const { userData, logOut } = useUser(); const { avatarSrc, color: profileColor, username } = userData || {}; const hasAvatar = !!avatarSrc; const commonMenuButtonProps = useMemo( () => ({ variant: 'tertiaryText', className: clsm(MENU_BUTTON_CLASSES), onClick: () => toggleProfileMenu(false) }), [toggleProfileMenu] ); return (
{/* CUSTOM NAVIGATION BUTTONS */} {navData.map(({ icon, label, to, hasDivider, pageName }) => ( {hasDivider && ( )} ))} {/* LOGOUT BUTTON */}
); } ); const PortalPopup = withPortal(Popup, 'profile-menu-popup', { baseContainerClasses: clsm(['absolute', 'z-[1000]']) }); const MenuPopup = forwardRef(({ asPortal, isOpen, ...restProps }, ref) => asPortal ? ( ) : ( isOpen && ) ); MenuPopup.defaultProps = { asPortal: false, isOpen: false }; MenuPopup.propTypes = { asPortal: PropTypes.bool, isOpen: PropTypes.bool }; Popup.defaultProps = { isOpen: false, menuClassName: '', navData: [] }; Popup.propTypes = { isOpen: PropTypes.bool, navData: PropTypes.array, menuClassName: PropTypes.string, toggleProfileMenu: PropTypes.func.isRequired }; export default MenuPopup;