@@ -165,35 +165,47 @@ class MappingInputProvider extends HTMLElement {
165
165
if ( uploadedFile != null ) {
166
166
const execUrl = this . baseUrl . toString ( ) + "api/v1/mappingExecution/" + selectedMappingId ;
167
167
const file = uploadedFile . file ;
168
-
169
168
let formData = new FormData ( ) ;
170
169
if ( file != undefined ) {
171
170
formData . append ( "document" , file ) ;
172
171
}
173
172
return fetch ( execUrl , {
174
173
method : "POST" ,
175
- body : formData
176
- } ) . then ( response => response . json ( ) )
177
- . then ( responseJson => {
174
+ body : formData ,
175
+ } ) . then ( response => {
176
+ if ( response . status !== 200 ) {
177
+ throw new Error ( "Request failed with status " + response . status ) ;
178
+ }
179
+ const contentDisposition = response . headers . get ( "content-disposition" ) || "" ;
180
+ const contentType = response . headers . get ( "content-type" ) || "" ;
181
+ return Promise . all ( [ response . blob ( ) , contentDisposition , contentType ] ) ;
182
+ } )
183
+ . then ( ( [ responseBlob , contentDisposition , contentType ] ) => {
178
184
if ( download ) {
179
- this . triggerDownload ( responseJson ) ;
185
+ this . triggerDownload ( responseBlob , contentDisposition , contentType ) ;
180
186
}
181
- } )
187
+ } ) . catch ( error => {
188
+ console . error ( "Error occured due to response other than 200:" , error ) ;
189
+ alert ( "A remote mapping error occured. Please check server logs for details." ) ;
190
+ } ) ;
182
191
}
183
192
}
184
193
}
185
194
186
195
/**
187
196
* In case if download is required triggerDownload can be used
188
197
*/
189
- triggerDownload ( response : Promise < any > ) {
198
+ triggerDownload ( response : Blob , contentDisposition : string , contentType : string ) {
190
199
const element = document . createElement ( 'a' ) ;
191
- element . setAttribute ( 'href' , 'data:text/plain;charset=utf-8,' + encodeURIComponent ( JSON . stringify ( response ) ) ) ;
192
- element . setAttribute ( 'download' , "result.json" ) ;
200
+ const filename = contentDisposition . substr ( contentDisposition . lastIndexOf ( "=" ) + 1 ) || 'result' ;
201
+ element . type = contentType ;
202
+ element . href = URL . createObjectURL ( response ) ;
203
+ element . download = filename ;
193
204
element . style . display = 'none' ;
194
205
this . shadowRoot . appendChild ( element ) ;
195
206
element . click ( ) ;
196
207
this . shadowRoot . removeChild ( element ) ;
208
+ URL . revokeObjectURL ( element . href ) ;
197
209
}
198
210
}
199
211
0 commit comments