import { FC, useEffect } from 'react'; import { Navigate, Route, Routes, useLocation } from 'react-router-dom'; import { faBars as burgerIcon } from '@fortawesome/free-solid-svg-icons'; import { FontAwesomeIcon } from '@fortawesome/react-fontawesome'; import classNames from 'classnames'; import { withSelectedServer } from '../servers/helpers/withSelectedServer'; import { useSwipeable, useToggle } from '../utils/helpers/hooks'; import { supportsDomainRedirects, supportsDomainVisits, supportsNonOrphanVisits } from '../utils/helpers/features'; import { isReachableServer } from '../servers/data'; import { NotFound } from './NotFound'; import { AsideMenuProps } from './AsideMenu'; import './MenuLayout.scss'; interface MenuLayoutProps { sidebarPresent: Function; sidebarNotPresent: Function; } export const MenuLayout = ( TagsList: FC, ShortUrlsList: FC, AsideMenu: FC, CreateShortUrl: FC, ShortUrlVisits: FC, TagVisits: FC, DomainVisits: FC, OrphanVisits: FC, NonOrphanVisits: FC, ServerError: FC, Overview: FC, EditShortUrl: FC, ManageDomains: FC, ) => withSelectedServer(({ selectedServer, sidebarNotPresent, sidebarPresent }) => { const location = useLocation(); const [sidebarVisible, toggleSidebar, showSidebar, hideSidebar] = useToggle(); const showContent = isReachableServer(selectedServer); useEffect(() => hideSidebar(), [location]); useEffect(() => { showContent && sidebarPresent(); return () => sidebarNotPresent(); }, []); if (!showContent) { return ; } const addNonOrphanVisitsRoute = supportsNonOrphanVisits(selectedServer); const addManageDomainsRoute = supportsDomainRedirects(selectedServer); const addDomainVisitsRoute = supportsDomainVisits(selectedServer); const burgerClasses = classNames('menu-layout__burger-icon', { 'menu-layout__burger-icon--active': sidebarVisible }); const swipeableProps = useSwipeable(showSidebar, hideSidebar); return ( <>
hideSidebar()}>
} /> } /> } /> } /> } /> } /> } /> {addDomainVisitsRoute && } />} } /> {addNonOrphanVisitsRoute && } />} } /> {addManageDomainsRoute && } />} List short URLs} />
); }, ServerError);