import { useFetchNextChunkList, useSwitchChunk, } from '@/hooks/use-chunk-request'; import classNames from 'classnames'; import { useCallback, useEffect, useMemo, useState } from 'react'; import { useTranslation } from 'react-i18next'; import ChunkCard from './components/chunk-card'; import CreatingModal from './components/chunk-creating-modal'; import { useChangeChunkTextMode, useDeleteChunkByIds, useGetChunkHighlights, useHandleChunkCardClick, useUpdateChunk, } from './hooks'; import ChunkResultBar from './components/chunk-result-bar'; import CheckboxSets from './components/chunk-result-bar/checkbox-sets'; // import DocumentHeader from './components/document-preview/document-header'; import DocumentPreview from '@/components/document-preview'; import DocumentHeader from '@/components/document-preview/document-header'; import { useGetDocumentUrl } from '@/components/document-preview/hooks'; import { PageHeader } from '@/components/page-header'; import { Breadcrumb, BreadcrumbItem, BreadcrumbLink, BreadcrumbList, BreadcrumbPage, BreadcrumbSeparator, } from '@/components/ui/breadcrumb'; import message from '@/components/ui/message'; import { RAGFlowPagination, RAGFlowPaginationType, } from '@/components/ui/ragflow-pagination'; import { Spin } from '@/components/ui/spin'; import { QueryStringMap, useNavigatePage, } from '@/hooks/logic-hooks/navigate-hooks'; import { useFetchKnowledgeBaseConfiguration } from '@/hooks/use-knowledge-request'; import styles from './index.module.less'; const Chunk = () => { const [selectedChunkIds, setSelectedChunkIds] = useState([]); const { removeChunk } = useDeleteChunkByIds(); const { data: { documentInfo, data = [], total }, pagination, loading, searchString, handleInputChange, available, handleSetAvailable, dataUpdatedAt, } = useFetchNextChunkList(); const { handleChunkCardClick, selectedChunkId } = useHandleChunkCardClick(); const isPdf = documentInfo?.type === 'pdf'; const { data: dataset } = useFetchKnowledgeBaseConfiguration(); const { t } = useTranslation(); const { changeChunkTextMode, textMode } = useChangeChunkTextMode(); const { switchChunk } = useSwitchChunk(); const [chunkList, setChunkList] = useState(data); const { chunkUpdatingLoading, onChunkUpdatingOk, showChunkUpdatingModal, hideChunkUpdatingModal, chunkId, chunkUpdatingVisible, documentId, } = useUpdateChunk(); const { navigateToDataFile, getQueryString, navigateToDatasetList } = useNavigatePage(); const fileUrl = useGetDocumentUrl(false); useEffect(() => { setChunkList(data); }, [data]); const onPaginationChange: RAGFlowPaginationType['onChange'] = ( page, size, ) => { setSelectedChunkIds([]); pagination.onChange?.(page, size); }; const selectAllChunk = useCallback( (checked: boolean) => { setSelectedChunkIds(checked ? data.map((x) => x.chunk_id) : []); }, [data], ); const handleSingleCheckboxClick = useCallback( (chunkId: string, checked: boolean) => { setSelectedChunkIds((previousIds) => { const idx = previousIds.findIndex((x) => x === chunkId); const nextIds = [...previousIds]; if (checked && idx === -1) { nextIds.push(chunkId); } else if (!checked && idx !== -1) { nextIds.splice(idx, 1); } return nextIds; }); }, [], ); const showSelectedChunkWarning = useCallback(() => { message.warning(t('message.pleaseSelectChunk')); }, [t]); const handleRemoveChunk = useCallback(async () => { if (selectedChunkIds.length > 0) { const resCode: number = await removeChunk(selectedChunkIds, documentId); if (resCode === 0) { setSelectedChunkIds([]); } } else { showSelectedChunkWarning(); } }, [selectedChunkIds, documentId, removeChunk, showSelectedChunkWarning]); const handleSwitchChunk = useCallback( async (available?: number, chunkIds?: string[]) => { let ids = chunkIds; if (!chunkIds) { ids = selectedChunkIds; if (selectedChunkIds.length === 0) { showSelectedChunkWarning(); return; } } const resCode: number = await switchChunk({ chunk_ids: ids, available_int: available, doc_id: documentId, }); if (ids?.length && resCode === 0) { chunkList.forEach((x: any) => { if (ids.indexOf(x['chunk_id']) > -1) { x['available_int'] = available; } }); setChunkList(chunkList); } }, [ switchChunk, documentId, selectedChunkIds, showSelectedChunkWarning, chunkList, ], ); const { highlights, setWidthAndHeight } = useGetChunkHighlights(selectedChunkId); const fileType = useMemo(() => { switch (documentInfo?.type) { case 'doc': return documentInfo?.name.split('.').pop() || 'doc'; case 'visual': return documentInfo?.name.split('.').pop() || 'visual'; case 'docx': case 'txt': case 'md': case 'mdx': case 'pdf': return documentInfo?.type; } return 'unknown'; }, [documentInfo]); return ( <> {t('knowledgeDetails.dataset')} {dataset.name} {documentInfo?.name}

{t('chunk.chunkResult')}

{t('chunk.chunkResultTip')}
{chunkList.map((item) => ( x === item.chunk_id, )} handleCheckboxClick={handleSingleCheckboxClick} switchChunk={handleSwitchChunk} clickChunkCard={handleChunkCardClick} selected={item.chunk_id === selectedChunkId} textMode={textMode} t={dataUpdatedAt} > ))}
{ onPaginationChange(page, pageSize); }} >
{chunkUpdatingVisible && ( )} ); }; export default Chunk;