import React, { useEffect, useMemo } from 'react'; import { Box, useColorMode, Flex } from '@chakra-ui/react'; import Navbar from './navbar'; import NavbarPhone from './navbarPhone'; import { useRouter } from 'next/router'; import { useScreen } from '@/hooks/useScreen'; import { useLoading } from '@/hooks/useLoading'; import Auth from './auth'; import { useGlobalStore } from '@/store/global'; const pcUnShowLayoutRoute: Record = { '/login': true }; const phoneUnShowLayoutRoute: Record = { '/login': true }; const Layout = ({ children, isPcDevice }: { children: JSX.Element; isPcDevice: boolean }) => { const { isPc } = useScreen({ defaultIsPc: isPcDevice }); const router = useRouter(); const { colorMode, setColorMode } = useColorMode(); const { Loading } = useLoading({ defaultLoading: true }); const { loading } = useGlobalStore(); const isChatPage = useMemo( () => router.pathname === '/chat' && Object.values(router.query).join('').length !== 0, [router.pathname, router.query] ); useEffect(() => { if (colorMode === 'dark' && router.pathname !== '/chat') { setColorMode('light'); } }, [colorMode, router.pathname, setColorMode]); return ( <> {isPc ? ( pcUnShowLayoutRoute[router.pathname] ? ( {children} ) : ( <> {children} ) ) : phoneUnShowLayoutRoute[router.pathname] || isChatPage ? ( {children} ) : ( {children} )} {loading && } ); }; export default Layout; Layout.getInitialProps = ({ req }: any) => { return { isPcDevice: !/Mobile/.test(req ? req.headers['user-agent'] : navigator.userAgent) }; };