import React, { useEffect, useMemo } from 'react'; import { Box, useColorMode, Flex } from '@chakra-ui/react'; import { useRouter } from 'next/router'; import { useLoading } from '@fastgpt/web/hooks/useLoading'; import { useSystemStore } from '@/web/common/system/useSystemStore'; import { throttle } from 'lodash'; import { useQuery } from '@tanstack/react-query'; import { useUserStore } from '@/web/support/user/useUserStore'; import { getUnreadCount } from '@/web/support/user/inform/api'; import dynamic from 'next/dynamic'; import Auth from './auth'; import Navbar from './navbar'; import NavbarPhone from './navbarPhone'; const UpdateInviteModal = dynamic( () => import('@/components/support/user/team/UpdateInviteModal'), { ssr: false } ); const pcUnShowLayoutRoute: Record = { '/': true, '/login': true, '/login/provider': true, '/login/fastlogin': true, '/chat/share': true, '/chat/team': true, '/app/edit': true, '/chat': true, '/tools/price': true, '/price': true }; const phoneUnShowLayoutRoute: Record = { '/': true, '/login': true, '/login/provider': true, '/login/fastlogin': true, '/chat/share': true, '/chat/team': true, '/tools/price': true, '/price': true }; const Layout = ({ children }: { children: JSX.Element }) => { const router = useRouter(); const { colorMode, setColorMode } = useColorMode(); const { Loading } = useLoading(); const { loading, setScreenWidth, isPc, feConfigs } = useSystemStore(); 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); window.addEventListener('resize', resize); resize(); return () => { window.removeEventListener('resize', resize); }; }, [setScreenWidth]); const { data: unread = 0 } = useQuery(['getUnreadCount'], getUnreadCount, { enabled: !!userInfo && !!feConfigs.isPlus, refetchInterval: 10000 }); const isHideNavbar = !!pcUnShowLayoutRoute[router.pathname]; return ( <> {isPc === true && ( <> {isHideNavbar ? ( {children} ) : ( <> {children} )} )} {isPc === false && ( <> {phoneUnShowLayoutRoute[router.pathname] || isChatPage ? ( {children} ) : ( {children} )} )} {!!userInfo && } ); }; export default Layout;