@@ -93,6 +93,7 @@ export const upload = (
9393 } else if ( key === 'checks' && uploadOptions . checks ) {
9494 formData . append ( "checks" , uploadOptions . checks ) ;
9595 } else if ( uploadOptions [ key ] !== undefined ) {
96+ if ( [ "onProgress" , "signal" ] . includes ( key ) ) continue ;
9697 formData . append ( key , String ( uploadOptions [ key ] ) ) ;
9798 }
9899 }
@@ -106,15 +107,28 @@ export const upload = (
106107 } ;
107108 }
108109
109- if ( uploadOptions . signal && uploadOptions . signal ) {
110+ function onAbortHandler ( ) {
111+ xhr . abort ( ) ;
112+ // Provide the reason or fallback error
113+ // @ts -ignore for TypeScript versions lacking `signal.reason`
114+ respond ( true , uploadOptions . signal ?. reason ?? errorMessages . UPLOAD_ABORTED , callback ) ;
115+ }
116+
117+ if ( uploadOptions . signal ) {
110118 if ( uploadOptions . signal . aborted ) { // If the signal is already aborted, return immediately with the reason
119+ // @ts -ignore for TypeScript versions lacking `signal.reason`
111120 respond ( true , uploadOptions . signal . reason ?? errorMessages . UPLOAD_ABORTED , callback ) ;
112121 return ;
113122 }
123+
114124 // If the signal is not already aborted, add an event listener to abort the request when the signal is aborted
115- uploadOptions . signal . addEventListener ( "abort" , function ( ) {
116- xhr . abort ( ) ;
117- respond ( true , this . reason , callback ) ;
125+ uploadOptions . signal . addEventListener ( "abort" , onAbortHandler ) ;
126+
127+ // On XHR completion (success, fail, or abort), remove just this abort handler
128+ xhr . addEventListener ( "loadend" , ( ) => {
129+ if ( uploadOptions . signal ) {
130+ uploadOptions . signal . removeEventListener ( "abort" , onAbortHandler ) ;
131+ }
118132 } ) ;
119133 }
120134
0 commit comments