import { useSetModalState } from '@/hooks/common-hooks'; import { useCreateNextDocument, useNextWebCrawl, useRunNextDocument, useSaveNextDocumentName, useSetDocumentMeta, useSetNextDocumentParser, useUploadNextDocument, } from '@/hooks/document-hooks'; import { useGetKnowledgeSearchParams } from '@/hooks/route-hook'; import { IChangeParserConfigRequestBody } from '@/interfaces/request/document'; import { getUnSupportedFilesCount } from '@/utils/document-util'; import { UploadFile } from 'antd'; import { useCallback, useState } from 'react'; import { useNavigate } from 'umi'; import { KnowledgeRouteKey } from './constant'; export const useNavigateToOtherPage = () => { const navigate = useNavigate(); const { knowledgeId } = useGetKnowledgeSearchParams(); const linkToUploadPage = useCallback(() => { navigate(`/knowledge/dataset/upload?id=${knowledgeId}`); }, [navigate, knowledgeId]); const toChunk = useCallback( (id: string) => { navigate( `/knowledge/${KnowledgeRouteKey.Dataset}/chunk?id=${knowledgeId}&doc_id=${id}`, ); }, [navigate, knowledgeId], ); return { linkToUploadPage, toChunk }; }; export const useRenameDocument = (documentId: string) => { const { saveName, loading } = useSaveNextDocumentName(); const { visible: renameVisible, hideModal: hideRenameModal, showModal: showRenameModal, } = useSetModalState(); const onRenameOk = useCallback( async (name: string) => { const ret = await saveName({ documentId, name }); if (ret === 0) { hideRenameModal(); } }, [hideRenameModal, saveName, documentId], ); return { renameLoading: loading, onRenameOk, renameVisible, hideRenameModal, showRenameModal, }; }; export const useCreateEmptyDocument = () => { const { createDocument, loading } = useCreateNextDocument(); const { visible: createVisible, hideModal: hideCreateModal, showModal: showCreateModal, } = useSetModalState(); const onCreateOk = useCallback( async (name: string) => { const ret = await createDocument(name); if (ret === 0) { hideCreateModal(); } }, [hideCreateModal, createDocument], ); return { createLoading: loading, onCreateOk, createVisible, hideCreateModal, showCreateModal, }; }; export const useChangeDocumentParser = (documentId: string) => { const { setDocumentParser, loading } = useSetNextDocumentParser(); const { visible: changeParserVisible, hideModal: hideChangeParserModal, showModal: showChangeParserModal, } = useSetModalState(); const onChangeParserOk = useCallback( async (parserId: string, parserConfig: IChangeParserConfigRequestBody) => { const ret = await setDocumentParser({ parserId, documentId, parserConfig, }); if (ret === 0) { hideChangeParserModal(); } }, [hideChangeParserModal, setDocumentParser, documentId], ); return { changeParserLoading: loading, onChangeParserOk, changeParserVisible, hideChangeParserModal, showChangeParserModal, }; }; export const useGetRowSelection = () => { const [selectedRowKeys, setSelectedRowKeys] = useState([]); const rowSelection = { selectedRowKeys, onChange: (newSelectedRowKeys: React.Key[]) => { setSelectedRowKeys(newSelectedRowKeys); }, }; return rowSelection; }; export const useHandleUploadDocument = () => { const { visible: documentUploadVisible, hideModal: hideDocumentUploadModal, showModal: showDocumentUploadModal, } = useSetModalState(); const { uploadDocument, loading } = useUploadNextDocument(); const onDocumentUploadOk = useCallback( async (fileList: UploadFile[]): Promise => { if (fileList.length > 0) { const ret: any = await uploadDocument(fileList); if (typeof ret?.message !== 'string') { return; } const count = getUnSupportedFilesCount(ret?.message); /// 500 error code indicates that some file types are not supported let code = ret?.code; if ( ret?.code === 0 || (ret?.code === 500 && count !== fileList.length) // Some files were not uploaded successfully, but some were uploaded successfully. ) { code = 0; hideDocumentUploadModal(); } return code; } }, [uploadDocument, hideDocumentUploadModal], ); return { documentUploadLoading: loading, onDocumentUploadOk, documentUploadVisible, hideDocumentUploadModal, showDocumentUploadModal, }; }; export const useHandleWebCrawl = () => { const { visible: webCrawlUploadVisible, hideModal: hideWebCrawlUploadModal, showModal: showWebCrawlUploadModal, } = useSetModalState(); const { webCrawl, loading } = useNextWebCrawl(); const onWebCrawlUploadOk = useCallback( async (name: string, url: string) => { const ret = await webCrawl({ name, url }); if (ret === 0) { hideWebCrawlUploadModal(); return 0; } return -1; }, [webCrawl, hideWebCrawlUploadModal], ); return { webCrawlUploadLoading: loading, onWebCrawlUploadOk, webCrawlUploadVisible, hideWebCrawlUploadModal, showWebCrawlUploadModal, }; }; export const useHandleRunDocumentByIds = (id: string) => { const { runDocumentByIds, loading } = useRunNextDocument(); const [currentId, setCurrentId] = useState(''); const isLoading = loading && currentId !== '' && currentId === id; const handleRunDocumentByIds = async ( documentId: string, isRunning: boolean, shouldDelete: boolean = false, ) => { if (isLoading) { return; } setCurrentId(documentId); try { await runDocumentByIds({ documentIds: [documentId], run: isRunning ? 2 : 1, shouldDelete, }); setCurrentId(''); } catch (error) { setCurrentId(''); } }; return { handleRunDocumentByIds, loading: isLoading, }; }; export const useShowMetaModal = (documentId: string) => { const { setDocumentMeta, loading } = useSetDocumentMeta(); const { visible: setMetaVisible, hideModal: hideSetMetaModal, showModal: showSetMetaModal, } = useSetModalState(); const onSetMetaModalOk = useCallback( async (meta: string) => { const ret = await setDocumentMeta({ documentId, meta, }); if (ret === 0) { hideSetMetaModal(); } }, [setDocumentMeta, documentId, hideSetMetaModal], ); return { setMetaLoading: loading, onSetMetaModalOk, setMetaVisible, hideSetMetaModal, showSetMetaModal, }; };