|
import { useSetModalState, useTranslate } from '@/hooks/common-hooks'; |
|
import { |
|
useCreateDocument, |
|
useFetchDocumentList, |
|
useRunDocument, |
|
useSaveDocumentName, |
|
useSelectRunDocumentLoading, |
|
useSetDocumentParser, |
|
useUploadDocument, |
|
useWebCrawl, |
|
} from '@/hooks/document-hooks'; |
|
import { useGetKnowledgeSearchParams } from '@/hooks/route-hook'; |
|
import { useOneNamespaceEffectsLoading } from '@/hooks/store-hooks'; |
|
import { Pagination } from '@/interfaces/common'; |
|
import { IChangeParserConfigRequestBody } from '@/interfaces/request/document'; |
|
import { getUnSupportedFilesCount } from '@/utils/document-util'; |
|
import { PaginationProps, UploadFile } from 'antd'; |
|
import { useCallback, useEffect, useMemo, useState } from 'react'; |
|
import { useDispatch, useNavigate, useSelector } from 'umi'; |
|
import { KnowledgeRouteKey } from './constant'; |
|
|
|
export const useFetchDocumentListOnMount = () => { |
|
const { knowledgeId } = useGetKnowledgeSearchParams(); |
|
const fetchDocumentList = useFetchDocumentList(); |
|
const dispatch = useDispatch(); |
|
|
|
useEffect(() => { |
|
if (knowledgeId) { |
|
fetchDocumentList(); |
|
dispatch({ |
|
type: 'kFModel/pollGetDocumentList-start', |
|
payload: knowledgeId, |
|
}); |
|
} |
|
return () => { |
|
dispatch({ |
|
type: 'kFModel/pollGetDocumentList-stop', |
|
}); |
|
}; |
|
}, [knowledgeId, dispatch, fetchDocumentList]); |
|
|
|
return { fetchDocumentList }; |
|
}; |
|
|
|
export const useGetPagination = (fetchDocumentList: () => void) => { |
|
const dispatch = useDispatch(); |
|
const kFModel = useSelector((state: any) => state.kFModel); |
|
const { t } = useTranslate('common'); |
|
|
|
const setPagination = useCallback( |
|
(pageNumber = 1, pageSize?: number) => { |
|
const pagination: Pagination = { |
|
current: pageNumber, |
|
} as Pagination; |
|
if (pageSize) { |
|
pagination.pageSize = pageSize; |
|
} |
|
dispatch({ |
|
type: 'kFModel/setPagination', |
|
payload: pagination, |
|
}); |
|
}, |
|
[dispatch], |
|
); |
|
|
|
const onPageChange: PaginationProps['onChange'] = useCallback( |
|
(pageNumber: number, pageSize: number) => { |
|
setPagination(pageNumber, pageSize); |
|
fetchDocumentList(); |
|
}, |
|
[fetchDocumentList, setPagination], |
|
); |
|
|
|
const pagination: PaginationProps = useMemo(() => { |
|
return { |
|
showQuickJumper: true, |
|
total: kFModel.total, |
|
showSizeChanger: true, |
|
current: kFModel.pagination.current, |
|
pageSize: kFModel.pagination.pageSize, |
|
pageSizeOptions: [1, 2, 10, 20, 50, 100], |
|
onChange: onPageChange, |
|
showTotal: (total) => `${t('total')} ${total}`, |
|
}; |
|
}, [kFModel, onPageChange, t]); |
|
|
|
return { |
|
pagination, |
|
setPagination, |
|
total: kFModel.total, |
|
searchString: kFModel.searchString, |
|
}; |
|
}; |
|
|
|
export const useSelectDocumentListLoading = () => { |
|
return useOneNamespaceEffectsLoading('kFModel', [ |
|
'getKfList', |
|
'updateDocumentStatus', |
|
]); |
|
}; |
|
|
|
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 useHandleSearchChange = (setPagination: () => void) => { |
|
const dispatch = useDispatch(); |
|
const { knowledgeId } = useGetKnowledgeSearchParams(); |
|
|
|
const throttledGetDocumentList = useCallback(() => { |
|
dispatch({ |
|
type: 'kFModel/throttledGetDocumentList', |
|
payload: knowledgeId, |
|
}); |
|
}, [dispatch, knowledgeId]); |
|
|
|
const handleInputChange = useCallback( |
|
(e: React.ChangeEvent<HTMLInputElement | HTMLTextAreaElement>) => { |
|
const value = e.target.value; |
|
dispatch({ type: 'kFModel/setSearchString', payload: value }); |
|
setPagination(); |
|
throttledGetDocumentList(); |
|
}, |
|
[setPagination, throttledGetDocumentList, dispatch], |
|
); |
|
|
|
return { handleInputChange }; |
|
}; |
|
|
|
export const useRenameDocument = (documentId: string) => { |
|
const saveName = useSaveDocumentName(); |
|
|
|
const { |
|
visible: renameVisible, |
|
hideModal: hideRenameModal, |
|
showModal: showRenameModal, |
|
} = useSetModalState(); |
|
const loading = useOneNamespaceEffectsLoading('kFModel', ['document_rename']); |
|
|
|
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 = useCreateDocument(); |
|
|
|
const { |
|
visible: createVisible, |
|
hideModal: hideCreateModal, |
|
showModal: showCreateModal, |
|
} = useSetModalState(); |
|
const loading = useOneNamespaceEffectsLoading('kFModel', ['document_create']); |
|
|
|
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 = useSetDocumentParser(); |
|
|
|
const { |
|
visible: changeParserVisible, |
|
hideModal: hideChangeParserModal, |
|
showModal: showChangeParserModal, |
|
} = useSetModalState(); |
|
const loading = useOneNamespaceEffectsLoading('kFModel', [ |
|
'document_change_parser', |
|
]); |
|
|
|
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<React.Key[]>([]); |
|
|
|
const rowSelection = { |
|
selectedRowKeys, |
|
onChange: (newSelectedRowKeys: React.Key[]) => { |
|
setSelectedRowKeys(newSelectedRowKeys); |
|
}, |
|
}; |
|
|
|
return rowSelection; |
|
}; |
|
|
|
export const useHandleUploadDocument = () => { |
|
const { |
|
visible: documentUploadVisible, |
|
hideModal: hideDocumentUploadModal, |
|
showModal: showDocumentUploadModal, |
|
} = useSetModalState(); |
|
const uploadDocument = useUploadDocument(); |
|
|
|
const onDocumentUploadOk = useCallback( |
|
async (fileList: UploadFile[]): Promise<number | undefined> => { |
|
if (fileList.length > 0) { |
|
const ret: any = await uploadDocument(fileList); |
|
const count = getUnSupportedFilesCount(ret.retmsg); |
|
|
|
let retcode = ret.retcode; |
|
if ( |
|
ret.retcode === 0 || |
|
(ret.retcode === 500 && count !== fileList.length) |
|
) { |
|
retcode = 0; |
|
hideDocumentUploadModal(); |
|
} |
|
return retcode; |
|
} |
|
}, |
|
[uploadDocument, hideDocumentUploadModal], |
|
); |
|
|
|
const loading = useOneNamespaceEffectsLoading('kFModel', ['upload_document']); |
|
|
|
return { |
|
documentUploadLoading: loading, |
|
onDocumentUploadOk, |
|
documentUploadVisible, |
|
hideDocumentUploadModal, |
|
showDocumentUploadModal, |
|
}; |
|
}; |
|
|
|
export const useHandleWebCrawl = () => { |
|
const { |
|
visible: webCrawlUploadVisible, |
|
hideModal: hideWebCrawlUploadModal, |
|
showModal: showWebCrawlUploadModal, |
|
} = useSetModalState(); |
|
const webCrawl = useWebCrawl(); |
|
|
|
const onWebCrawlUploadOk = useCallback( |
|
async (name: string, url: string) => { |
|
const ret = await webCrawl(name, url); |
|
if (ret === 0) { |
|
hideWebCrawlUploadModal(); |
|
return 0; |
|
} |
|
return -1; |
|
}, |
|
[webCrawl, hideWebCrawlUploadModal], |
|
); |
|
|
|
const loading = useOneNamespaceEffectsLoading('kFModel', ['web_crawl']); |
|
|
|
return { |
|
webCrawlUploadLoading: loading, |
|
onWebCrawlUploadOk, |
|
webCrawlUploadVisible, |
|
hideWebCrawlUploadModal, |
|
showWebCrawlUploadModal, |
|
}; |
|
}; |
|
|
|
export const useHandleRunDocumentByIds = (id: string) => { |
|
const loading = useSelectRunDocumentLoading(); |
|
const runDocumentByIds = useRunDocument(); |
|
const [currentId, setCurrentId] = useState<string>(''); |
|
const isLoading = loading && currentId !== '' && currentId === id; |
|
|
|
const handleRunDocumentByIds = async ( |
|
documentId: string, |
|
knowledgeBaseId: string, |
|
isRunning: boolean, |
|
) => { |
|
if (isLoading) { |
|
return; |
|
} |
|
setCurrentId(documentId); |
|
try { |
|
await runDocumentByIds({ |
|
doc_ids: [documentId], |
|
run: isRunning ? 2 : 1, |
|
knowledgeBaseId, |
|
}); |
|
setCurrentId(''); |
|
} catch (error) { |
|
setCurrentId(''); |
|
} |
|
}; |
|
|
|
return { |
|
handleRunDocumentByIds, |
|
loading: isLoading, |
|
}; |
|
}; |
|
|