-
-
Notifications
You must be signed in to change notification settings - Fork 66
Expand file tree
/
Copy pathFileList.jsx
More file actions
83 lines (75 loc) · 2.35 KB
/
FileList.jsx
File metadata and controls
83 lines (75 loc) · 2.35 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
import { useRef } from "react";
import FileItem from "./FileItem";
import { useFileNavigation } from "../../contexts/FileNavigationContext";
import { useLayout } from "../../contexts/LayoutContext";
import ContextMenu from "../../components/ContextMenu/ContextMenu";
import { useDetectOutsideClick } from "../../hooks/useDetectOutsideClick";
import useFileList from "./useFileList";
import FilesHeader from "./FilesHeader";
import "./FileList.scss";
const FileList = ({
onCreateFolder,
onRefresh,
enableFilePreview,
triggerAction,
actions
}) => {
const { currentPathFiles } = useFileNavigation();
const filesViewRef = useRef(null);
const { activeLayout } = useLayout();
const {
emptySelecCtxItems,
selecCtxItems,
handleContextMenu,
unselectFiles,
visible,
setVisible,
setLastSelectedFile,
selectedFileIndexes,
clickPosition,
isSelectionCtx,
} = useFileList(onRefresh, enableFilePreview, triggerAction, actions);
const contextMenuRef = useDetectOutsideClick(() => setVisible(false));
return (
<div
ref={filesViewRef}
className={`files ${activeLayout}`}
onContextMenu={handleContextMenu}
onClick={unselectFiles}
>
{activeLayout === "list" && <FilesHeader unselectFiles={unselectFiles} />}
{currentPathFiles?.length > 0 ? (
<>
{currentPathFiles.map((file, index) => (
<FileItem
key={index}
index={index}
file={file}
actions={actions}
onCreateFolder={onCreateFolder}
enableFilePreview={enableFilePreview}
triggerAction={triggerAction}
filesViewRef={filesViewRef}
selectedFileIndexes={selectedFileIndexes}
handleContextMenu={handleContextMenu}
setVisible={setVisible}
setLastSelectedFile={setLastSelectedFile}
/>
))}
</>
) : (
<div className="empty-folder">This folder is empty.</div>
)}
<ContextMenu
filesViewRef={filesViewRef}
contextMenuRef={contextMenuRef.ref}
menuItems={isSelectionCtx ? selecCtxItems() : emptySelecCtxItems}
visible={visible}
setVisible={setVisible}
clickPosition={clickPosition}
/>
</div>
);
};
FileList.displayName = "FileList";
export default FileList;