import React, { useEffect, useMemo } from 'react'; import { Box, 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 { useSystem } from '@fastgpt/web/hooks/useSystem'; const Navbar = dynamic(() => import('./navbar')); const NavbarPhone = dynamic(() => import('./navbarPhone')); const UpdateInviteModal = dynamic(() => import('@/components/support/user/team/UpdateInviteModal')); const NotSufficientModal = dynamic(() => import('@/components/support/wallet/NotSufficientModal')); const SystemMsgModal = dynamic(() => import('@/components/support/user/inform/SystemMsgModal')); const ImportantInform = dynamic(() => import('@/components/support/user/inform/ImportantInform')); 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 { Loading } = useLoading(); const { loading, feConfigs, isNotSufficientModal } = useSystemStore(); const { isPc } = useSystem(); const { userInfo } = useUserStore(); const isChatPage = useMemo( () => router.pathname === '/chat' && Object.values(router.query).join('').length !== 0, [router.pathname, router.query] ); const { data, refetch: refetchUnRead } = useQuery(['getUnreadCount'], getUnreadCount, { enabled: !!userInfo && !!feConfigs.isPlus, refetchInterval: 10000 }); const unread = data?.unReadCount || 0; const importantInforms = data?.importantInforms || []; const isHideNavbar = !!pcUnShowLayoutRoute[router.pathname]; return ( <> {isPc === true && ( <> {isHideNavbar ? ( {children} ) : ( <> {children} )} )} {isPc === false && ( <> {phoneUnShowLayoutRoute[router.pathname] || isChatPage ? ( {children} ) : ( {children} )} )} {feConfigs?.isPlus && ( <> {!!userInfo && } {isNotSufficientModal && } {!!userInfo && } {!!userInfo && importantInforms.length > 0 && ( )} )} ); }; export default Layout;