import cx from 'classnames';
import { useMemo, useState } from 'react';
import { Link, useLocation } from 'react-router-dom';
import SubMenu from 'src/components/appMenu/SubMenu/SubMenu';
import { CHAIN_ID } from 'src/constants/config';
import usePassportByAddress from 'src/features/passport/hooks/usePassportByAddress';
import { selectCurrentAddress } from 'src/redux/features/pocket';
import { useAppSelector } from 'src/redux/hooks';
import { routes } from 'src/routes';
import useMediaQuery from '../../../../hooks/useMediaQuery';
import { selectNetworkImg } from '../../../../utils/utils';
import styles from './CurrentApp.module.scss';
import AppSideBar from './ui/AppSideBar/AppSideBar';
import ChainInfo from './ui/ChainInfo/ChainInfo';
import { menuButtonId } from './utils/const';
import findSelectAppByUrl from './utils/findSelectAppByUrl';

function CurrentApp() {
  const mediaQuery = useMediaQuery('(min-width: 768px)');
  const location = useLocation();
  const address = useAppSelector(selectCurrentAddress);
  const { passport } = usePassportByAddress(address);
  const [openMenu, setOpenMenu] = useState(false);

  const getRoute = useMemo(() => {
    const { pathname } = location;

    return findSelectAppByUrl(pathname, passport, address);
  }, [location, address, passport]);

  const toggleMenu = (newState: boolean) => {
    setOpenMenu(newState);
  };

  const closeMenu = () => {
    toggleMenu(false);
  };

  const toggleMenuFc = useMemo(() => () => toggleMenu(!openMenu), [openMenu, toggleMenu]);

  return (
    <>
      <div className={styles.buttonWrapper}>
        <Link
          id={menuButtonId}
          to={getRoute[0]?.to || routes.oracle.path}
          className={styles.networkBtn}
          onClick={(e) => {
            if (!mediaQuery) {
              const hasSubItems = getRoute[0]?.subItems?.length > 0;
              if (hasSubItems) {
                e.preventDefault();
                toggleMenu(!openMenu);
              }
              // no subItems โ€” follow the link normally
            }
          }}
        >
          <img
            alt="cyb"
            src={getRoute[0]?.largeIcon || getRoute[0]?.icon || selectNetworkImg(CHAIN_ID)}
            className={cx(styles.networkBtnImg, { [styles.portalGlow]: getRoute[0]?.name === 'Portal' })}
          />
        </Link>
        {mediaQuery && <ChainInfo />}
      </div>

      {getRoute?.[0] && (
        <AppSideBar
          menuProps={{
            isOpen: mediaQuery || openMenu,
            toggleMenu: toggleMenuFc,
            closeMenu,
          }}
        >
          <SubMenu selectedApp={getRoute[0]} closeMenu={closeMenu} />
        </AppSideBar>
      )}
    </>
  );
}

export default CurrentApp;

Synonyms

pussy-landing/src/components/CurrentApp/CurrentApp.tsx

Neighbours