1212import { Controller } from '@hotwired/stimulus' ;
1313
1414export default class extends Controller {
15+ readonly inputTarget : HTMLInputElement ;
16+ readonly placeholderTarget : HTMLDivElement ;
17+ readonly previewTarget : HTMLDivElement ;
18+ readonly previewClearButtonTarget : HTMLButtonElement ;
19+ readonly previewFilenameTarget : HTMLDivElement ;
20+ readonly previewImageTarget : HTMLDivElement ;
21+
1522 static targets = [ 'input' , 'placeholder' , 'preview' , 'previewClearButton' , 'previewFilename' , 'previewImage' ] ;
1623
1724 connect ( ) {
@@ -39,7 +46,7 @@ export default class extends Controller {
3946 this . _dispatchEvent ( 'dropzone:clear' ) ;
4047 }
4148
42- onInputChange ( event ) {
49+ onInputChange ( event : any ) {
4350 const file = event . target . files [ 0 ] ;
4451 if ( typeof file === 'undefined' ) {
4552 return ;
@@ -62,23 +69,23 @@ export default class extends Controller {
6269 this . _dispatchEvent ( 'dropzone:change' , file ) ;
6370 }
6471
65- _populateImagePreview ( file ) {
72+ _populateImagePreview ( file : Blob ) {
6673 if ( typeof FileReader === 'undefined' ) {
6774 // FileReader API not available, skip
6875 return ;
6976 }
7077
7178 const reader = new FileReader ( ) ;
7279
73- reader . addEventListener ( 'load' , ( event ) => {
80+ reader . addEventListener ( 'load' , ( event : any ) => {
7481 this . previewImageTarget . style . display = 'block' ;
7582 this . previewImageTarget . style . backgroundImage = 'url("' + event . target . result + '")' ;
7683 } ) ;
7784
7885 reader . readAsDataURL ( file ) ;
7986 }
8087
81- _dispatchEvent ( name : string , payload : any ) {
88+ _dispatchEvent ( name : string , payload : any = { } ) {
8289 this . element . dispatchEvent ( new CustomEvent ( name , { detail : payload } ) ) ;
8390 }
8491}
0 commit comments