2024-03-22 11:35:25 +08:00
|
|
|
import { useSetModalState } from '@/hooks/commonHooks';
|
|
|
|
import {
|
|
|
|
useCreateDocument,
|
|
|
|
useFetchDocumentList,
|
|
|
|
useSaveDocumentName,
|
|
|
|
useSetDocumentParser,
|
|
|
|
} from '@/hooks/documentHooks';
|
|
|
|
import { useGetKnowledgeSearchParams } from '@/hooks/routeHook';
|
|
|
|
import { useOneNamespaceEffectsLoading } from '@/hooks/storeHooks';
|
2024-03-27 17:56:34 +08:00
|
|
|
import { useFetchTenantInfo } from '@/hooks/userSettingHook';
|
2024-03-22 11:35:25 +08:00
|
|
|
import { Pagination } from '@/interfaces/common';
|
|
|
|
import { IKnowledgeFile } from '@/interfaces/database/knowledge';
|
2024-03-22 16:57:09 +08:00
|
|
|
import { IChangeParserConfigRequestBody } from '@/interfaces/request/document';
|
2024-03-22 11:35:25 +08:00
|
|
|
import { PaginationProps } 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();
|
|
|
|
|
|
|
|
useFetchTenantInfo();
|
|
|
|
|
|
|
|
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 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.currentPage,
|
|
|
|
pageSize: kFModel.pagination.pageSize,
|
|
|
|
pageSizeOptions: [1, 2, 10, 20, 50, 100],
|
|
|
|
onChange: onPageChange,
|
|
|
|
};
|
|
|
|
}, [kFModel, onPageChange]);
|
|
|
|
|
|
|
|
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 useSetSelectedRecord = () => {
|
|
|
|
const [currentRecord, setCurrentRecord] = useState<IKnowledgeFile>(
|
|
|
|
{} as IKnowledgeFile,
|
|
|
|
);
|
|
|
|
|
|
|
|
const setRecord = (record: IKnowledgeFile) => () => {
|
|
|
|
setCurrentRecord(record);
|
|
|
|
};
|
|
|
|
|
|
|
|
return { currentRecord, setRecord };
|
|
|
|
};
|
|
|
|
|
|
|
|
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(
|
2024-03-22 16:57:09 +08:00
|
|
|
async (parserId: string, parserConfig: IChangeParserConfigRequestBody) => {
|
|
|
|
const ret = await setDocumentParser(parserId, documentId, parserConfig);
|
2024-03-22 11:35:25 +08:00
|
|
|
if (ret === 0) {
|
|
|
|
hideChangeParserModal();
|
|
|
|
}
|
|
|
|
},
|
|
|
|
[hideChangeParserModal, setDocumentParser, documentId],
|
|
|
|
);
|
|
|
|
|
|
|
|
return {
|
|
|
|
changeParserLoading: loading,
|
|
|
|
onChangeParserOk,
|
|
|
|
changeParserVisible,
|
|
|
|
hideChangeParserModal,
|
|
|
|
showChangeParserModal,
|
|
|
|
};
|
|
|
|
};
|