@@ -58,13 +58,21 @@ export default class PgTreeItem extends HTMLElement {
5858 this . $items . addEventListener ( 'down' , this . #handleDown. bind ( this ) ) ;
5959 this . $items . addEventListener ( 'itemdragstart' , this . #handleItemDragStart. bind ( this ) ) ;
6060 this . $items . addEventListener ( 'itemdragend' , this . #handleItemDragEnd. bind ( this ) ) ;
61- // Drag
61+ this . $items . addEventListener ( 'itemdropenter' , this . #handleItemDropEnter. bind ( this ) ) ;
62+ // Drop
6263 this . $dropabove . addEventListener ( 'dragenter' , this . #handleDropAboveEnter. bind ( this ) ) ;
6364 this . $dropabove . addEventListener ( 'dragleave' , this . #handleDropAboveLeave. bind ( this ) ) ;
65+ this . $dropabove . addEventListener ( 'dragover' , this . #handleDropOver. bind ( this ) ) ;
66+ this . $dropabove . addEventListener ( 'drop' , this . #handleDrop. bind ( this ) ) ;
6467 this . $dropon . addEventListener ( 'dragenter' , this . #handleDropOnEnter. bind ( this ) ) ;
6568 this . $dropon . addEventListener ( 'dragleave' , this . #handleDropOnLeave. bind ( this ) ) ;
69+ this . $dropon . addEventListener ( 'dragover' , this . #handleDropOver. bind ( this ) ) ;
70+ this . $dropon . addEventListener ( 'drop' , this . #handleDrop. bind ( this ) ) ;
6671 this . $dropbelow . addEventListener ( 'dragenter' , this . #handleDropBelowEnter. bind ( this ) ) ;
6772 this . $dropbelow . addEventListener ( 'dragleave' , this . #handleDropBelowLeave. bind ( this ) ) ;
73+ this . $dropbelow . addEventListener ( 'dragover' , this . #handleDropOver. bind ( this ) ) ;
74+ this . $dropbelow . addEventListener ( 'drop' , this . #handleDrop. bind ( this ) ) ;
75+
6876 forEach ( {
6977 container : this . $actions ,
7078 items : this . actions ,
@@ -219,6 +227,10 @@ export default class PgTreeItem extends HTMLElement {
219227 e . detail . indexes . unshift ( this . index ) ;
220228 }
221229
230+ #handleItemDropEnter( e : any ) {
231+ e . detail . indexes . unshift ( this . index ) ;
232+ }
233+
222234 #handleContextMenu( e ) {
223235 e . preventDefault ( ) ;
224236 }
@@ -344,7 +356,7 @@ export default class PgTreeItem extends HTMLElement {
344356 canvas . height = 40 * size ;
345357 canvas . style . width = `${ canvas . width / size } px` ;
346358 // overlap cursor offset
347- const offsetInline = 10 ;
359+ const offsetInline = 20 ;
348360 const fontSize = 16 ;
349361 const paddingBlock = 6 ;
350362 const paddingInline = 6 ;
@@ -394,7 +406,6 @@ export default class PgTreeItem extends HTMLElement {
394406 this . #canvas. remove ( ) ;
395407 }
396408
397-
398409 #handleItemDragStart( e : any ) {
399410 e . detail . indexes . unshift ( this . index ) ;
400411 }
@@ -405,7 +416,20 @@ export default class PgTreeItem extends HTMLElement {
405416
406417 #handleDropAboveEnter( e : any ) {
407418 console . log ( 'darg above' ) ;
419+ this . dispatchEvent ( new CustomEvent ( 'itemdropenter' , {
420+ bubbles : true ,
421+ composed : true ,
422+ detail : {
423+ indexes : [ this . index ] ,
424+ callback : ( isValid ) => {
425+ console . log ( 'is valid' , isValid ) ;
426+ e . dataTransfer . dropEffect = 'move' ;
427+ }
428+ }
429+ } ) ) ;
408430 e . target . classList . toggle ( 'drop' , true ) ;
431+ e . dataTransfer . setData ( "text" , 'test' ) ;
432+ e . dataTransfer . effectAllowed = 'move' ;
409433 }
410434
411435 #handleDropAboveLeave( e : any ) {
@@ -414,7 +438,18 @@ export default class PgTreeItem extends HTMLElement {
414438 }
415439
416440 #handleDropOnEnter( e : any ) {
417- console . log ( 'darg above' ) ;
441+ console . log ( 'darg on' ) ;
442+ this . dispatchEvent ( new CustomEvent ( 'itemdropenter' , {
443+ bubbles : true ,
444+ composed : true ,
445+ detail : {
446+ indexes : [ this . index ] ,
447+ callback : ( isValid ) => {
448+ console . log ( 'is valid' , isValid ) ;
449+ e . dataTransfer . dropEffect = 'move' ;
450+ }
451+ }
452+ } ) ) ;
418453 e . target . classList . toggle ( 'drop' , true ) ;
419454 }
420455
@@ -424,7 +459,20 @@ export default class PgTreeItem extends HTMLElement {
424459 }
425460
426461 #handleDropBelowEnter( e : any ) {
427- console . log ( 'darg above' ) ;
462+ console . log ( 'darg below' ) ;
463+ this . dispatchEvent ( new CustomEvent ( 'itemdropenter' , {
464+ bubbles : true ,
465+ composed : true ,
466+ detail : {
467+ indexes : [ this . index ] ,
468+ callback : ( isValid , setDropEffect ) => {
469+ console . log ( 'is valid' , isValid ) ;
470+ if ( isValid ) {
471+ e . dataTransfer . dropEffect = 'move' ;
472+ }
473+ }
474+ }
475+ } ) ) ;
428476 e . target . classList . toggle ( 'drop' , true ) ;
429477 }
430478
@@ -433,4 +481,13 @@ export default class PgTreeItem extends HTMLElement {
433481 e . target . classList . toggle ( 'drop' , false ) ;
434482 }
435483
484+ #handleDropOver( e : any ) {
485+ e . preventDefault ( ) ;
486+ e . dataTransfer . dropEffect = 'move' ;
487+ }
488+
489+ #handleDrop( e : any ) {
490+ console . log ( 'dropped!!!' ) ;
491+ }
492+
436493}
0 commit comments