diff --git a/frontend/src/components/Modals/ManageWorkspace/Documents/Directory/ContextMenu/index.jsx b/frontend/src/components/Modals/ManageWorkspace/Documents/Directory/ContextMenu/index.jsx new file mode 100644 index 00000000000..5515d8b46e5 --- /dev/null +++ b/frontend/src/components/Modals/ManageWorkspace/Documents/Directory/ContextMenu/index.jsx @@ -0,0 +1,79 @@ +import { useRef, useEffect } from "react"; + +export default function ContextMenu({ + contextMenu, + closeContextMenu, + files, + selectedItems, + setSelectedItems, +}) { + const contextMenuRef = useRef(null); + + useEffect(() => { + const handleClickOutside = (event) => { + if ( + contextMenuRef.current && + !contextMenuRef.current.contains(event.target) + ) { + closeContextMenu(); + } + }; + + document.addEventListener("mousedown", handleClickOutside); + return () => { + document.removeEventListener("mousedown", handleClickOutside); + }; + }, [closeContextMenu]); + + const isAllSelected = () => { + const allItems = files.items.flatMap((folder) => [ + folder.name, + ...folder.items.map((file) => file.id), + ]); + return allItems.every((item) => selectedItems[item]); + }; + + const toggleSelectAll = () => { + if (isAllSelected()) { + setSelectedItems({}); + } else { + const newSelectedItems = {}; + files.items.forEach((folder) => { + newSelectedItems[folder.name] = true; + folder.items.forEach((file) => { + newSelectedItems[file.id] = true; + }); + }); + setSelectedItems(newSelectedItems); + } + closeContextMenu(); + }; + + if (!contextMenu.visible) return null; + + return ( +