import { useFetchNextChunkList } from '@/hooks/use-chunk-request'; import { useMemo, useState } from 'react'; import { useTranslation } from 'react-i18next'; import DocumentPreview from './components/document-preview'; import { useFetchPipelineFileLogDetail, useFetchPipelineResult, useGetChunkHighlights, useGetPipelineResultSearchParams, useHandleChunkCardClick, useRerunDataflow, useSummaryInfo, useTimelineDataFlow, } from './hooks'; import DocumentHeader from './components/document-preview/document-header'; import { TimelineNode } from '@/components/originui/timeline'; import { PageHeader } from '@/components/page-header'; import Spotlight from '@/components/spotlight'; import { Breadcrumb, BreadcrumbItem, BreadcrumbLink, BreadcrumbList, BreadcrumbPage, BreadcrumbSeparator, } from '@/components/ui/breadcrumb'; import { Button } from '@/components/ui/button'; import { Modal } from '@/components/ui/modal/modal'; import { AgentCategory } from '@/constants/agent'; import { Images } from '@/constants/common'; import { useNavigatePage } from '@/hooks/logic-hooks/navigate-hooks'; import { useGetKnowledgeSearchParams } from '@/hooks/route-hook'; import { useGetDocumentUrl } from './components/document-preview/hooks'; import TimelineDataFlow from './components/time-line'; import { TimelineNodeType } from './constant'; import styles from './index.less'; import { IDslComponent, IPipelineFileLogDetail } from './interface'; import ParserContainer from './parser'; const Chunk = () => { const { isReadOnly, knowledgeId, agentId, agentTitle, documentExtension } = useGetPipelineResultSearchParams(); const isAgent = !!agentId; const { pipelineResult } = useFetchPipelineResult({ agentId }); const { data: { documentInfo }, } = useFetchNextChunkList(!isAgent); const { selectedChunk, handleChunkCardClick } = useHandleChunkCardClick(); const [activeStepId, setActiveStepId] = useState(2); const { data: dataset } = useFetchPipelineFileLogDetail({ isAgent, }); const { t } = useTranslation(); const { timelineNodes } = useTimelineDataFlow( agentId ? (pipelineResult as IPipelineFileLogDetail) : dataset, ); const { navigateToDatasetOverview, navigateToDatasetList, navigateToAgents, navigateToAgent, } = useNavigatePage(); let fileUrl = useGetDocumentUrl(isAgent); const { highlights, setWidthAndHeight } = useGetChunkHighlights(selectedChunk); const fileType = useMemo(() => { if (isAgent) { return Images.some((x) => x === documentExtension) ? 'visual' : documentExtension; } switch (documentInfo?.type) { case 'doc': return documentInfo?.name.split('.').pop() || 'doc'; case 'visual': case 'docx': case 'txt': case 'md': case 'pdf': return documentInfo?.type; } return 'unknown'; }, [documentExtension, documentInfo?.name, documentInfo?.type, isAgent]); const { handleReRunFunc, isChange, setIsChange, loading: reRunLoading, } = useRerunDataflow({ data: dataset, }); const handleStepChange = (id: number | string, step: TimelineNode) => { if (isChange) { Modal.show({ visible: true, className: '!w-[560px]', title: t('dataflowParser.changeStepModalTitle'), children: (
), onVisibleChange: () => { Modal.destroy(); }, footer: (
), }); } else { setActiveStepId(id); } }; const { type } = useGetKnowledgeSearchParams(); const currentTimeNode: TimelineNode = useMemo(() => { return ( timelineNodes.find((node) => node.id === activeStepId) || ({} as TimelineNode) ); }, [activeStepId, timelineNodes]); const { summaryInfo } = useSummaryInfo(dataset, currentTimeNode); return ( <> { if (knowledgeId) { navigateToDatasetList(); } if (agentId) { navigateToAgents(); } }} > {knowledgeId ? t('knowledgeDetails.dataset') : t('header.flow')} { if (knowledgeId) { navigateToDatasetOverview(knowledgeId)(); } if (isAgent) { navigateToAgent(agentId, AgentCategory.DataflowCanvas)(); } }} > {knowledgeId ? t('knowledgeDetails.overview') : agentTitle} {knowledgeId ? documentInfo?.name : t('dataflow.viewResult')} {type === 'dataflow' && (
)}
{/* {currentTimeNode?.type === TimelineNodeType.splitter && ( )} */} {/* {currentTimeNode?.type === TimelineNodeType.parser && ( */} {(currentTimeNode?.type === TimelineNodeType.parser || currentTimeNode?.type === TimelineNodeType.characterSplitter || currentTimeNode?.type === TimelineNodeType.titleSplitter || currentTimeNode?.type === TimelineNodeType.contextGenerator) && ( )} {/* )} */}
); }; export default Chunk;