@@ -89,6 +89,7 @@ const Dropzone: React.FC<DropzoneProps> = (props: DropzoneProps) => {
8989 //uploading
9090 uploadConfig,
9191 fakeUpload,
92+ groupUpload,
9293 onUploadStart,
9394 onUploadFinish,
9495 //styling
@@ -326,6 +327,46 @@ const Dropzone: React.FC<DropzoneProps> = (props: DropzoneProps) => {
326327
327328 //return;
328329 let serverResponses : Array < ExtFile > = [ ] ;
330+
331+ if ( groupUpload ) {
332+ const unifiedUpload = ( method , url , arrOfFiles ) : Promise < { success : boolean , message : string , payload : object } > => {
333+ arrOfExtFilesInstances . forEach ( ( el ) => el . uploadStatus = "uploading" ) ;
334+ handleFilesChange ( sanitizeArrExtFile ( arrOfExtFilesInstances ) , true ) ;
335+ const formData = new FormData ( ) ;
336+ for ( let i = 0 ; i < arrOfFiles . length ; i ++ ) {
337+ formData . append ( 'files' , arrOfFiles [ i ] . file )
338+ }
339+ return new Promise ( ( resolve , reject ) => {
340+ let xhr = new XMLHttpRequest ( ) ;
341+ xhr . upload . onprogress = ( e ) => { arrOfExtFilesInstances . forEach ( ( el ) => { el . progress = ( e . loaded / e . total ) * 100 } ) ; handleFilesChange ( sanitizeArrExtFile ( arrOfExtFilesInstances ) , true ) } ;
342+ xhr . responseType = 'json'
343+ xhr . onload = ( ) => {
344+ if ( xhr . status >= 200 && xhr . status < 300 ) {
345+ console . log ( xhr . response ) ;
346+ console . log ( typeof xhr . response ) ;
347+ resolve ( xhr . response ) ;
348+ } else {
349+ reject ( xhr . response ) ;
350+ }
351+ } ;
352+ xhr . onerror = ( err ) => {
353+ reject ( err ) ;
354+ } ;
355+ xhr . open ( method , url ) ;
356+ xhr . send ( formData )
357+ } ) ;
358+ } ;
359+ try {
360+ let respo :{ success : boolean , message : string , payload : object } = await unifiedUpload ( "POST" , url , arrOfExtFilesInstances ) ;
361+ arrOfExtFilesInstances . forEach ( el => el . uploadStatus = "success" ) ;
362+ arrOfExtFilesInstances . forEach ( el => el . uploadMessage = respo . message ) ;
363+ } catch ( err ) {
364+ arrOfExtFilesInstances . forEach ( el => el . uploadStatus = "error" ) ;
365+ arrOfExtFilesInstances . forEach ( el => el . uploadMessage = err . message ) ;
366+ console . log ( err )
367+ }
368+ handleFilesChange ( sanitizeArrExtFile ( arrOfExtFilesInstances ) , true ) ;
369+ } else {
329370 //Uplad files one by one
330371 for ( let i = 0 ; i < arrOfExtFilesInstances . length ; i ++ ) {
331372 const currentExtFileInstance : ExtFileInstance = arrOfExtFilesInstances [ i ] ;
@@ -405,7 +446,7 @@ const Dropzone: React.FC<DropzoneProps> = (props: DropzoneProps) => {
405446 handleFilesChange ( sanitizeArrExtFile ( arrOfExtFilesInstances ) , true ) ;
406447 }
407448 }
408-
449+ }
409450 setLocalFiles ( sanitizeArrExtFile ( arrOfExtFilesInstances ) ) ;
410451
411452 // upload group finished :D
0 commit comments