11import Data from "./data.js"
22import EventHandler from "./event-handler.js"
3+ import { readFileAsync } from "./utility.js"
34
45export function init ( id ) {
56 const el = document . getElementById ( id )
67 if ( el === null ) {
78 return
89 }
9- const preventHandler = e => e . preventDefault ( )
10+ const preventHandler = e => e . preventDefault ( ) ;
1011 const body = el . querySelector ( '.upload-drop-body' ) ;
11- const upload = { el, body, preventHandler }
12+ const inputFile = el . querySelector ( '[type="file"]' ) ;
13+ const upload = { el, body, preventHandler, inputFile } ;
1214 Data . set ( id , upload )
1315
14- const inputFile = el . querySelector ( '[type="file"]' )
1516 EventHandler . on ( el , 'click' , '.btn-browser' , ( ) => {
1617 inputFile . click ( )
1718 } )
19+ EventHandler . on ( inputFile , 'change' , e => {
20+ upload . files = e . delegateTarget . files ;
21+ } ) ;
1822
1923 EventHandler . on ( document , "dragleave" , preventHandler )
2024 EventHandler . on ( document , 'drop' , preventHandler )
@@ -79,12 +83,28 @@ export function init(id) {
7983 } )
8084}
8185
86+ export async function getPreviewUrl ( id , fileName ) {
87+ let url = '' ;
88+ const upload = Data . get ( id ) ;
89+ const { files } = upload ;
90+ if ( files ) {
91+ const file = [ ...files ] . find ( v => v . name === fileName ) ;
92+ if ( file ) {
93+ const data = await readFileAsync ( file ) ;
94+ if ( data ) {
95+ url = URL . createObjectURL ( data ) ;
96+ }
97+ }
98+ }
99+ return url ;
100+ }
101+
82102export function dispose ( id ) {
83103 const upload = Data . get ( id )
84104 Data . remove ( id )
85105
86106 if ( upload ) {
87- const { el, body, preventHandler } = upload ;
107+ const { el, body, preventHandler, inputFile } = upload ;
88108
89109 EventHandler . off ( document , 'dragleave' , preventHandler )
90110 EventHandler . off ( document , 'drop' , preventHandler )
@@ -94,6 +114,7 @@ export function dispose(id) {
94114 EventHandler . off ( el , 'click' )
95115 EventHandler . off ( el , 'drop' )
96116 EventHandler . off ( el , 'paste' )
117+ EventHandler . off ( inputFile , 'change' )
97118 EventHandler . off ( body , 'dragleave' )
98119 EventHandler . off ( body , 'drop' )
99120 EventHandler . off ( body , 'dragenter' )
0 commit comments