import { useSetModalState, useShowDeleteConfirm } from '@/hooks/common-hooks'; import { useConnectToKnowledge, useCreateFolder, useDeleteFile, useFetchParentFolderList, useMoveFile, useRenameFile, useUploadFile, } from '@/hooks/file-manager-hooks'; import { IFile } from '@/interfaces/database/file-manager'; import { TableRowSelection } from 'antd/es/table/interface'; import { UploadFile } from 'antd/lib'; import { useCallback, useMemo, useState } from 'react'; import { useNavigate, useSearchParams } from 'umi'; export const useGetFolderId = () => { const [searchParams] = useSearchParams(); const id = searchParams.get('folderId') as string; return id ?? ''; }; export const useGetRowSelection = () => { const [selectedRowKeys, setSelectedRowKeys] = useState([]); const rowSelection: TableRowSelection = { selectedRowKeys, getCheckboxProps: (record) => { return { disabled: record.source_type === 'knowledgebase' }; }, onChange: (newSelectedRowKeys: React.Key[]) => { setSelectedRowKeys(newSelectedRowKeys); }, }; return { rowSelection, setSelectedRowKeys }; }; export const useNavigateToOtherFolder = () => { const navigate = useNavigate(); const navigateToOtherFolder = useCallback( (folderId: string) => { navigate(`/file?folderId=${folderId}`); }, [navigate], ); return navigateToOtherFolder; }; export const useRenameCurrentFile = () => { const [file, setFile] = useState({} as IFile); const { visible: fileRenameVisible, hideModal: hideFileRenameModal, showModal: showFileRenameModal, } = useSetModalState(); const { renameFile, loading } = useRenameFile(); const onFileRenameOk = useCallback( async (name: string) => { const ret = await renameFile({ fileId: file.id, name, }); if (ret === 0) { hideFileRenameModal(); } }, [renameFile, file, hideFileRenameModal], ); const handleShowFileRenameModal = useCallback( async (record: IFile) => { setFile(record); showFileRenameModal(); }, [showFileRenameModal], ); return { fileRenameLoading: loading, initialFileName: file.name, onFileRenameOk, fileRenameVisible, hideFileRenameModal, showFileRenameModal: handleShowFileRenameModal, }; }; export const useSelectBreadcrumbItems = () => { const parentFolderList = useFetchParentFolderList(); return parentFolderList.length === 1 ? [] : parentFolderList.map((x) => ({ title: x.name === '/' ? 'root' : x.name, path: `/file?folderId=${x.id}`, })); }; export const useHandleCreateFolder = () => { const { visible: folderCreateModalVisible, hideModal: hideFolderCreateModal, showModal: showFolderCreateModal, } = useSetModalState(); const { createFolder, loading } = useCreateFolder(); const id = useGetFolderId(); const onFolderCreateOk = useCallback( async (name: string) => { const ret = await createFolder({ parentId: id, name }); if (ret === 0) { hideFolderCreateModal(); } }, [createFolder, hideFolderCreateModal, id], ); return { folderCreateLoading: loading, onFolderCreateOk, folderCreateModalVisible, hideFolderCreateModal, showFolderCreateModal, }; }; export const useHandleDeleteFile = ( fileIds: string[], setSelectedRowKeys: (keys: string[]) => void, ) => { const { deleteFile: removeDocument } = useDeleteFile(); const showDeleteConfirm = useShowDeleteConfirm(); const parentId = useGetFolderId(); const handleRemoveFile = () => { showDeleteConfirm({ onOk: async () => { const code = await removeDocument({ fileIds, parentId }); if (code === 0) { setSelectedRowKeys([]); } return; }, }); }; return { handleRemoveFile }; }; export const useHandleUploadFile = () => { const { visible: fileUploadVisible, hideModal: hideFileUploadModal, showModal: showFileUploadModal, } = useSetModalState(); const { uploadFile, loading } = useUploadFile(); const id = useGetFolderId(); const onFileUploadOk = useCallback( async (fileList: UploadFile[]): Promise => { if (fileList.length > 0) { const ret: number = await uploadFile({ fileList, parentId: id }); if (ret === 0) { hideFileUploadModal(); } return ret; } }, [uploadFile, hideFileUploadModal, id], ); return { fileUploadLoading: loading, onFileUploadOk, fileUploadVisible, hideFileUploadModal, showFileUploadModal, }; }; export const useHandleConnectToKnowledge = () => { const { visible: connectToKnowledgeVisible, hideModal: hideConnectToKnowledgeModal, showModal: showConnectToKnowledgeModal, } = useSetModalState(); const { connectFileToKnowledge: connectToKnowledge, loading } = useConnectToKnowledge(); const [record, setRecord] = useState({} as IFile); const initialValue = useMemo(() => { return Array.isArray(record?.kbs_info) ? record?.kbs_info?.map((x) => x.kb_id) : []; }, [record?.kbs_info]); const onConnectToKnowledgeOk = useCallback( async (knowledgeIds: string[]) => { const ret = await connectToKnowledge({ fileIds: [record.id], kbIds: knowledgeIds, }); if (ret === 0) { hideConnectToKnowledgeModal(); } return ret; }, [connectToKnowledge, hideConnectToKnowledgeModal, record.id], ); const handleShowConnectToKnowledgeModal = useCallback( (record: IFile) => { setRecord(record); showConnectToKnowledgeModal(); }, [showConnectToKnowledgeModal], ); return { initialValue, connectToKnowledgeLoading: loading, onConnectToKnowledgeOk, connectToKnowledgeVisible, hideConnectToKnowledgeModal, showConnectToKnowledgeModal: handleShowConnectToKnowledgeModal, }; }; export const useHandleBreadcrumbClick = () => { const navigate = useNavigate(); const handleBreadcrumbClick = useCallback( (path?: string) => { if (path) { navigate(path); } }, [navigate], ); return { handleBreadcrumbClick }; }; export const useHandleMoveFile = ( setSelectedRowKeys: (keys: string[]) => void, ) => { const { visible: moveFileVisible, hideModal: hideMoveFileModal, showModal: showMoveFileModal, } = useSetModalState(); const { moveFile, loading } = useMoveFile(); const [sourceFileIds, setSourceFileIds] = useState([]); const onMoveFileOk = useCallback( async (targetFolderId: string) => { const ret = await moveFile({ src_file_ids: sourceFileIds, dest_file_id: targetFolderId, }); if (ret === 0) { setSelectedRowKeys([]); hideMoveFileModal(); } return ret; }, [moveFile, hideMoveFileModal, sourceFileIds, setSelectedRowKeys], ); const handleShowMoveFileModal = useCallback( (ids: string[]) => { setSourceFileIds(ids); showMoveFileModal(); }, [showMoveFileModal], ); return { initialValue: '', moveFileLoading: loading, onMoveFileOk, moveFileVisible, hideMoveFileModal, showMoveFileModal: handleShowMoveFileModal, }; };