import React, { ReactNode, useEffect } from 'react' import { useState } from 'react' import jwt from 'jsonwebtoken'; import { mdiForwardburger, mdiBackburger, mdiMenu } from '@mdi/js' import menuAside from '../menuAside' import menuNavBar from '../menuNavBar' import BaseIcon from '../components/BaseIcon' import NavBar from '../components/NavBar' import NavBarItemPlain from '../components/NavBarItemPlain' import AsideMenu from '../components/AsideMenu' import FooterBar from '../components/FooterBar' import { useAppDispatch, useAppSelector } from '../stores/hooks' import Search from '../components/Search'; import { useRouter } from 'next/router' import {findMe, logoutUser} from "../stores/authSlice"; type Props = { children: ReactNode } export default function LayoutAuthenticated({ children, }: Props) { const dispatch = useAppDispatch() const router = useRouter() const { token, currentUser } = useAppSelector((state) => state.auth) const bgColor = useAppSelector((state) => state.style.bgLayoutColor); let localToken if (typeof window !== 'undefined') { // Perform localStorage action localToken = localStorage.getItem('token') } const isTokenValid = () => { const token = localStorage.getItem('token'); if (!token) return; const date = new Date().getTime() / 1000; const data = jwt.decode(token); if (!data) return; return date < data.exp; }; useEffect(() => { dispatch(findMe()); if (!isTokenValid()) { dispatch(logoutUser()); router.push('/login'); } }, [token, localToken]); const darkMode = useAppSelector((state) => state.style.darkMode) const [isAsideMobileExpanded, setIsAsideMobileExpanded] = useState(false) const [isAsideLgActive, setIsAsideLgActive] = useState(false) useEffect(() => { const handleRouteChangeStart = () => { setIsAsideMobileExpanded(false) setIsAsideLgActive(false) } router.events.on('routeChangeStart', handleRouteChangeStart) // If the component is unmounted, unsubscribe // from the event with the `off` method: return () => { router.events.off('routeChangeStart', handleRouteChangeStart) } }, [router.events, dispatch]) const layoutAsidePadding = 'xl:pl-60' return (