import React, { useEffect, useState, useRef } from 'react'; import { UserMenu } from '../UserMenu'; import { IconApps } from '../Icon'; export interface IUniversalMenu { fullName: string; membership: string; profileImage: string; logoutUrl: string; className?: string; theme?: 'dark' | 'light'; isFeatureFlagCommunityIconOn?: boolean; isFeatureFlagBRNIconOn?: boolean; isFeatureFlagGroupsIconOn?: boolean; [x: string]: any; } export const UniversalMenu: React.FC = (props) => { const { fullName = "", membership = "", profileImage = "", logoutUrl, className, theme = "dark", isFeatureFlagCommunityIconOn = false, isFeatureFlagBRNIconOn = false, isFeatureFlagGroupsIconOn = false, ...otherProps } = props; // State: Menus const [menuVisible, setMenuVisible] = useState(false); // Refs const menuRef = useRef(null); // #region Functions const handleMenuToggle = (e: React.MouseEvent) => { e.preventDefault(); setMenuVisible(!menuVisible); }; function addClassNames(propClassName: string, propTheme: string) { let classList = 'b-universal-menu'; if (propClassName && propClassName.length) { classList = `${classList} ${propClassName}`; } if (propTheme) { classList = `${classList} b-universal-menu-${propTheme}`; } return classList; } function hasAccessToCommunityApp(): boolean { return (isFeatureFlagCommunityIconOn && (membership === 'RMCore' || membership === 'RMPro' || membership === 'One2One' || membership === 'Leadership')); } function hasAccessToBRNApp(): boolean { return (isFeatureFlagBRNIconOn && (membership === 'RMCore' || membership === 'RMPro' || membership === 'One2One' || membership === 'Leadership')); } function hasAccessToGroupsApp(): boolean { return (isFeatureFlagGroupsIconOn && (membership === 'RMPro' || membership === 'One2One' || membership === 'Leadership')); } // #endregion Functions // #region Effects useEffect(() => { const handleClickOutside = (e: Event) => { if (menuRef.current.contains(e.target)) { return; } else { setMenuVisible(false); } }; if (menuVisible) { document.addEventListener('click', handleClickOutside); } else { document.removeEventListener('click', handleClickOutside); } return () => { document.removeEventListener('click', handleClickOutside); }; }, [menuVisible, setMenuVisible]); // #endregion Effects return (
); };