@@ -36,7 +36,8 @@ export interface DropZoneProps {
3636 // callback api
3737 uploadSuccessCallback ?: ( files : FileList ) => boolean ,
3838 uploadErrorCallback ?: ( files : FileList , error : string ) => boolean ,
39- addCallBack ? : ( ) => void ,
39+ uploadStartCallback ?: ( file : File ) => void ,
40+ addCallBack ?: ( ) => void ,
4041 dropzoneParams : Map < string , any >
4142}
4243
@@ -62,7 +63,7 @@ export const DropZone = React.forwardRef<HTMLFormElement, DropZoneProps>(
6263 token,
6364 url,
6465 redirect_url,
65- addCallBack = ( ) => { } ,
66+ addCallBack = ( ) => { } ,
6667 dropzone_index,
6768 accepted_files,
6869 accepted_extensions,
@@ -71,10 +72,11 @@ export const DropZone = React.forwardRef<HTMLFormElement, DropZoneProps>(
7172 label = "Terminé" ,
7273 addRemoveLinks = false ,
7374 autoProcessQueue = true ,
74- hiddenLabel = false ,
75- chunking = "0" ,
76- chunkSize = "2000000" ,
77- dropzoneParams = { }
75+ hiddenLabel = false ,
76+ chunking = "0" ,
77+ chunkSize = "2000000" ,
78+ dropzoneParams = { } ,
79+ uploadStartCallback
7880 } ,
7981 ref
8082 ) => {
@@ -89,9 +91,9 @@ export const DropZone = React.forwardRef<HTMLFormElement, DropZoneProps>(
8991 acceptedFiles : accepted_files ,
9092 maxFiles : max_files ,
9193 maxFilesize : max_file_size ,
92- chunking : chunking == "1" ?? false ,
93- chunkSize : chunkSize != "" ? Number . parseInt ( chunkSize ) : 2000000 ,
94- retryChunks : true ,
94+ chunking : chunking == "1" ?? false ,
95+ chunkSize : chunkSize != "" ? Number . parseInt ( chunkSize ) : 2000000 ,
96+ retryChunks : true ,
9597 url : url
9698 } ;
9799
@@ -136,105 +138,106 @@ export const DropZone = React.forwardRef<HTMLFormElement, DropZoneProps>(
136138 ...dropZoneParameter ,
137139 previewTemplate : ReactDOMServer . renderToString ( DropZonePreviewTemplate ) ,
138140 error : ( file : any , message : any ) => {
139- // Code from github "npm dropzone"
140- if ( file . upload && file . upload . uuid && file . previewElement ) {
141- file . previewElement . classList . add ( "dz-error" ) ;
142- if ( typeof message !== "string" && ( message . error || message . file ) ) {
143- message = message . error || message . file ;
144- } else if ( typeof message !== "string" ) {
145- // Custom error sent by api
146- var finalMessage : string [ ] = [ ] ;
147-
148- // CUSTOM : Iterate on each message
149- if ( message . message . length > 0 ) {
150- message . message . forEach ( ( currentMessage : any ) => {
151- var errorList : string [ ] = [ ] ;
152- // Iterate on each errors
153- currentMessage . errors . forEach ( ( errorMessage : string ) => {
154- errorList . push ( ( currentMessage . row ? "Ligne " + currentMessage . row + " : " : "" ) + errorMessage + " \n " ) ;
155- } )
156- // Return result message
157- finalMessage = finalMessage . concat ( errorList ) ;
158- } ) ;
159-
160- message = "<p>" + finalMessage . sort ( ) . join ( "</p><p>" ) + "</p>" ;
161-
162- } else {
163- message = "Une erreur est surevenue, veuillez vérifier le fichier importé." ;
164- }
165-
166- }
167-
168- // CUSTOM : add span data-dz-errormessage-index
169- const divFileError = $ ( "<div id='dropzone-info' class='alert alert-danger' role='alert' data-dz-errormessage-" + file . upload . uuid + ">" + message + "</div>" ) ;
170- $ ( '#dropzone-error-list' ) . append ( $ ( divFileError ) ) ;
171- }
172-
173- setIsInfoHidden ( true ) ;
174- setIsHidden ( true ) ;
141+ // Code from github "npm dropzone"
142+ if ( file . upload && file . upload . uuid && file . previewElement ) {
143+ file . previewElement . classList . add ( "dz-error" ) ;
144+ if ( typeof message !== "string" && ( message . error || message . file ) ) {
145+ message = message . error || message . file ;
146+ } else if ( typeof message !== "string" ) {
147+ // Custom error sent by api
148+ var finalMessage : string [ ] = [ ] ;
149+
150+ // CUSTOM : Iterate on each message
151+ if ( message . message . length > 0 ) {
152+ message . message . forEach ( ( currentMessage : any ) => {
153+ var errorList : string [ ] = [ ] ;
154+ // Iterate on each errors
155+ currentMessage . errors . forEach ( ( errorMessage : string ) => {
156+ errorList . push ( ( currentMessage . row ? "Ligne " + currentMessage . row + " : " : "" ) + errorMessage + " \n " ) ;
157+ } )
158+ // Return result message
159+ finalMessage = finalMessage . concat ( errorList ) ;
160+ } ) ;
161+
162+ message = "<p>" + finalMessage . sort ( ) . join ( "</p><p>" ) + "</p>" ;
163+
164+ } else {
165+ message = "Une erreur est surevenue, veuillez vérifier le fichier importé." ;
166+ }
167+
168+ }
169+
170+ // CUSTOM : add span data-dz-errormessage-index
171+ const divFileError = $ ( "<div id='dropzone-info' class='alert alert-danger' role='alert' data-dz-errormessage-" + file . upload . uuid + ">" + message + "</div>" ) ;
172+ $ ( '#dropzone-error-list' ) . append ( $ ( divFileError ) ) ;
173+ }
174+
175+ setIsInfoHidden ( true ) ;
176+ setIsHidden ( true ) ;
175177 } ,
176- success : ( file : any ) => {
177- // Hide custom progress bar when processing
178- $ ( file . previewElement ) . find ( ".custom-dz-upload" ) . hide ( ) ;
179- // Override css success mark
180- $ ( file . previewElement ) . find ( ".dz-success-mark" ) . css ( "animation" , "slide-in 3s cubic-bezier(0.77, 0, 0.175, 1)" ) ;
181- $ ( file . previewElement ) . find ( ".dz-success-mark" ) . css ( "opacity" , "1" ) ;
182-
183- if ( ! autoProcessQueue ) {
184- // ManualProcess context : Is there file left to process ?
185- if ( dropZone ! . getQueuedFiles ( ) . length > 0 ) {
186- dropZone ! . processQueue ( ) ;
187- } else {
188- setIsInfoHidden ( false ) ;
189- }
190- } else {
191- // AutoProcess context : Refresh button available
192- setIsHidden ( false ) ;
193- setIsInfoHidden ( true ) ;
194- }
195-
196- addCallBack && addCallBack ( ) ;
197- } ,
198- processing : ( file : any ) => {
199- setIsHidden ( true ) ;
200- setIsInfoHidden ( true ) ;
201- // Hide default progress bar when processing
202- $ ( file . previewElement ) . find ( ".dz-upload" ) . hide ( ) ;
203- // Show custom progress bar when processing
204- $ ( file . previewElement ) . find ( ".custom-dz-upload" ) . show ( ) ;
205- $ ( file . previewElement ) . find ( ".dz-progress" ) . css ( "height" , "inherit" ) ;
206- } ,
207- addedfiles : ( ) => {
208- if ( ! autoProcessQueue ) {
209- // Hide custom progress bar when add files
210- $ ( "#upload_form-" + dropzoneIndex + " .custom-dz-upload" ) . hide ( ) ;
211- setIsHidden ( false ) ;
212- setIsInfoHidden ( true ) ;
213- }
214- } ,
215- sending : ( file : any , _xhr , formData ) => {
216- if ( dropZoneParameter . chunking ) {
217- formData . append ( 'dzuuid' , file . upload ?. uuid ) ;
218- formData . append ( 'dztotalchunkcount' , file . upload ?. totalChunkCount ) ;
219-
220- let index = 1 ;
221- // @ts -nocheck
222- if ( file . upload ?. chunks )
223- {
224- index = file . upload . chunks [ file . upload . chunks . length - 1 ] . index
225- }
226-
227- formData . append ( 'dzchunkindex' , index . toString ( ) ) ;
228- formData . append ( 'dztotalfilesize' , file . size ) ;
229- formData . append ( 'dzchunksize' , dropZoneParameter . chunkSize . toString ( ) ) ;
230- }
231-
232- if ( dropzoneParams ) {
233- for ( const [ key , value ] of Object . entries ( dropzoneParams ) ) {
234- formData . append ( key , value )
235- }
236- }
237- }
178+ success : ( file : any ) => {
179+ // Hide custom progress bar when processing
180+ $ ( file . previewElement ) . find ( ".custom-dz-upload" ) . hide ( ) ;
181+ // Override css success mark
182+ $ ( file . previewElement ) . find ( ".dz-success-mark" ) . css ( "animation" , "slide-in 3s cubic-bezier(0.77, 0, 0.175, 1)" ) ;
183+ $ ( file . previewElement ) . find ( ".dz-success-mark" ) . css ( "opacity" , "1" ) ;
184+
185+ if ( ! autoProcessQueue ) {
186+ // ManualProcess context : Is there file left to process ?
187+ if ( dropZone ! . getQueuedFiles ( ) . length > 0 ) {
188+ dropZone ! . processQueue ( ) ;
189+ } else {
190+ setIsInfoHidden ( false ) ;
191+ }
192+ } else {
193+ // AutoProcess context : Refresh button available
194+ setIsHidden ( false ) ;
195+ setIsInfoHidden ( true ) ;
196+ }
197+
198+ addCallBack && addCallBack ( ) ;
199+ } ,
200+ processing : ( file : any ) => {
201+ uploadStartCallback && uploadStartCallback ( file ) ;
202+ setIsHidden ( true ) ;
203+ setIsInfoHidden ( true ) ;
204+ // Hide default progress bar when processing
205+ $ ( file . previewElement ) . find ( ".dz-upload" ) . hide ( ) ;
206+ // Show custom progress bar when processing
207+ $ ( file . previewElement ) . find ( ".custom-dz-upload" ) . show ( ) ;
208+ $ ( file . previewElement ) . find ( ".dz-progress" ) . css ( "height" , "inherit" ) ;
209+ } ,
210+
211+ addedfiles : ( ) => {
212+ if ( ! autoProcessQueue ) {
213+ // Hide custom progress bar when add files
214+ $ ( "#upload_form-" + dropzoneIndex + " .custom-dz-upload" ) . hide ( ) ;
215+ setIsHidden ( false ) ;
216+ setIsInfoHidden ( true ) ;
217+ }
218+ } ,
219+ sending : ( file : any , _xhr , formData ) => {
220+ if ( dropZoneParameter . chunking ) {
221+ formData . append ( 'dzuuid' , file . upload ?. uuid ) ;
222+ formData . append ( 'dztotalchunkcount' , file . upload ?. totalChunkCount ) ;
223+
224+ let index = 1 ;
225+ // @ts -nocheck
226+ if ( file . upload ?. chunks ) {
227+ index = file . upload . chunks [ file . upload . chunks . length - 1 ] . index
228+ }
229+
230+ formData . append ( 'dzchunkindex' , index . toString ( ) ) ;
231+ formData . append ( 'dztotalfilesize' , file . size ) ;
232+ formData . append ( 'dzchunksize' , dropZoneParameter . chunkSize . toString ( ) ) ;
233+ }
234+
235+ if ( dropzoneParams ) {
236+ for ( const [ key , value ] of Object . entries ( dropzoneParams ) ) {
237+ formData . append ( key , value )
238+ }
239+ }
240+ }
238241
239242 }
240243 ) ) ;
@@ -267,12 +270,12 @@ export const DropZone = React.forwardRef<HTMLFormElement, DropZoneProps>(
267270 < small > Documents au formats { acceptedExtensions } . { dropZoneParameter . maxFiles } fichier(s) maximum { dropZoneParameter . maxFilesize } Mo maximum par fichier.</ small >
268271 </ div >
269272 { /* <p class="alert alert-danger" role="alert" hidden>Connexion impossible, veuillez réssayer.</p> */ }
270- < div id = "dropzone-error-list" className = "dz-error-message" style = { { paddingTop : 0.5 + 'em' } } > </ div >
273+ < div id = "dropzone-error-list" className = "dz-error-message" style = { { paddingTop : 0.5 + 'em' } } > </ div >
271274 </ form >
272275 </ div >
273276 </ div >
274277 ) ;
275278 }
276279) ;
277280
278- export default DropZone ;
281+ export default DropZone ;
0 commit comments