@@ -28,26 +28,13 @@ export function useCanvasContextMenu({ blocks, getNodes }: UseCanvasContextMenuP
2828
2929 const menuRef = useRef < HTMLDivElement > ( null )
3030
31- /**
32- * Handle right-click on a node (block)
33- */
34- const handleNodeContextMenu = useCallback (
35- ( event : React . MouseEvent , node : Node ) => {
36- event . preventDefault ( )
37- event . stopPropagation ( )
38-
39- const x = event . clientX
40- const y = event . clientY
41-
42- const selectedNodes = getNodes ( ) . filter ( ( n ) => n . selected )
43-
44- const nodesToUse = selectedNodes . some ( ( n ) => n . id === node . id ) ? selectedNodes : [ node ]
45-
46- const blockInfos : ContextMenuBlockInfo [ ] = nodesToUse . map ( ( n ) => {
31+ /** Converts nodes to block info for context menu */
32+ const nodesToBlockInfos = useCallback (
33+ ( nodes : Node [ ] ) : ContextMenuBlockInfo [ ] =>
34+ nodes . map ( ( n ) => {
4735 const block = blocks [ n . id ]
4836 const parentId = block ?. data ?. parentId
4937 const parentType = parentId ? blocks [ parentId ] ?. type : undefined
50-
5138 return {
5239 id : n . id ,
5340 type : block ?. type || '' ,
@@ -56,13 +43,26 @@ export function useCanvasContextMenu({ blocks, getNodes }: UseCanvasContextMenuP
5643 parentId,
5744 parentType,
5845 }
59- } )
46+ } ) ,
47+ [ blocks ]
48+ )
6049
61- setPosition ( { x, y } )
62- setSelectedBlocks ( blockInfos )
50+ /**
51+ * Handle right-click on a node (block)
52+ */
53+ const handleNodeContextMenu = useCallback (
54+ ( event : React . MouseEvent , node : Node ) => {
55+ event . preventDefault ( )
56+ event . stopPropagation ( )
57+
58+ const selectedNodes = getNodes ( ) . filter ( ( n ) => n . selected )
59+ const nodesToUse = selectedNodes . some ( ( n ) => n . id === node . id ) ? selectedNodes : [ node ]
60+
61+ setPosition ( { x : event . clientX , y : event . clientY } )
62+ setSelectedBlocks ( nodesToBlockInfos ( nodesToUse ) )
6363 setActiveMenu ( 'block' )
6464 } ,
65- [ blocks , getNodes ]
65+ [ getNodes , nodesToBlockInfos ]
6666 )
6767
6868 /**
@@ -72,10 +72,7 @@ export function useCanvasContextMenu({ blocks, getNodes }: UseCanvasContextMenuP
7272 event . preventDefault ( )
7373 event . stopPropagation ( )
7474
75- const x = event . clientX
76- const y = event . clientY
77-
78- setPosition ( { x, y } )
75+ setPosition ( { x : event . clientX , y : event . clientY } )
7976 setSelectedBlocks ( [ ] )
8077 setActiveMenu ( 'pane' )
8178 } , [ ] )
@@ -88,31 +85,13 @@ export function useCanvasContextMenu({ blocks, getNodes }: UseCanvasContextMenuP
8885 event . preventDefault ( )
8986 event . stopPropagation ( )
9087
91- const x = event . clientX
92- const y = event . clientY
93-
9488 const selectedNodes = getNodes ( ) . filter ( ( n ) => n . selected )
9589
96- const blockInfos : ContextMenuBlockInfo [ ] = selectedNodes . map ( ( n ) => {
97- const block = blocks [ n . id ]
98- const parentId = block ?. data ?. parentId
99- const parentType = parentId ? blocks [ parentId ] ?. type : undefined
100-
101- return {
102- id : n . id ,
103- type : block ?. type || '' ,
104- enabled : block ?. enabled ?? true ,
105- horizontalHandles : block ?. horizontalHandles ?? false ,
106- parentId,
107- parentType,
108- }
109- } )
110-
111- setPosition ( { x, y } )
112- setSelectedBlocks ( blockInfos )
90+ setPosition ( { x : event . clientX , y : event . clientY } )
91+ setSelectedBlocks ( nodesToBlockInfos ( selectedNodes ) )
11392 setActiveMenu ( 'block' )
11493 } ,
115- [ blocks , getNodes ]
94+ [ getNodes , nodesToBlockInfos ]
11695 )
11796
11897 /**
0 commit comments