Fixed context menu on sidebar

This commit is contained in:
Lucas Oliveira 2023-11-29 18:35:30 -03:00
commit 6b691dc47d
2 changed files with 30 additions and 10 deletions

View file

@ -385,7 +385,7 @@ export default function ExtraSidebar(): JSX.Element {
<SidebarDraggableComponent <SidebarDraggableComponent
sectionName={SBSectionName as string} sectionName={SBSectionName as string}
apiClass={dataFilter[SBSectionName][SBItemName]} apiClass={dataFilter[SBSectionName][SBItemName]}
key={SBItemName} key={index}
onDragStart={(event) => onDragStart={(event) =>
onDragStart(event, { onDragStart(event, {
//split type to remove type in nodes saved with same name removing it's //split type to remove type in nodes saved with same name removing it's

View file

@ -1,4 +1,4 @@
import { DragEventHandler, useContext, useRef } from "react"; import { DragEventHandler, useContext, useRef, useState } from "react";
import IconComponent from "../../../../../components/genericIconComponent"; import IconComponent from "../../../../../components/genericIconComponent";
import { import {
Select, Select,
@ -34,9 +34,19 @@ export default function SidebarDraggableComponent({
onDragStart: DragEventHandler<HTMLDivElement>; onDragStart: DragEventHandler<HTMLDivElement>;
official: boolean; official: boolean;
}) { }) {
const open = useRef(false); const [open, setOpen] = useState(false);
const { getNodeId, deleteComponent, version } = useContext(FlowsContext); const { getNodeId, deleteComponent, version } = useContext(FlowsContext);
const { autoLogin, userData } = useContext(AuthContext); const { autoLogin, userData } = useContext(AuthContext);
const [cursorPos, setCursorPos] = useState({ x: 0, y: 0 });
const popoverRef = useRef<HTMLDivElement>(null);
const handlePointerDown = (e) => {
const rect = popoverRef.current?.getBoundingClientRect() ?? {
left: 0,
top: 0,
};
setCursorPos({ x: e.clientX - rect.left, y: e.clientY - rect.top });
};
function handleSelectChange(value: string) { function handleSelectChange(value: string) {
switch (value) { switch (value) {
@ -56,17 +66,18 @@ export default function SidebarDraggableComponent({
break; break;
} }
} }
return ( return (
<Select <Select
onValueChange={handleSelectChange} onValueChange={handleSelectChange}
onOpenChange={(change) => (open.current = change)} onOpenChange={(change) => setOpen(change)}
open={open.current} open={open}
> >
<div <div
onContextMenuCapture={(e) => { onPointerDown={handlePointerDown}
onContextMenu={(e) => {
e.preventDefault(); e.preventDefault();
open.current = true; console.log("que");
setOpen(true);
}} }}
key={itemName} key={itemName}
data-tooltip-id={itemName} data-tooltip-id={itemName}
@ -93,13 +104,22 @@ export default function SidebarDraggableComponent({
className="side-bar-components-div-form" className="side-bar-components-div-form"
> >
<span className="side-bar-components-text">{display_name}</span> <span className="side-bar-components-text">{display_name}</span>
<div> <div ref={popoverRef}>
<IconComponent <IconComponent
name="Menu" name="Menu"
className="side-bar-components-icon " className="side-bar-components-icon "
/> />
<SelectTrigger></SelectTrigger> <SelectTrigger></SelectTrigger>
<SelectContent> <SelectContent
position="popper"
side="bottom"
sideOffset={-25}
style={{
position: "absolute",
left: cursorPos.x,
top: cursorPos.y,
}}
>
<SelectItem value={"download"}> <SelectItem value={"download"}>
<div className="flex"> <div className="flex">
<IconComponent <IconComponent