diff --git a/src/frontend/src/pages/FlowPage/components/extraSidebarComponent/sideBarDraggableComponent/index.tsx b/src/frontend/src/pages/FlowPage/components/extraSidebarComponent/sideBarDraggableComponent/index.tsx index 0e817852b..d7d3ee925 100644 --- a/src/frontend/src/pages/FlowPage/components/extraSidebarComponent/sideBarDraggableComponent/index.tsx +++ b/src/frontend/src/pages/FlowPage/components/extraSidebarComponent/sideBarDraggableComponent/index.tsx @@ -1,12 +1,12 @@ -import { DragEventHandler, useContext, useRef, useState } from "react"; +import { DragEventHandler, forwardRef, useRef, useState } from "react"; import IconComponent from "../../../../../components/genericIconComponent"; import { Select, SelectContent, SelectItem, - SelectTrigger, } from "../../../../../components/ui/select-custom"; -import { AuthContext } from "../../../../../contexts/authContext"; +import { useDarkStore } from "../../../../../stores/darkStore"; +import useFlowsManagerStore from "../../../../../stores/flowsManagerStore"; import { APIClassType } from "../../../../../types/api"; import { createFlowComponent, @@ -14,143 +14,147 @@ import { getNodeId, } from "../../../../../utils/reactflowUtils"; import { removeCountFromString } from "../../../../../utils/utils"; -import { useDarkStore } from "../../../../../stores/darkStore"; -import useFlowsManagerStore from "../../../../../stores/flowsManagerStore"; -export default function SidebarDraggableComponent({ - sectionName, - display_name, - itemName, - error, - color, - onDragStart, - apiClass, - official, -}: { - sectionName: string; - apiClass: APIClassType; - display_name: string; - itemName: string; - error: boolean; - color: string; - onDragStart: DragEventHandler; - official: boolean; -}) { - const [open, setOpen] = useState(false); - const deleteComponent = useFlowsManagerStore( - (state) => state.deleteComponent - ); - const version = useDarkStore((state) => state.version); - const [cursorPos, setCursorPos] = useState({ x: 0, y: 0 }); - const popoverRef = useRef(null); +export const SidebarDraggableComponent = forwardRef( + ( + { + sectionName, + display_name, + itemName, + error, + color, + onDragStart, + apiClass, + official, + }: { + sectionName: string; + apiClass: APIClassType; + display_name: string; + itemName: string; + error: boolean; + color: string; + onDragStart: DragEventHandler; + official: boolean; + }, + ref + ) => { + const [open, setOpen] = useState(false); + const deleteComponent = useFlowsManagerStore( + (state) => state.deleteComponent + ); + const version = useDarkStore((state) => state.version); + const [cursorPos, setCursorPos] = useState({ x: 0, y: 0 }); + const popoverRef = useRef(null); - const handlePointerDown = (e) => { - if (!open) { - const rect = popoverRef.current?.getBoundingClientRect() ?? { - left: 0, - top: 0, - }; - setCursorPos({ x: e.clientX - rect.left, y: e.clientY - rect.top }); + const handlePointerDown = (e) => { + if (!open) { + const rect = popoverRef.current?.getBoundingClientRect() ?? { + left: 0, + top: 0, + }; + setCursorPos({ x: e.clientX - rect.left, y: e.clientY - rect.top }); + } + }; + + function handleSelectChange(value: string) { + switch (value) { + case "share": + break; + case "download": + const type = removeCountFromString(itemName); + downloadNode( + createFlowComponent( + { id: getNodeId(type), type, node: apiClass }, + version + ) + ); + break; + case "delete": + deleteComponent(display_name); + break; + } } - }; - - function handleSelectChange(value: string) { - switch (value) { - case "share": - break; - case "download": - const type = removeCountFromString(itemName); - downloadNode( - createFlowComponent( - { id: getNodeId(type), type, node: apiClass }, - version - ) - ); - break; - case "delete": - deleteComponent(display_name); - break; - } - } - return ( - setOpen(change)} + open={open} key={itemName} - data-tooltip-id={itemName} >
{ - document.body.removeChild( - document.getElementsByClassName("cursor-grabbing")[0] - ); + onPointerDown={handlePointerDown} + onContextMenuCapture={(e) => { + e.preventDefault(); + setOpen(true); }} + key={itemName} + data-tooltip-id={itemName} >
{ + document.body.removeChild( + document.getElementsByClassName("cursor-grabbing")[0] + ); + }} > - {display_name} -
- - - - -
- {" "} - Download{" "} -
{" "} -
- {!official && ( - +
+ {display_name} +
+ + +
{" "} - Delete{" "} + Download{" "}
{" "}
- )} -
+ {!official && ( + +
+ {" "} + Delete{" "} +
{" "} +
+ )} + +
-
- - ); -} + + ); + } +); + +export default SidebarDraggableComponent;