@@ -22,6 +22,8 @@ export default class extends Controller {
2222 initialize ( ) {
2323 this . clear = this . clear . bind ( this ) ;
2424 this . onInputChange = this . onInputChange . bind ( this ) ;
25+ this . onDragEnter = this . onDragEnter . bind ( this ) ;
26+ this . onDragLeave = this . onDragLeave . bind ( this ) ;
2527 }
2628
2729 connect ( ) {
@@ -34,12 +36,20 @@ export default class extends Controller {
3436 // Listen on input change and display preview
3537 this . inputTarget . addEventListener ( 'change' , this . onInputChange ) ;
3638
39+ // Add dragenter event listener
40+ this . element . addEventListener ( 'dragenter' , this . onDragEnter ) ;
41+
42+ // Add dragleave event listener
43+ this . element . addEventListener ( 'dragleave' , this . onDragLeave ) ;
44+
3745 this . dispatchEvent ( 'connect' ) ;
3846 }
3947
4048 disconnect ( ) {
4149 this . previewClearButtonTarget . removeEventListener ( 'click' , this . clear ) ;
4250 this . inputTarget . removeEventListener ( 'change' , this . onInputChange ) ;
51+ this . element . removeEventListener ( 'dragenter' , this . onDragEnter ) ;
52+ this . element . removeEventListener ( 'dragleave' , this . onDragLeave ) ;
4353 }
4454
4555 clear ( ) {
@@ -93,6 +103,23 @@ export default class extends Controller {
93103 reader . readAsDataURL ( file ) ;
94104 }
95105
106+ onDragEnter ( ) {
107+ this . inputTarget . style . display = 'block' ;
108+ this . placeholderTarget . style . display = 'block' ;
109+ this . previewTarget . style . display = 'none' ;
110+ }
111+
112+ onDragLeave ( event : any ) {
113+ event . preventDefault ( ) ;
114+
115+ // Check if we really leave the main drag area
116+ if ( ! this . element . contains ( event . relatedTarget as Node ) ) {
117+ this . inputTarget . style . display = 'none' ;
118+ this . placeholderTarget . style . display = 'none' ;
119+ this . previewTarget . style . display = 'block' ;
120+ }
121+ }
122+
96123 private dispatchEvent ( name : string , payload : any = { } ) {
97124 this . dispatch ( name , { detail : payload , prefix : 'dropzone' } ) ;
98125 }
0 commit comments