@@ -7,7 +7,7 @@ export function init(id, options) {
77 return
88 }
99
10- const { invoke, method, allowDrag } = options
10+ const { invoke, method, allowDrag, triggerDragEnd } = options
1111 EventHandler . on ( el , 'keydown' , '.tree-root' , e => {
1212 if ( e . key === 'ArrowDown' || e . key === 'ArrowUp' || e . key === 'ArrowLeft' || e . key === 'ArrowRight' ) {
1313 const v = el . getAttribute ( 'data-bb-keyboard' ) ;
@@ -32,60 +32,68 @@ export function init(id, options) {
3232 resetTreeViewRow ( el ) ;
3333
3434 EventHandler . on ( el , 'dragstart' , e => {
35- console . log ( e . target ) ;
3635 el . targetItem = e . target ;
3736 el . targetItem . classList . add ( 'drag-item' ) ;
37+
3838 e . dataTransfer . setData ( 'text/plain' , '' ) ;
3939 e . dataTransfer . effectAllowed = 'move' ;
4040 el . classList . add ( 'dragging' ) ;
41- console . log ( 'Drag start event triggered' ) ;
4241 } ) ;
4342
4443 EventHandler . on ( el , 'dragend' , e => {
4544 el . classList . remove ( 'dragging' ) ;
4645 el . targetItem . classList . remove ( 'drag-item' ) ;
46+
47+ const item = el . targetItem . closest ( '.tree-content' ) ;
48+ const originalIndex = parseInt ( item . getAttribute ( "data-bb-tree-view-index" ) ) ;
49+
50+ let isChildren = false ;
51+ let targetItem = null ;
4752 const overItem = el . querySelector ( '.tree-drag-inside-over' ) ;
4853 if ( overItem ) {
4954 overItem . classList . remove ( 'tree-drag-inside-over' ) ;
55+ isChildren = true ;
56+ targetItem = overItem . closest ( '.tree-content' ) ;
5057 }
51- const belowItem = el . querySelector ( '.tree-node-placeholder' ) ;
52- if ( belowItem ) {
53- belowItem . remove ( ) ;
58+ else {
59+ const belowItem = el . querySelector ( '.tree-node-placeholder' ) ;
60+ targetItem = belowItem . closest ( '.tree-content' ) ;
61+ if ( belowItem ) {
62+ belowItem . remove ( ) ;
63+ }
5464 }
5565 delete el . targetItem ;
56- console . log ( 'Drag end event triggered' ) ;
66+
67+ const currentIndex = parseInt ( targetItem . getAttribute ( "data-bb-tree-view-index" ) ) ;
68+ invoke . invokeMethodAsync ( triggerDragEnd , originalIndex , currentIndex , isChildren ) ;
5769 } ) ;
5870
5971 EventHandler . on ( el , 'dragenter' , '.tree-drop-child-inside' , e => {
6072 e . preventDefault ( ) ;
6173
6274 const item = e . delegateTarget ;
6375 item . classList . add ( 'tree-drag-inside-over' ) ;
64- console . log ( 'inside Drag enter event triggered' ) ;
6576 } ) ;
6677 EventHandler . on ( el , 'dragenter' , '.tree-drop-child-below' , e => {
6778 e . preventDefault ( )
6879
6980 const item = e . delegateTarget ;
7081 const placeholder = createPlaceholder ( ) ;
7182 item . appendChild ( placeholder ) ;
72- console . log ( 'below Drag enter event triggered' ) ;
7383 } ) ;
7484
7585 EventHandler . on ( el , 'dragleave' , '.tree-drop-child-inside' , e => {
7686 e . preventDefault ( )
7787
7888 const item = e . delegateTarget ;
7989 item . classList . remove ( 'tree-drag-inside-over' ) ;
80- console . log ( 'inside Drag leave event triggered' ) ;
8190 } ) ;
8291 EventHandler . on ( el , 'dragleave' , '.tree-drop-child-below' , e => {
8392 e . preventDefault ( )
8493
8594 const item = e . delegateTarget ;
8695 item . classList . remove ( 'tree-drag-below-over' ) ;
8796 item . innerHTML = "" ;
88- console . log ( 'below Drag leave event triggered' ) ;
8997 } ) ;
9098
9199 EventHandler . on ( el , 'dragover' , '.tree-drop-zone' , e => {
@@ -100,8 +108,11 @@ const resetTreeViewRow = el => {
100108 const node = row . querySelector ( '.tree-node' ) ;
101109 if ( node ) {
102110 node . setAttribute ( 'draggable' , 'true' ) ;
103- const dropzone = createDropzone ( ) ;
104- insertBefore ( node , dropzone ) ;
111+ const prevElement = node . previousElementSibling ;
112+ if ( prevElement && ! prevElement . classList . contains ( 'tree-drop-zone' ) ) {
113+ const dropzone = createDropzone ( ) ;
114+ insertBefore ( node , dropzone ) ;
115+ }
105116 }
106117 } ) ;
107118}
@@ -223,5 +234,10 @@ export function dispose(id) {
223234
224235 if ( el ) {
225236 EventHandler . off ( el , 'keyup' , '.tree-root' ) ;
237+ EventHandler . off ( el , 'dragstart' ) ;
238+ EventHandler . off ( el , 'dragend' ) ;
239+ EventHandler . off ( el , 'dragenter' ) ;
240+ EventHandler . off ( el , 'dragleave' ) ;
241+ EventHandler . off ( el , 'dragover' ) ;
226242 }
227243}
0 commit comments