@@ -35,7 +35,7 @@ export const useFileDrag = (file: Nullable<FileData>) => {
35
35
// We force non-null type below because by convention, if drag & drop for
36
36
// this file was possible, it must have been non-null.
37
37
draggedFile : fileRef . current ! ,
38
- selection : selectSelectedFiles ( reduxState ) ,
38
+ selectedFiles : selectSelectedFiles ( reduxState ) ,
39
39
} ;
40
40
} , [ store , fileRef ] ) ;
41
41
@@ -104,7 +104,17 @@ export const useFileDrag = (file: Nullable<FileData>) => {
104
104
return { dndIsDragging, drag } ;
105
105
} ;
106
106
107
- export const useFileDrop = ( file : Nullable < FileData > , allowDrop : boolean = true ) => {
107
+ interface UseFileDropParams {
108
+ file : Nullable < FileData > ;
109
+ forceDisableDrop ?: boolean ;
110
+ includeChildrenDrops ?: boolean ;
111
+ }
112
+
113
+ export const useFileDrop = ( {
114
+ file,
115
+ forceDisableDrop,
116
+ includeChildrenDrops,
117
+ } : UseFileDropParams ) => {
108
118
const onDrop = useCallback (
109
119
( item : ChonkyDndFileEntryItem , monitor ) => {
110
120
if ( ! monitor . canDrop ( ) ) return ;
@@ -118,23 +128,23 @@ export const useFileDrop = (file: Nullable<FileData>, allowDrop: boolean = true)
118
128
const canDrop = useCallback (
119
129
( item : ChonkyDndFileEntryItem , monitor : DropTargetMonitor ) => {
120
130
if (
121
- ! allowDrop ||
122
- ! monitor . isOver ( { shallow : true } ) ||
123
- ! FileHelper . isDroppable ( file )
131
+ forceDisableDrop ||
132
+ ! FileHelper . isDroppable ( file ) ||
133
+ ( ! monitor . isOver ( { shallow : true } ) && ! includeChildrenDrops )
124
134
) {
125
135
return false ;
126
136
}
127
- const { source, draggedFile, selection } = item . payload ;
137
+ const { source, draggedFile, selectedFiles } = item . payload ;
128
138
129
- const filesToCheck : FileData [ ] = [ draggedFile , ...selection ] ;
139
+ const filesToCheck : FileData [ ] = [ draggedFile , ...selectedFiles ] ;
130
140
if ( source ) filesToCheck . push ( source ) ;
131
141
for ( const currFile of filesToCheck ) {
132
142
if ( file . id === currFile . id ) return false ;
133
143
}
134
144
135
145
return true ;
136
146
} ,
137
- [ allowDrop , file ]
147
+ [ forceDisableDrop , file , includeChildrenDrops ]
138
148
) ;
139
149
const collect = useCallback (
140
150
( monitor ) => ( {
@@ -158,7 +168,7 @@ export const useFileDrop = (file: Nullable<FileData>, allowDrop: boolean = true)
158
168
159
169
export const useFileEntryDnD = ( file : Nullable < FileData > ) => {
160
170
const { dndIsDragging, drag } = useFileDrag ( file ) ;
161
- const { dndIsOver, dndCanDrop, drop } = useFileDrop ( file ) ;
171
+ const { dndIsOver, dndCanDrop, drop } = useFileDrop ( { file } ) ;
162
172
const dndState = useMemo < DndEntryState > (
163
173
( ) => ( {
164
174
dndIsDragging,
0 commit comments