import cx from 'classnames';
import { useRef, useState } from 'react';
import { NavLink } from 'react-router-dom';
import { useActiveMenuItem } from 'src/hooks/useActiveMenuItem';
import useOnClickOutside from 'src/hooks/useOnClickOutside';
import getMenuItems from 'src/utils/appsMenu/appsMenu';
import styles from './MobileMenu.module.scss';
function MobileMenu() {
const [isOpen, setIsOpen] = useState(false);
const menuRef = useRef<HTMLDivElement>(null);
const toggleMenu = () => setIsOpen(!isOpen);
const menuItems = getMenuItems();
const { isActiveItem, activeItem } = useActiveMenuItem(menuItems);
const displayItem = activeItem || menuItems[0];
useOnClickOutside(menuRef, () => setIsOpen(false));
return (
<div ref={menuRef} className={cx(styles.mobileMenu, { [styles.open]: isOpen })}>
<div className={cx(styles.menuContent, { [styles.visible]: isOpen })}>
<button
type="button"
className={cx(styles.menuButton, { [styles.active]: isOpen })}
onClick={toggleMenu}
>
<img
src={displayItem.icon}
className={cx(styles.icon, { [styles.portalGlow]: displayItem.name === 'Portal' })}
alt={`${displayItem.name} menu active icon`}
/>
</button>
{getMenuItems().map((item, index) => {
const isExternal = item.to.startsWith('http');
return (
!isActiveItem(item) && (
<NavLink
key={index}
to={item.to}
className={styles.menuItem}
onClick={toggleMenu}
{...(isExternal && {
target: '_blank',
rel: 'noreferrer noopener',
})}
>
<img src={item.icon} className={cx(styles.icon, { [styles.portalGlow]: item.name === 'Portal' })} alt={`${item.name} menu icon`} />
{isExternal && <span className={styles.external} />}
</NavLink>
)
);
})}
</div>
</div>
);
}
export default MobileMenu;