@@ -25,7 +25,8 @@ class StorageItem extends React.Component {
25
25
const { storage } = this . props
26
26
27
27
this . state = {
28
- isOpen : ! ! storage . isOpen
28
+ isOpen : ! ! storage . isOpen ,
29
+ draggedOver : null
29
30
}
30
31
}
31
32
@@ -231,14 +232,18 @@ class StorageItem extends React.Component {
231
232
}
232
233
}
233
234
234
- handleDragEnter ( e ) {
235
- e . dataTransfer . setData ( 'defaultColor' , e . target . style . backgroundColor )
236
- e . target . style . backgroundColor = 'rgba(129, 130, 131, 0.08)'
235
+ handleDragEnter ( e , key ) {
236
+ if ( this . state . draggedOver === key ) { return }
237
+ this . setState ( {
238
+ draggedOver : key
239
+ } )
237
240
}
238
241
239
242
handleDragLeave ( e ) {
240
- e . target . style . opacity = '1'
241
- e . target . style . backgroundColor = e . dataTransfer . getData ( 'defaultColor' )
243
+ if ( this . state . draggedOver === null ) { return }
244
+ this . setState ( {
245
+ draggedOver : null
246
+ } )
242
247
}
243
248
244
249
dropNote ( storage , folder , dispatch , location , noteData ) {
@@ -263,8 +268,11 @@ class StorageItem extends React.Component {
263
268
}
264
269
265
270
handleDrop ( e , storage , folder , dispatch , location ) {
266
- e . target . style . opacity = '1'
267
- e . target . style . backgroundColor = e . dataTransfer . getData ( 'defaultColor' )
271
+ if ( this . state . draggedOver !== null ) {
272
+ this . setState ( {
273
+ draggedOver : null
274
+ } )
275
+ }
268
276
const noteData = JSON . parse ( e . dataTransfer . getData ( 'note' ) )
269
277
this . dropNote ( storage , folder , dispatch , location , noteData )
270
278
}
@@ -274,7 +282,7 @@ class StorageItem extends React.Component {
274
282
const { folderNoteMap, trashedSet } = data
275
283
const SortableStorageItemChild = SortableElement ( StorageItemChild )
276
284
const folderList = storage . folders . map ( ( folder , index ) => {
277
- let folderRegex = new RegExp ( escapeStringRegexp ( path . sep ) + 'storages' + escapeStringRegexp ( path . sep ) + storage . key + escapeStringRegexp ( path . sep ) + 'folders' + escapeStringRegexp ( path . sep ) + folder . key )
285
+ const folderRegex = new RegExp ( escapeStringRegexp ( path . sep ) + 'storages' + escapeStringRegexp ( path . sep ) + storage . key + escapeStringRegexp ( path . sep ) + 'folders' + escapeStringRegexp ( path . sep ) + folder . key )
278
286
const isActive = ! ! ( location . pathname . match ( folderRegex ) )
279
287
const noteSet = folderNoteMap . get ( storage . key + '-' + folder . key )
280
288
@@ -291,16 +299,25 @@ class StorageItem extends React.Component {
291
299
< SortableStorageItemChild
292
300
key = { folder . key }
293
301
index = { index }
294
- isActive = { isActive }
302
+ isActive = { isActive || folder . key === this . state . draggedOver }
295
303
handleButtonClick = { ( e ) => this . handleFolderButtonClick ( folder . key ) ( e ) }
296
304
handleContextMenu = { ( e ) => this . handleFolderButtonContextMenu ( e , folder ) }
297
305
folderName = { folder . name }
298
306
folderColor = { folder . color }
299
307
isFolded = { isFolded }
300
308
noteCount = { noteCount }
301
- handleDrop = { ( e ) => this . handleDrop ( e , storage , folder , dispatch , location ) }
302
- handleDragEnter = { this . handleDragEnter }
303
- handleDragLeave = { this . handleDragLeave }
309
+ handleDrop = { ( e ) => {
310
+ e . preventDefault ( )
311
+ this . handleDrop ( e , storage , folder , dispatch , location )
312
+ } }
313
+ handleDragEnter = { ( e ) => {
314
+ e . preventDefault ( )
315
+ this . handleDragEnter ( e , folder . key )
316
+ } }
317
+ handleDragLeave = { ( e ) => {
318
+ e . preventDefault ( )
319
+ this . handleDragLeave ( e , folder )
320
+ } }
304
321
/>
305
322
)
306
323
} )
0 commit comments