import DiagramModal from '@/pageComponents/chat/ChatSetting/DiagramModal'; import { type PropsWithChildren, useCallback, useMemo, useState } from 'react'; import { ChatSettingTabOptionEnum, ChatSidebarPaneEnum } from '@/pageComponents/chat/constants'; import dynamic from 'next/dynamic'; import SettingTabs from '@/pageComponents/chat/ChatSetting/SettingTabs'; import { useSystem } from '@fastgpt/web/hooks/useSystem'; import { Box, Flex, type FlexProps } from '@chakra-ui/react'; import { useContextSelector } from 'use-context-selector'; import MyIcon from '@fastgpt/web/components/common/Icon'; import { ChatContext } from '@/web/core/chat/context/chatContext'; import NextHead from '@/components/common/NextHead'; import { ChatPageContext } from '@/web/core/chat/context/chatPageContext'; import ChatSliderMobileDrawer from '@/pageComponents/chat/slider/ChatSliderMobileDrawer'; import { useTranslation } from 'react-i18next'; import { useMount } from 'ahooks'; import { useSystemStore } from '@/web/common/system/useSystemStore'; import { useRouter } from 'next/router'; import { useUserStore } from '@/web/support/user/useUserStore'; import { getWebReqUrl } from '@fastgpt/web/common/system/utils'; const HomepageSetting = dynamic(() => import('@/pageComponents/chat/ChatSetting/HomepageSetting')); const LogDetails = dynamic(() => import('@/pageComponents/chat/ChatSetting/LogDetails')); const DataDashboard = dynamic(() => import('@/pageComponents/chat/ChatSetting/DataDashboard')); const FavouriteAppSetting = dynamic( () => import('@/pageComponents/chat/ChatSetting/FavouriteAppSetting') ); const ChatSetting = () => { const router = useRouter(); const { isPc } = useSystem(); const { t } = useTranslation(); const { feConfigs } = useSystemStore(); const { userInfo } = useUserStore(); const { tab: tabQuery } = router.query as { tab: ChatSettingTabOptionEnum }; const [isOpenDiagram, setIsOpenDiagram] = useState(false); const tab = useMemo( () => Object.values(ChatSettingTabOptionEnum).includes(tabQuery) ? tabQuery : ChatSettingTabOptionEnum.HOME, [tabQuery] ); const onOpenSlider = useContextSelector(ChatContext, (v) => v.onOpenSlider); const chatSettings = useContextSelector(ChatPageContext, (v) => v.chatSettings); const handlePaneChange = useContextSelector(ChatPageContext, (v) => v.handlePaneChange); const handleTabChange = useCallback( (tab: ChatSettingTabOptionEnum) => { handlePaneChange(ChatSidebarPaneEnum.SETTING, undefined, tab); }, [handlePaneChange] ); const SettingHeader = useCallback( ({ children }: PropsWithChildren) => ( {children} ), [tab, handleTabChange] ); useMount(() => { if (!feConfigs?.isPlus || !userInfo?.team.permission.hasManagePer) { handlePaneChange(ChatSidebarPaneEnum.TEAM_APPS); } }); return ( <> {!isPc && ( <> )} {chatSettings && ( {/* homepage setting */} {tab === ChatSettingTabOptionEnum.HOME && ( )} {/* data dashboard */} {tab === ChatSettingTabOptionEnum.DATA_DASHBOARD && ( )} {/* log details */} {tab === ChatSettingTabOptionEnum.LOG_DETAILS && } {/* home chat logs */} {tab === ChatSettingTabOptionEnum.FAVOURITE_APPS && ( )} )} ); }; export default ChatSetting;