import React, { useCallback, useEffect, useRef } from 'react'; import { useRouter } from 'next/router'; import { Box, Flex, IconButton, useTheme } from '@chakra-ui/react'; import { useToast } from '@/web/common/hooks/useToast'; import { useForm } from 'react-hook-form'; import { useQuery } from '@tanstack/react-query'; import { DatasetItemType } from '@/types/core/dataset'; import { getErrText } from '@fastgpt/global/common/error/utils'; import { useSystemStore } from '@/web/common/system/useSystemStore'; import { type ComponentRef } from './components/Info'; import Tabs from '@/components/Tabs'; import dynamic from 'next/dynamic'; import MyIcon from '@/components/Icon'; import SideTabs from '@/components/SideTabs'; import PageContainer from '@/components/PageContainer'; import Avatar from '@/components/Avatar'; import Info from './components/Info'; import { serviceSideProps } from '@/web/common/utils/i18n'; import { useTranslation } from 'react-i18next'; import { getTrainingQueueLen, delDatasetEmptyFiles } from '@/web/core/dataset/api'; import MyTooltip from '@/components/MyTooltip'; import { QuestionOutlineIcon } from '@chakra-ui/icons'; import { feConfigs } from '@/web/common/system/staticData'; import Script from 'next/script'; import CollectionCard from './components/CollectionCard'; import { useDatasetStore } from '@/web/core/dataset/store/dataset'; const DataCard = dynamic(() => import('./components/DataCard'), { ssr: false }); const Test = dynamic(() => import('./components/Test'), { ssr: false }); export enum TabEnum { dataCard = 'dataCard', collectionCard = 'collectionCard', test = 'test', info = 'info' } const Detail = ({ datasetId, currentTab }: { datasetId: string; currentTab: `${TabEnum}` }) => { const InfoRef = useRef(null); const theme = useTheme(); const { t } = useTranslation(); const { toast } = useToast(); const router = useRouter(); const { isPc } = useSystemStore(); const { datasetDetail, loadDatasetDetail } = useDatasetStore(); const tabList = useRef([ { label: '数据集', id: TabEnum.collectionCard, icon: 'overviewLight' }, { label: '搜索测试', id: TabEnum.test, icon: 'kbTest' }, { label: '配置', id: TabEnum.info, icon: 'settingLight' } ]); const setCurrentTab = useCallback( (tab: `${TabEnum}`) => { router.replace({ query: { datasetId, currentTab: tab } }); }, [datasetId, router] ); const form = useForm({ defaultValues: datasetDetail }); useQuery([datasetId], () => loadDatasetDetail(datasetId), { onSuccess(res) { form.reset(res); InfoRef.current?.initInput(res.tags); }, onError(err: any) { router.replace(`/dataset/list`); toast({ title: getErrText(err, '获取知识库异常'), status: 'error' }); } }); const { data: trainingQueueLen = 0 } = useQuery(['getTrainingQueueLen'], getTrainingQueueLen, { refetchInterval: 10000 }); useEffect(() => { return () => { try { delDatasetEmptyFiles(datasetId); } catch (error) {} }; }, [datasetId]); return ( <> {isPc ? ( {datasetDetail.name} { setCurrentTab(e); }} /> {t('dataset.System Data Queue')} {trainingQueueLen} router.replace('/dataset/list')} > } bg={'white'} boxShadow={'1px 1px 9px rgba(0,0,0,0.15)'} h={'28px'} size={'sm'} borderRadius={'50%'} aria-label={''} /> 全部知识库 ) : ( ({ id: item.id, label: item.label }))} activeId={currentTab} onChange={(e: any) => setCurrentTab(e)} /> )} {!!datasetDetail._id && ( {currentTab === TabEnum.collectionCard && } {currentTab === TabEnum.dataCard && } {currentTab === TabEnum.test && } {currentTab === TabEnum.info && ( )} )} ); }; export async function getServerSideProps(context: any) { const currentTab = context?.query?.currentTab || TabEnum.collectionCard; const datasetId = context?.query?.datasetId; return { props: { currentTab, datasetId, ...(await serviceSideProps(context)) } }; } export default React.memo(Detail);