import React, { useEffect, useMemo } from 'react'; import { Box, useColorMode, Flex } from '@chakra-ui/react'; import { useRouter } from 'next/router'; import { useLoading } from '@/hooks/useLoading'; import { useGlobalStore } from '@/store/global'; import { throttle } from 'lodash'; import Auth from './auth'; import Navbar from './navbar'; import NavbarPhone from './navbarPhone'; import { useQuery } from '@tanstack/react-query'; import { useUserStore } from '@/store/user'; import { getUnreadCount } from '@/api/user'; const pcUnShowLayoutRoute: Record = { '/': true, '/login': true, '/chat/share': true, '/app/edit': true, '/chat': true }; const phoneUnShowLayoutRoute: Record = { '/': true, '/login': true, '/chat/share': true }; const Layout = ({ children }: { children: JSX.Element }) => { const router = useRouter(); const { colorMode, setColorMode } = useColorMode(); const { Loading } = useLoading(); const { loading, setScreenWidth, isPc } = useGlobalStore(); const { userInfo } = useUserStore(); 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]); useEffect(() => { const resize = throttle(() => { setScreenWidth(document.documentElement.clientWidth); }, 300); resize(); window.addEventListener('resize', resize); return () => { window.removeEventListener('resize', resize); }; }, []); const { data: unread = 0 } = useQuery(['getUnreadCount'], getUnreadCount, { enabled: !!userInfo, refetchInterval: 10000 }); return ( <> {isPc === true && ( <> {pcUnShowLayoutRoute[router.pathname] ? ( {children} ) : ( <> {children} )} )} {isPc === false && ( <> {phoneUnShowLayoutRoute[router.pathname] || isChatPage ? ( {children} ) : ( {children} )} )} ); }; export default Layout;