Files
ragflow/web/src/pages/files/hooks.ts
balibabu 1366712560 Feat: Deleting files in batches. #3221 (#7234)
### What problem does this PR solve?
Feat: Deleting files in batches. #3221

### Type of change


- [x] New Feature (non-breaking change which adds functionality)
2025-04-23 19:03:02 +08:00

146 lines
3.7 KiB
TypeScript

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<React.Key[]>([]);
const rowSelection: TableRowSelection<IFile> = {
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<IFile>({} 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<IFile>({} 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 };
};