import React, { useState, useEffect } from 'react' import Link from 'next/link' import dynamic from 'next/dynamic' const Snowfall = dynamic(() => import('react-snowfall'), { ssr: false }) import tabs from '../data/tabs.json' import constants from '../constants.json' import BB from './b.js' const renderSnow = () => { const date = new Date() // if its december, and date is more than 5 return date.getMonth() === 11 && date.getDate() > 5 } export default function Layout(props) { let href = props.route const [sidebarOpen, setSidebarOpen] = useState(true) const [userId, setUserId] = useState(null) const [windowSize, setWindowSize] = useState([100, 200]) if (href === '/' || href === '') { href = 'index' } const closeSideBar = () => { if (typeof window !== 'undefined') { if (window.innerWidth < constants.mobileWindowWidth) { setSidebarOpen(false) } } } useEffect(() => { fetch(`${constants.apiUrl}infos`, { credentials: 'include', Accept: 'application/json', 'Content-Type': 'application/json', }) .then((resp) => { return resp.json() }) .then((data) => { setUserId(data.uid) }) }, []) useEffect(() => { closeSideBar() setWindowSize([window.innerWidth, window.innerHeight]) window.addEventListener('resize', () => { setWindowSize([window.innerWidth, window.innerHeight]) setSidebarOpen(window.innerWidth >= 700) }) }, []) const snowflakeCount = (windowSize[0] + windowSize[1]) / 26 return ( <div> {renderSnow() && ( <div style={{ pointerEvents: 'none', zIndex: 900, position: 'fixed', width: `${windowSize[0]}px`, height: `${windowSize[1]}px`, }} > <Snowfall snowflakeCount={snowflakeCount} /> </div> )} <div className="sidebar"> <div className="headercontainer"> <span onClick={() => { setSidebarOpen(!sidebarOpen) }} className="menuicon" > <div /> <div /> <div /> </span> <div className="sidebarheader">Frylabs</div> </div> {sidebarOpen ? ( <> <div id="sideBarLinks"> {Object.keys(tabs).map((key) => { const item = tabs[key] return ( <Link href={item.href} key={key}> <a onClick={closeSideBar} className={href.includes(key) ? 'active' : undefined} id={item.id || undefined} > {item.text} </a> </Link> ) })} <Link href={`/donate`}> <a className="donate" onClick={closeSideBar} target="_blank"> Donate </a> </Link> </div> <div className="userInfo">User #{userId}</div> </> ) : null} </div> <div className="content">{props.children}</div> <BB /> </div> ) }