@@ -44,25 +44,31 @@ export class BlockController {
4444
4545 event . stopPropagation ( ) ;
4646
47- const selectedBlocksComponents = block . context . graph . rootStore . blocksList . $selectedBlocks . value . map ( ( block ) =>
47+ const draggingElements = block . context . graph . rootStore . blocksList . $selectedBlocks . value . map ( ( block ) =>
4848 block . getViewComponent ( )
4949 ) ;
5050
51- if ( ! selectedBlocksComponents . includes ( block ) ) {
51+ // Prevent drag if user selected multiple blocks but start drag from non-selected block
52+ if ( draggingElements . length && ! draggingElements . includes ( block ) ) {
5253 return ;
5354 }
5455
56+ // Add current block to list of dragging elements
57+ if ( ! draggingElements . includes ( block ) ) {
58+ draggingElements . push ( block ) ;
59+ }
60+
5561 dragListener ( block . context . ownerDocument )
5662 . on ( EVENTS . DRAG_START , ( _event : MouseEvent ) => {
5763 block . context . graph . getGraphLayer ( ) . captureEvents ( block ) ;
58- dispatchEvents ( selectedBlocksComponents , createCustomDragEvent ( EVENTS . DRAG_START , _event ) ) ;
64+ dispatchEvents ( draggingElements , createCustomDragEvent ( EVENTS . DRAG_START , _event ) ) ;
5965 } )
6066 . on ( EVENTS . DRAG_UPDATE , ( _event : MouseEvent ) => {
61- dispatchEvents ( selectedBlocksComponents , createCustomDragEvent ( EVENTS . DRAG_UPDATE , _event ) ) ;
67+ dispatchEvents ( draggingElements , createCustomDragEvent ( EVENTS . DRAG_UPDATE , _event ) ) ;
6268 } )
6369 . on ( EVENTS . DRAG_END , ( _event : MouseEvent ) => {
6470 block . context . graph . getGraphLayer ( ) . releaseCapture ( ) ;
65- dispatchEvents ( selectedBlocksComponents , createCustomDragEvent ( EVENTS . DRAG_END , _event ) ) ;
71+ dispatchEvents ( draggingElements , createCustomDragEvent ( EVENTS . DRAG_END , _event ) ) ;
6672 } ) ;
6773 } ) ;
6874 }
0 commit comments