import { useSetModalState } from '@/hooks/common-hooks'; import { useConnectToKnowledge, useRenameFile, } from '@/hooks/file-manager-hooks'; import { IFile } from '@/interfaces/database/file-manager'; import { TableRowSelection } from 'antd/es/table/interface'; 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 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 type UseRenameCurrentFileReturnType = ReturnType< typeof useRenameCurrentFile >; 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 { initialConnectedIds: initialValue, connectToKnowledgeLoading: loading, onConnectToKnowledgeOk, connectToKnowledgeVisible, hideConnectToKnowledgeModal, showConnectToKnowledgeModal: handleShowConnectToKnowledgeModal, }; }; export type UseHandleConnectToKnowledgeReturnType = ReturnType< typeof useHandleConnectToKnowledge >; export const useHandleBreadcrumbClick = () => { const navigate = useNavigate(); const handleBreadcrumbClick = useCallback( (path?: string) => { if (path) { navigate(path); } }, [navigate], ); return { handleBreadcrumbClick }; };