diff options
author | Tyler Ferrari <69283684+Sowgro@users.noreply.github.com> | 2024-12-17 11:25:44 -0500 |
---|---|---|
committer | GitHub <noreply@github.com> | 2024-12-17 11:25:44 -0500 |
commit | 69b7a1fae3aa7ed474877889cd68b8a6415480d7 (patch) | |
tree | 6b3d111f4bc0915e36937476177a2bf8f67c2fb3 /extension/src/components/DropTargets.tsx | |
parent | a2689fd6ed8f39d4aee98ad193973c743ec1ae4d (diff) | |
parent | 1ca4340e46f7fec3d2689cb8a3c60f9018ead048 (diff) | |
download | bookmarks-home-69b7a1fae3aa7ed474877889cd68b8a6415480d7.tar.gz bookmarks-home-69b7a1fae3aa7ed474877889cd68b8a6415480d7.tar.bz2 bookmarks-home-69b7a1fae3aa7ed474877889cd68b8a6415480d7.zip |
Merge pull request #2 from ATO-b2/drag-n-drop
Drag n drop
Diffstat (limited to 'extension/src/components/DropTargets.tsx')
-rw-r--r-- | extension/src/components/DropTargets.tsx | 52 |
1 files changed, 52 insertions, 0 deletions
diff --git a/extension/src/components/DropTargets.tsx b/extension/src/components/DropTargets.tsx new file mode 100644 index 0000000..297f366 --- /dev/null +++ b/extension/src/components/DropTargets.tsx @@ -0,0 +1,52 @@ +import React, {useEffect} from "react"; +import {ActiveDrag} from "./Body.tsx"; +import CreateFolderIcon from "../assets/create_folder.svg?react" + +function DropTarget(props: {children: React.ReactNode, className: string, onDrop: () => void}) { + let [drop, setDrop] = React.useState(false); + let [activeDrag, _] = React.useContext(ActiveDrag); + + useEffect(() => { + setDrop(false); + }, [activeDrag]); + + function handleDragOver(e: React.DragEvent<HTMLDivElement>) { + e.preventDefault() + setDrop(true) + } + + function handleDragLeave(e: React.DragEvent<HTMLDivElement>) { + setDrop(false) + } + + function handleDrop(e: React.DragEvent<HTMLDivElement>) { + e.preventDefault(); + props.onDrop(); + } + + return ( + <div className={props.className} style={drop ? undefined : {opacity: 0}} + onDragOver={handleDragOver} onDragLeave={handleDragLeave} onDrop={handleDrop}> + {props.children} + </div> + ); +} + +function DropTargets(props: { onDropLeft: () => void, onDropRight: () => void, onDropCenter: () => void }) { + + return ( + <div className={"drop-targets"}> + <DropTarget className={"left"} onDrop={props.onDropLeft}> + <div/> + </DropTarget> + <DropTarget className={"right"} onDrop={props.onDropRight}> + <div/> + </DropTarget> + <DropTarget className={"center"} onDrop={props.onDropCenter}> + <CreateFolderIcon/> + </DropTarget> + </div> + ); +} + +export default DropTargets;
\ No newline at end of file |