@@ -24,6 +24,19 @@ export const dragAndDropFeature: FeatureImplementation = {
2424 dnd : "setDndState" ,
2525 } ,
2626
27+ onTreeMount : ( tree ) => {
28+ const listener = ( ) => {
29+ tree . applySubStateUpdate ( "dnd" , null ) ;
30+ } ;
31+ tree . getDataRef < DndDataRef > ( ) . current . windowDragEndListener = listener ;
32+ window . addEventListener ( "dragend" , listener ) ;
33+ } ,
34+ onTreeUnmount : ( tree ) => {
35+ const { windowDragEndListener } = tree . getDataRef < DndDataRef > ( ) . current ;
36+ if ( ! windowDragEndListener ) return ;
37+ window . removeEventListener ( "dragend" , windowDragEndListener ) ;
38+ } ,
39+
2740 treeInstance : {
2841 getDragTarget : ( { tree } ) => {
2942 return tree . getState ( ) . dnd ?. dragTarget ?? null ;
@@ -106,7 +119,6 @@ export const dragAndDropFeature: FeatureImplementation = {
106119 const draggedItems = tree . getState ( ) . dnd ?. draggedItems ;
107120
108121 dataRef . current . lastDragCode = undefined ;
109- tree . applySubStateUpdate ( "dnd" , null ) ;
110122
111123 if ( draggedItems ) {
112124 await config . onDrop ?.( draggedItems , target ) ;
@@ -211,7 +223,6 @@ export const dragAndDropFeature: FeatureImplementation = {
211223
212224 onDragEnd : ( e : DragEvent ) => {
213225 const draggedItems = tree . getState ( ) . dnd ?. draggedItems ;
214- tree . applySubStateUpdate ( "dnd" , null ) ;
215226
216227 if ( e . dataTransfer ?. dropEffect === "none" || ! draggedItems ) {
217228 return ;
@@ -234,7 +245,6 @@ export const dragAndDropFeature: FeatureImplementation = {
234245 const draggedItems = tree . getState ( ) . dnd ?. draggedItems ;
235246
236247 dataRef . current . lastDragCode = undefined ;
237- tree . applySubStateUpdate ( "dnd" , null ) ;
238248
239249 if ( draggedItems ) {
240250 await config . onDrop ?.( draggedItems , target ) ;
0 commit comments