1
0
mirror of https://github.com/haiwen/seahub.git synced 2025-09-26 15:26:19 +00:00
Files
seahub/frontend/src/hooks/file-operations/index.js
杨国璇 07d0d72f64 file: ops (#7923)
Co-authored-by: 杨国璇 <ygx@MacBookPro.lan>
2025-06-23 13:52:03 +08:00

101 lines
4.1 KiB
JavaScript

import React, { useCallback, useContext, useRef } from 'react';
import { DownloadFileProvider } from './download';
import { CreateFileProvider } from './create-file';
import { CreateFolderProvider } from './create-folder';
import { RenameFileProvider } from './rename';
import { MoveFileProvider } from './move';
import { CopyFileProvider } from './copy';
import { ShareFileProvider } from './share';
import { LibSubFolderPermissionProvider } from './permission';
import { AccessLogProvider } from './access-log';
// This hook provides content about file operations, like a middleware
const FileOperationsContext = React.createContext(null);
export const FileOperationsProvider = ({
repoID, repoInfo, eventBus, enableDirPrivateShare, isGroupOwnedRepo,
onCreateFolder, onCreateFile,
onRename,
onMove, onMoveItem,
onCopy, onCopyItem,
children
}) => {
const createFileRef = useRef(null);
const createFolderRef = useRef(null);
const renameRef = useRef(null);
const downloadRef = useRef(null);
const moveRef = useRef(null);
const copyRef = useRef(null);
const shareRef = useRef(null);
const permissionRef = useRef(null);
const logRef = useRef(null);
const handleDownload = useCallback((...params) => {
downloadRef.current.handleDownload(...params);
}, []);
const handleCreateFolder = useCallback((...params) => {
createFolderRef.current.handleCreateFolder(...params);
}, []);
const handleCreateFile = useCallback((...params) => {
createFileRef.current.handleCreateFile(...params);
}, []);
const handleMove = useCallback((...params) => {
moveRef.current.handleMove(...params);
}, []);
const handleCopy = useCallback((...params) => {
copyRef.current.handleCopy(...params);
}, []);
const handleShare = useCallback((...params) => {
shareRef.current.handleShare(...params);
}, []);
const handleRename = useCallback((...params) => {
renameRef.current.handleRename(...params);
}, []);
const handleLibSubFolderPermission = useCallback((...params) => {
permissionRef.current.handleLibSubFolderPermission(...params);
}, []);
const handleAccessLog = useCallback((...params) => {
logRef.current.handleAccessLog(...params);
}, []);
return (
<FileOperationsContext.Provider value={{ eventBus, handleDownload, handleCreateFolder, handleCreateFile, handleMove, handleCopy, handleShare, handleRename, handleLibSubFolderPermission, handleAccessLog }}>
<CreateFolderProvider eventBus={eventBus} onCreateFolder={onCreateFolder} ref={createFolderRef}>
<CreateFileProvider eventBus={eventBus} onCreateFile={onCreateFile} ref={createFileRef}>
<RenameFileProvider eventBus={eventBus} onRename={onRename} ref={renameRef}>
<MoveFileProvider eventBus={eventBus} repoID={repoID} repoInfo={repoInfo} onCreateFolder={onCreateFolder} onMove={onMove} onMoveItem={onMoveItem} ref={moveRef}>
<CopyFileProvider eventBus={eventBus} repoID={repoID} repoInfo={repoInfo} onCreateFolder={onCreateFolder} onCopy={onCopy} onCopyItem={onCopyItem} ref={copyRef}>
<DownloadFileProvider repoID={repoID} eventBus={eventBus} ref={downloadRef}>
<ShareFileProvider repoID={repoID} eventBus={eventBus} repoInfo={repoInfo} isGroupOwnedRepo={isGroupOwnedRepo} enableDirPrivateShare={enableDirPrivateShare} ref={shareRef}>
<LibSubFolderPermissionProvider repoID={repoID} eventBus={eventBus} isGroupOwnedRepo={isGroupOwnedRepo} ref={permissionRef}>
<AccessLogProvider repoID={repoID} eventBus={eventBus} ref={logRef}>
{children}
</AccessLogProvider>
</LibSubFolderPermissionProvider>
</ShareFileProvider>
</DownloadFileProvider>
</CopyFileProvider>
</MoveFileProvider>
</RenameFileProvider>
</CreateFileProvider>
</CreateFolderProvider>
</FileOperationsContext.Provider>
);
};
export const useFileOperations = () => {
const context = useContext(FileOperationsContext);
if (!context) {
throw new Error('\'FileOperationsContext\' is null');
}
return context;
};