import { Fragment, ReactNode, useEffect, useMemo, useState } from 'react' import { ArrowPathIcon } from '@heroicons/react/20/solid' import mangoStore from '@store/mangoStore' import TopBar from './TopBar' import useLocalStorageState from '../hooks/useLocalStorageState' import { ACCEPT_TERMS_KEY, SECONDS, YIELD_FANS_INTRO_KEY, } from '../utils/constants' import useInterval from './shared/useInterval' import { Transition } from '@headlessui/react' import { useTranslation } from 'next-i18next' import TermsOfUseModal from './modals/TermsOfUseModal' import SunburstBackground from './SunburstBackground' import Footer from './Footer' import useIpAddress from 'hooks/useIpAddress' import RestrictedCountryModal from './shared/RestrictedCountryModal' import { useRouter } from 'next/router' import Modal from './shared/Modal' import Button from './shared/Button' import Image from 'next/image' export const NON_RESTRICTED_JURISDICTION_KEY = 'non-restricted-jurisdiction-0.1' export const sideBarAnimationDuration = 300 const termsLastUpdated = 1679441610978 const Layout = ({ children }: { children: ReactNode }) => { const { ipCountry, loadingIpCountry } = useIpAddress() const themeData = mangoStore((s) => s.themeData) const [mounted, setMounted] = useState(false) useEffect(() => setMounted(true), []) if (!mounted) return null return (
{/*
*/}
{children}
) } export default Layout const TermsOfUse = () => { const { asPath } = useRouter() const [acceptTerms, setAcceptTerms] = useLocalStorageState( ACCEPT_TERMS_KEY, '', ) const [yieldFansIntro] = useLocalStorageState(YIELD_FANS_INTRO_KEY, false) const showTermsOfUse = useMemo(() => { return ( (!acceptTerms || acceptTerms < termsLastUpdated) && asPath !== '/risks' && yieldFansIntro ) }, [acceptTerms, asPath, yieldFansIntro]) const handleClose = () => { setAcceptTerms(Date.now()) } return ( <> {showTermsOfUse ? ( ) : null} ) } const YieldFansIntro = () => { const [yieldFansIntro, setYieldFansIntro] = useLocalStorageState( YIELD_FANS_INTRO_KEY, false, ) return !yieldFansIntro ? ( setYieldFansIntro(true)}>
Logo

New name. Same APYs.

Are you a fan of epic yields? Boost! is now yield.fan

) : null } function DeployRefreshManager(): JSX.Element | null { const { t } = useTranslation('common') const [newBuildAvailable, setNewBuildAvailable] = useState(false) useInterval(async () => { const response = await fetch('/api/build-id') const { buildId } = await response.json() if (buildId && process.env.BUILD_ID && buildId !== process.env.BUILD_ID) { // There's a new version deployed that we need to load setNewBuildAvailable(true) } }, 300 * SECONDS) return ( ) } const RestrictedCountryCheck = ({ ipCountry, loadingIpCountry, }: { ipCountry: string loadingIpCountry: boolean }) => { const groupLoaded = mangoStore((s) => s.groupLoaded) const [confirmedCountry, setConfirmedCountry] = useLocalStorageState( NON_RESTRICTED_JURISDICTION_KEY, false, ) const showModal = useMemo(() => { return !confirmedCountry && !ipCountry && !loadingIpCountry && groupLoaded }, [confirmedCountry, ipCountry, loadingIpCountry, groupLoaded]) return showModal ? ( { setConfirmedCountry(true) }} /> ) : null }