import SideNav from './SideNav' import { ReactNode, useEffect } from 'react' import { ChevronRightIcon } from '@heroicons/react/20/solid' import { useViewport } from '../hooks/useViewport' import { breakpoints } from '../utils/theme' import mangoStore from '@store/mangoStore' import BottomBar from './mobile/BottomBar' import BounceLoader from './shared/BounceLoader' import TopBar from './TopBar' import useLocalStorageState from '../hooks/useLocalStorageState' import { IS_ONBOARDED_KEY, ONBOARDING_TOUR_KEY, SIDEBAR_COLLAPSE_KEY, } from '../utils/constants' import OnboardingTour from './OnboardingTour' const sideBarAnimationDuration = 500 const Layout = ({ children }: { children: ReactNode }) => { const connected = mangoStore((s) => s.connected) const loadingMangoAccount = mangoStore((s) => s.mangoAccount.initialLoad) const [isCollapsed, setIsCollapsed] = useLocalStorageState( SIDEBAR_COLLAPSE_KEY, false ) const [showOnboardingTour] = useLocalStorageState(ONBOARDING_TOUR_KEY, false) const [isOnboarded] = useLocalStorageState(IS_ONBOARDED_KEY) const { width } = useViewport() useEffect(() => { if (width < breakpoints.lg) { setIsCollapsed(true) } }, [width]) useEffect(() => { const animationFrames = 5 for (let x = 1; x <= animationFrames; x++) { setTimeout(() => { window.dispatchEvent(new Event('resize')) }, (sideBarAnimationDuration / animationFrames) * x) } }, [isCollapsed]) const handleToggleSidebar = () => { setIsCollapsed(!isCollapsed) } return ( <> {connected && loadingMangoAccount ? (
) : null}
next
{children}
{showOnboardingTour && isOnboarded && connected ? ( ) : null} ) } export default Layout