@commercetools-frontend-extensions/import-resources-modal 1.0.1 → 1.0.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (17) hide show
  1. package/dist/{active-drag-drop-area-be3680ab.cjs.prod.js → active-drag-drop-area-7c0fb409.cjs.prod.js} +1 -1
  2. package/dist/{active-drag-drop-area-fae899bd.cjs.dev.js → active-drag-drop-area-abad3c41.cjs.dev.js} +1 -1
  3. package/dist/{active-drag-drop-area-06cef014.esm.js → active-drag-drop-area-bf8b7a30.esm.js} +1 -1
  4. package/dist/commercetools-frontend-extensions-import-resources-modal.cjs.dev.js +1 -1
  5. package/dist/commercetools-frontend-extensions-import-resources-modal.cjs.prod.js +1 -1
  6. package/dist/commercetools-frontend-extensions-import-resources-modal.esm.js +1 -1
  7. package/dist/declarations/src/@types/file-upload.d.ts +2 -0
  8. package/dist/{enabled-drop-area-32e0dc61.cjs.prod.js → enabled-drop-area-3ea78d44.cjs.prod.js} +1 -1
  9. package/dist/{enabled-drop-area-69507fae.esm.js → enabled-drop-area-5e43f909.esm.js} +1 -1
  10. package/dist/{enabled-drop-area-56d860b6.cjs.dev.js → enabled-drop-area-db0fea7b.cjs.dev.js} +1 -1
  11. package/dist/{file-dropped-area-e856a71f.cjs.prod.js → file-dropped-area-20f1d402.cjs.prod.js} +1 -1
  12. package/dist/{file-dropped-area-6f365e02.esm.js → file-dropped-area-2a6284e9.esm.js} +1 -1
  13. package/dist/{file-dropped-area-6acf82c0.cjs.dev.js → file-dropped-area-c728d70e.cjs.dev.js} +1 -1
  14. package/dist/{index-a4665b30.esm.js → index-3765b5c8.esm.js} +85 -45
  15. package/dist/{index-bb7f975c.cjs.dev.js → index-6e529a62.cjs.dev.js} +83 -43
  16. package/dist/{index-d79bbd8e.cjs.prod.js → index-b5df19c8.cjs.prod.js} +83 -43
  17. package/package.json +1 -1
@@ -1,6 +1,6 @@
1
1
  'use strict';
2
2
 
3
- var dist_commercetoolsFrontendExtensionsImportResourcesModal = require('./index-d79bbd8e.cjs.prod.js');
3
+ var dist_commercetoolsFrontendExtensionsImportResourcesModal = require('./index-b5df19c8.cjs.prod.js');
4
4
  var jsxRuntime = require('@emotion/react/jsx-runtime');
5
5
  require('@babel/runtime-corejs3/core-js-stable/object/keys');
6
6
  require('@babel/runtime-corejs3/core-js-stable/object/get-own-property-symbols');
@@ -1,6 +1,6 @@
1
1
  'use strict';
2
2
 
3
- var dist_commercetoolsFrontendExtensionsImportResourcesModal = require('./index-bb7f975c.cjs.dev.js');
3
+ var dist_commercetoolsFrontendExtensionsImportResourcesModal = require('./index-6e529a62.cjs.dev.js');
4
4
  var jsxRuntime = require('@emotion/react/jsx-runtime');
5
5
  require('@babel/runtime-corejs3/core-js-stable/object/keys');
6
6
  require('@babel/runtime-corejs3/core-js-stable/object/get-own-property-symbols');
@@ -1,4 +1,4 @@
1
- import { F as FileDropped, E as EnabledDropArea } from './index-a4665b30.esm.js';
1
+ import { F as FileDropped, E as EnabledDropArea } from './index-3765b5c8.esm.js';
2
2
  import { jsx } from '@emotion/react/jsx-runtime';
3
3
  import '@babel/runtime-corejs3/core-js-stable/object/keys';
4
4
  import '@babel/runtime-corejs3/core-js-stable/object/get-own-property-symbols';
@@ -2,7 +2,7 @@
2
2
 
3
3
  Object.defineProperty(exports, '__esModule', { value: true });
4
4
 
5
- var dist_commercetoolsFrontendExtensionsImportResourcesModal = require('./index-bb7f975c.cjs.dev.js');
5
+ var dist_commercetoolsFrontendExtensionsImportResourcesModal = require('./index-6e529a62.cjs.dev.js');
6
6
  require('@babel/runtime-corejs3/core-js-stable/object/keys');
7
7
  require('@babel/runtime-corejs3/core-js-stable/object/get-own-property-symbols');
8
8
  require('@babel/runtime-corejs3/core-js-stable/instance/filter');
@@ -2,7 +2,7 @@
2
2
 
3
3
  Object.defineProperty(exports, '__esModule', { value: true });
4
4
 
5
- var dist_commercetoolsFrontendExtensionsImportResourcesModal = require('./index-d79bbd8e.cjs.prod.js');
5
+ var dist_commercetoolsFrontendExtensionsImportResourcesModal = require('./index-b5df19c8.cjs.prod.js');
6
6
  require('@babel/runtime-corejs3/core-js-stable/object/keys');
7
7
  require('@babel/runtime-corejs3/core-js-stable/object/get-own-property-symbols');
8
8
  require('@babel/runtime-corejs3/core-js-stable/instance/filter');
@@ -1,4 +1,4 @@
1
- export { I as default } from './index-a4665b30.esm.js';
1
+ export { I as default } from './index-3765b5c8.esm.js';
2
2
  import '@babel/runtime-corejs3/core-js-stable/object/keys';
3
3
  import '@babel/runtime-corejs3/core-js-stable/object/get-own-property-symbols';
4
4
  import '@babel/runtime-corejs3/core-js-stable/instance/filter';
@@ -40,6 +40,8 @@ export interface FileUploadRequestParameters {
40
40
  resourceType: ResourceType;
41
41
  file: File;
42
42
  abortSignal?: AbortSignal;
43
+ onSuccess: (data: FileUploadResponse) => void;
44
+ onProgress: (progress: number) => void;
43
45
  }
44
46
  export interface ProcessUploadedFileRequestParameters {
45
47
  projectKey: string;
@@ -11,7 +11,7 @@ var _Object$defineProperty = require('@babel/runtime-corejs3/core-js-stable/obje
11
11
  var _defineProperty = require('@babel/runtime-corejs3/helpers/defineProperty');
12
12
  require('react');
13
13
  var uiKit = require('@commercetools-frontend/ui-kit');
14
- var dist_commercetoolsFrontendExtensionsImportResourcesModal = require('./index-d79bbd8e.cjs.prod.js');
14
+ var dist_commercetoolsFrontendExtensionsImportResourcesModal = require('./index-b5df19c8.cjs.prod.js');
15
15
  var jsxRuntime = require('@emotion/react/jsx-runtime');
16
16
  require('react-intl');
17
17
  require('@commercetools-frontend/application-shell-connectors');
@@ -9,7 +9,7 @@ import _Object$defineProperty from '@babel/runtime-corejs3/core-js-stable/object
9
9
  import _defineProperty from '@babel/runtime-corejs3/helpers/esm/defineProperty';
10
10
  import 'react';
11
11
  import { Spacings, Text, Link } from '@commercetools-frontend/ui-kit';
12
- import { m as messages } from './index-a4665b30.esm.js';
12
+ import { m as messages } from './index-3765b5c8.esm.js';
13
13
  import { jsxs, jsx } from '@emotion/react/jsx-runtime';
14
14
  import 'react-intl';
15
15
  import '@commercetools-frontend/application-shell-connectors';
@@ -11,7 +11,7 @@ var _Object$defineProperty = require('@babel/runtime-corejs3/core-js-stable/obje
11
11
  var _defineProperty = require('@babel/runtime-corejs3/helpers/defineProperty');
12
12
  require('react');
13
13
  var uiKit = require('@commercetools-frontend/ui-kit');
14
- var dist_commercetoolsFrontendExtensionsImportResourcesModal = require('./index-bb7f975c.cjs.dev.js');
14
+ var dist_commercetoolsFrontendExtensionsImportResourcesModal = require('./index-6e529a62.cjs.dev.js');
15
15
  var jsxRuntime = require('@emotion/react/jsx-runtime');
16
16
  require('react-intl');
17
17
  require('@commercetools-frontend/application-shell-connectors');
@@ -2,7 +2,7 @@
2
2
 
3
3
  var reactIntl = require('react-intl');
4
4
  var uiKit = require('@commercetools-frontend/ui-kit');
5
- var dist_commercetoolsFrontendExtensionsImportResourcesModal = require('./index-d79bbd8e.cjs.prod.js');
5
+ var dist_commercetoolsFrontendExtensionsImportResourcesModal = require('./index-b5df19c8.cjs.prod.js');
6
6
  require('react');
7
7
  require('@commercetools-frontend/application-shell-connectors');
8
8
  require('@commercetools-frontend/sdk');
@@ -1,6 +1,6 @@
1
1
  import { useIntl } from 'react-intl';
2
2
  import { Spacings, PaperclipIcon, Constraints, Text, SecondaryButton } from '@commercetools-frontend/ui-kit';
3
- import { u as useImportResourcesContext, m as messages } from './index-a4665b30.esm.js';
3
+ import { u as useImportResourcesContext, m as messages } from './index-3765b5c8.esm.js';
4
4
  import 'react';
5
5
  import '@commercetools-frontend/application-shell-connectors';
6
6
  import '@commercetools-frontend/sdk';
@@ -2,7 +2,7 @@
2
2
 
3
3
  var reactIntl = require('react-intl');
4
4
  var uiKit = require('@commercetools-frontend/ui-kit');
5
- var dist_commercetoolsFrontendExtensionsImportResourcesModal = require('./index-bb7f975c.cjs.dev.js');
5
+ var dist_commercetoolsFrontendExtensionsImportResourcesModal = require('./index-6e529a62.cjs.dev.js');
6
6
  require('react');
7
7
  require('@commercetools-frontend/application-shell-connectors');
8
8
  require('@commercetools-frontend/sdk');
@@ -8,7 +8,7 @@ import _Object$defineProperties from '@babel/runtime-corejs3/core-js-stable/obje
8
8
  import _Object$defineProperty from '@babel/runtime-corejs3/core-js-stable/object/define-property';
9
9
  import _defineProperty from '@babel/runtime-corejs3/helpers/esm/defineProperty';
10
10
  import { defineMessages, useIntl, FormattedMessage, IntlProvider } from 'react-intl';
11
- import { useApplicationContext } from '@commercetools-frontend/application-shell-connectors';
11
+ import { oidcStorage, useApplicationContext } from '@commercetools-frontend/application-shell-connectors';
12
12
  import _slicedToArray from '@babel/runtime-corejs3/helpers/esm/slicedToArray';
13
13
  import React, { useContext, lazy, useState, useEffect } from 'react';
14
14
  import { actions, useAsyncDispatch } from '@commercetools-frontend/sdk';
@@ -29,7 +29,7 @@ import _someInstanceProperty from '@babel/runtime-corejs3/core-js-stable/instanc
29
29
  import '@babel/runtime-corejs3/core-js-stable/instance/starts-with';
30
30
  import 'querystring';
31
31
  import 'ramda';
32
- import { executeHttpClientRequest, buildApiUrl } from '@commercetools-frontend/application-shell';
32
+ import { createHttpClientOptions, buildApiUrl } from '@commercetools-frontend/application-shell';
33
33
  import _Reflect$construct from '@babel/runtime-corejs3/core-js-stable/reflect/construct';
34
34
  import _createClass from '@babel/runtime-corejs3/helpers/esm/createClass';
35
35
  import _classCallCheck from '@babel/runtime-corejs3/helpers/esm/classCallCheck';
@@ -298,49 +298,69 @@ let HttpError = /*#__PURE__*/function (_Error) {
298
298
  }( /*#__PURE__*/_wrapNativeSuper(Error));
299
299
 
300
300
  function ownKeys$e(e, r) { var t = _Object$keys(e); if (_Object$getOwnPropertySymbols) { var o = _Object$getOwnPropertySymbols(e); r && (o = _filterInstanceProperty(o).call(o, function (r) { return _Object$getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
301
- function _objectSpread$e(e) { for (var r = 1; r < arguments.length; r++) { var _context2, _context3; var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? _forEachInstanceProperty(_context2 = ownKeys$e(Object(t), !0)).call(_context2, function (r) { _defineProperty(e, r, t[r]); }) : _Object$getOwnPropertyDescriptors ? _Object$defineProperties(e, _Object$getOwnPropertyDescriptors(t)) : _forEachInstanceProperty(_context3 = ownKeys$e(Object(t))).call(_context3, function (r) { _Object$defineProperty(e, r, _Object$getOwnPropertyDescriptor(t, r)); }); } return e; }
301
+ function _objectSpread$e(e) { for (var r = 1; r < arguments.length; r++) { var _context3, _context4; var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? _forEachInstanceProperty(_context3 = ownKeys$e(Object(t), !0)).call(_context3, function (r) { _defineProperty(e, r, t[r]); }) : _Object$getOwnPropertyDescriptors ? _Object$defineProperties(e, _Object$getOwnPropertyDescriptors(t)) : _forEachInstanceProperty(_context4 = ownKeys$e(Object(t))).call(_context4, function (r) { _Object$defineProperty(e, r, _Object$getOwnPropertyDescriptor(t, r)); }); } return e; }
302
302
  const addProxyPrefixToUrl = (uri, proxy) => {
303
303
  var _context;
304
304
  return proxy ? _concatInstanceProperty(_context = "/proxy/".concat(proxy)).call(_context, uri) : uri;
305
305
  };
306
- const fetcher = async _ref => {
307
- let url = _ref.url,
308
- payload = _ref.payload,
309
- config = _ref.config;
310
- const data = await executeHttpClientRequest(async options => {
311
- const res = await fetch(buildApiUrl(addProxyPrefixToUrl(url, config === null || config === void 0 ? void 0 : config.proxy)), _objectSpread$e(_objectSpread$e({}, options), {}, {
312
- method: config === null || config === void 0 ? void 0 : config.method,
313
- body: payload,
314
- signal: config === null || config === void 0 ? void 0 : config.abortSignal
315
- }));
316
- if (!res.ok) {
317
- const errorData = await res.json();
318
- throw new HttpError(res.status, res.statusText, errorData);
319
- }
320
- const data = res.json();
321
- return {
322
- data,
323
- statusCode: res.status,
324
- getHeader: key => res.headers.get(key)
325
- };
326
- }, {
306
+ const fetchUsingXhr = _ref2 => {
307
+ let url = _ref2.url,
308
+ payload = _ref2.payload,
309
+ config = _ref2.config,
310
+ onProgress = _ref2.onProgress,
311
+ onSuccess = _ref2.onSuccess;
312
+ const options = createHttpClientOptions({
327
313
  headers: _objectSpread$e({
328
314
  'Content-Type': 'application/json'
329
315
  }, config === null || config === void 0 ? void 0 : config.headers)
330
316
  });
331
- return data;
317
+ const xhr = new XMLHttpRequest();
318
+ xhr.open(config === null || config === void 0 ? void 0 : config.method, buildApiUrl(addProxyPrefixToUrl(url, config === null || config === void 0 ? void 0 : config.proxy)), true);
319
+ if (options.headers) {
320
+ var _context2;
321
+ _forEachInstanceProperty(_context2 = _Object$keys(options.headers)).call(_context2, key => {
322
+ xhr.setRequestHeader(key, options.headers[key]);
323
+ });
324
+ }
325
+ xhr.upload.onprogress = function (event) {
326
+ if (event.lengthComputable) {
327
+ const percentComplete = event.loaded / event.total * 100;
328
+ onProgress(percentComplete);
329
+ }
330
+ };
331
+ xhr.onload = function () {
332
+ const data = JSON.parse(xhr.responseText);
333
+ // Code copied from `executeHttpClientRequest` to replicate the same behavior
334
+ const refreshedSessionToken = xhr.getResponseHeader('x-refreshed-session-token');
335
+ if (refreshedSessionToken) {
336
+ oidcStorage.setActiveSession(refreshedSessionToken);
337
+ }
338
+ if (xhr.status >= 200 && xhr.status < 300) {
339
+ onSuccess(data);
340
+ } else {
341
+ throw new HttpError(xhr.status, xhr.statusText, data);
342
+ }
343
+ };
344
+ xhr.onerror = function () {
345
+ const errorData = JSON.parse(xhr.responseText);
346
+ throw new HttpError(xhr.status, xhr.statusText, errorData);
347
+ };
348
+ xhr.send(payload);
349
+ return xhr;
332
350
  };
333
351
 
334
- async function uploadFileForImport(_ref) {
352
+ function uploadFileForImport(_ref) {
335
353
  let projectKey = _ref.projectKey,
336
354
  containerKey = _ref.containerKey,
337
355
  resourceType = _ref.resourceType,
338
356
  file = _ref.file,
339
- abortSignal = _ref.abortSignal;
357
+ abortSignal = _ref.abortSignal,
358
+ onSuccess = _ref.onSuccess,
359
+ onProgress = _ref.onProgress;
340
360
  const uri = getFileUploadURL(projectKey, resourceType, containerKey);
341
361
  const formData = new FormData();
342
362
  formData.append('file', file, file.name);
343
- const response = await fetcher({
363
+ return fetchUsingXhr({
344
364
  url: uri,
345
365
  payload: formData,
346
366
  config: {
@@ -350,9 +370,10 @@ async function uploadFileForImport(_ref) {
350
370
  headers: {
351
371
  'Content-Type': null
352
372
  }
353
- }
373
+ },
374
+ onProgress,
375
+ onSuccess
354
376
  });
355
- return response;
356
377
  }
357
378
 
358
379
  function ownKeys$d(e, r) { var t = _Object$keys(e); if (_Object$getOwnPropertySymbols) { var o = _Object$getOwnPropertySymbols(e); r && (o = _filterInstanceProperty(o).call(o, function (r) { return _Object$getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
@@ -408,7 +429,8 @@ function ownKeys$c(e, r) { var t = _Object$keys(e); if (_Object$getOwnPropertySy
408
429
  function _objectSpread$c(e) { for (var r = 1; r < arguments.length; r++) { var _context, _context2; var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? _forEachInstanceProperty(_context = ownKeys$c(Object(t), !0)).call(_context, function (r) { _defineProperty(e, r, t[r]); }) : _Object$getOwnPropertyDescriptors ? _Object$defineProperties(e, _Object$getOwnPropertyDescriptors(t)) : _forEachInstanceProperty(_context2 = ownKeys$c(Object(t))).call(_context2, function (r) { _Object$defineProperty(e, r, _Object$getOwnPropertyDescriptor(t, r)); }); } return e; }
409
430
  function reducer(state, action) {
410
431
  if (action.type === 'setCurrentStep') return _objectSpread$c(_objectSpread$c({}, state), {}, {
411
- currentStep: action.currentStep
432
+ currentStep: action.currentStep,
433
+ progress: 0
412
434
  });
413
435
  if (action.type === 'setUploadFileResponse') return _objectSpread$c(_objectSpread$c({}, state), {}, {
414
436
  uploadFileResponse: action.uploadFileResponse
@@ -425,7 +447,8 @@ function reducer(state, action) {
425
447
  fileUploadClientSideErrors: [],
426
448
  uploadFileResponse: undefined,
427
449
  droppedFile: undefined,
428
- dropAreaState: 'disabled'
450
+ dropAreaState: 'disabled',
451
+ progress: 0
429
452
  });
430
453
  if (action.type === 'uploadNewFile') return _objectSpread$c(_objectSpread$c({}, state), {}, {
431
454
  currentStep: 1,
@@ -433,7 +456,8 @@ function reducer(state, action) {
433
456
  fileUploadClientSideErrors: [],
434
457
  uploadFileResponse: undefined,
435
458
  droppedFile: undefined,
436
- dropAreaState: 'ready-for-drop'
459
+ dropAreaState: 'ready-for-drop',
460
+ progress: 0
437
461
  });
438
462
  if (action.type === 'setDroppedFile') {
439
463
  return _objectSpread$c(_objectSpread$c({}, state), {}, {
@@ -450,6 +474,11 @@ function reducer(state, action) {
450
474
  abortController: action.abortController
451
475
  });
452
476
  }
477
+ if (action.type === 'setProgress') {
478
+ return _objectSpread$c(_objectSpread$c({}, state), {}, {
479
+ progress: action.progress
480
+ });
481
+ }
453
482
  throw new Error(getUnknownActionError(action));
454
483
  }
455
484
  function getUnknownActionError(actionType) {
@@ -462,7 +491,8 @@ const initialState = {
462
491
  uploadFileResponse: undefined,
463
492
  fileUploadClientSideErrors: [],
464
493
  resourceType: 'category',
465
- containerKey: undefined
494
+ containerKey: undefined,
495
+ progress: 0
466
496
  };
467
497
 
468
498
  function ownKeys$b(e, r) { var t = _Object$keys(e); if (_Object$getOwnPropertySymbols) { var o = _Object$getOwnPropertySymbols(e); r && (o = _filterInstanceProperty(o).call(o, function (r) { return _Object$getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
@@ -517,6 +547,10 @@ const ImportResourcesProvider = props => {
517
547
  type: 'setFileUploadClientSideErrors',
518
548
  fileUploadClientSideErrors: nextFileUploadClientSideErrors
519
549
  });
550
+ const setProgress = progress => dispatch({
551
+ type: 'setProgress',
552
+ progress
553
+ });
520
554
  const handleClose = function () {
521
555
  let _ref = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {},
522
556
  shouldDeleteImportContainer = _ref.shouldDeleteImportContainer;
@@ -542,7 +576,8 @@ const ImportResourcesProvider = props => {
542
576
  setDroppedFile,
543
577
  setContainerKey,
544
578
  setAbortController,
545
- setFileUploadClientSideErrors
579
+ setFileUploadClientSideErrors,
580
+ setProgress
546
581
  }
547
582
  },
548
583
  children: props.children
@@ -701,25 +736,28 @@ const useUpload = () => {
701
736
  actions.setCurrentStep(2);
702
737
  const containerKey = encodeFileNameWithTimestampToContainerKey(state.droppedFile.name);
703
738
  actions.setContainerKey(containerKey);
704
- const newAbortController = new AbortController();
705
- actions.setAbortController(newAbortController);
706
739
  try {
707
740
  await createImportContainerForFileUpload({
708
741
  key: containerKey,
709
742
  resourceType: state.resourceType
710
743
  }, projectKey, asyncDispatch);
711
- const fileUploadResponse = await uploadFileForImport({
744
+ const newAbortController = uploadFileForImport({
712
745
  projectKey,
713
746
  containerKey,
714
747
  resourceType: state.resourceType,
715
748
  file: state.droppedFile,
716
- abortSignal: newAbortController.signal
749
+ onSuccess: fileUploadResponse => {
750
+ actions.setUploadFileResponse(fileUploadResponse);
751
+ actions.setCurrentStep(3);
752
+ },
753
+ onProgress: progress => {
754
+ actions.setProgress(progress);
755
+ }
717
756
  });
718
- actions.setUploadFileResponse(fileUploadResponse);
757
+ actions.setAbortController(newAbortController);
719
758
  } catch (error) {
720
759
  deleteImportContainer(projectKey, containerKey, asyncDispatch);
721
760
  handleUploadError(error);
722
- } finally {
723
761
  actions.setCurrentStep(3);
724
762
  }
725
763
  };
@@ -799,13 +837,13 @@ function getDefaultDropWrapperStyles(_dropAreaState) {
799
837
  return /*#__PURE__*/css(process.env.NODE_ENV === "production" ? "" : ";label:getDefaultDropWrapperStyles;", process.env.NODE_ENV === "production" ? "" : "/*# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImRyb3AtYXJlYS13cmFwcGVyLnRzeCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUE0QlkiLCJmaWxlIjoiZHJvcC1hcmVhLXdyYXBwZXIudHN4Iiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHN0eWxlZCBmcm9tICdAZW1vdGlvbi9zdHlsZWQnXG5pbXBvcnQgeyBjc3MgfSBmcm9tICdAZW1vdGlvbi9yZWFjdCdcbmltcG9ydCB7IHR5cGUgRHJvcHpvbmVSb290UHJvcHMgfSBmcm9tICdyZWFjdC1kcm9wem9uZSdcbmltcG9ydCB7IHN0eWxlcyB9IGZyb20gJy4vc3R5bGVzJ1xuaW1wb3J0IHsgdHlwZSBEcm9wQXJlYVN0YXRlIH0gZnJvbSAnQHR5cGVzJ1xuXG5pbnRlcmZhY2UgRHJvcFdyYXBwZXJQcm9wcyBleHRlbmRzIERyb3B6b25lUm9vdFByb3BzIHtcbiAgZHJvcEFyZWFTdGF0ZTogRHJvcEFyZWFTdGF0ZVxufVxuZXhwb3J0IGNvbnN0IERyb3BXcmFwcGVyID0gc3R5bGVkLmRpdjxEcm9wV3JhcHBlclByb3BzPmBcbiAgJHtzdHlsZXMuYmFzZX1cbiAgJHsocHJvcHMpID0+IHtcbiAgICBpZiAocHJvcHMuZHJvcEFyZWFTdGF0ZSA9PT0gJ2Rpc2FibGVkJykge1xuICAgICAgcmV0dXJuIHN0eWxlcy5kaXNhYmxlZFxuICAgIH1cbiAgICBpZiAocHJvcHMuZHJvcEFyZWFTdGF0ZSA9PT0gJ3JlYWR5LWZvci1kcm9wJykge1xuICAgICAgcmV0dXJuIHN0eWxlcy5yZWFkeUZvckRyb3BcbiAgICB9XG4gICAgaWYgKHByb3BzLmRyb3BBcmVhU3RhdGUgPT09ICdhY3RpdmUtZHJhZycpIHtcbiAgICAgIHJldHVybiBzdHlsZXMuYWN0aXZlRHJhZ1xuICAgIH1cbiAgICBpZiAocHJvcHMuZHJvcEFyZWFTdGF0ZSA9PT0gJ2ZpbGUtZHJvcHBlZCcpIHtcbiAgICAgIHJldHVybiBzdHlsZXMuZmlsZURyb3BwZWRcbiAgICB9XG4gICAgcmV0dXJuIGdldERlZmF1bHREcm9wV3JhcHBlclN0eWxlcyhwcm9wcy5kcm9wQXJlYVN0YXRlKVxuICB9fVxuYFxuZnVuY3Rpb24gZ2V0RGVmYXVsdERyb3BXcmFwcGVyU3R5bGVzKF9kcm9wQXJlYVN0YXRlOiBuZXZlcikge1xuICByZXR1cm4gY3NzYGBcbn1cbiJdfQ== */");
800
838
  }
801
839
 
802
- var ActiveDragDropArea = /*#__PURE__*/lazy(() => import('./active-drag-drop-area-06cef014.esm.js' /* webpackChunkName: "active-drag-drop-area" */));
840
+ var ActiveDragDropArea = /*#__PURE__*/lazy(() => import('./active-drag-drop-area-bf8b7a30.esm.js' /* webpackChunkName: "active-drag-drop-area" */));
803
841
 
804
842
  var DisabledDropArea = /*#__PURE__*/lazy(() => import('./disabled-drop-area-2c088477.esm.js' /* webpackChunkName: "disabled-drop-area" */));
805
843
 
806
- var EnabledDropArea = /*#__PURE__*/lazy(() => import('./enabled-drop-area-69507fae.esm.js' /* webpackChunkName: "enabled-drop-area" */));
844
+ var EnabledDropArea = /*#__PURE__*/lazy(() => import('./enabled-drop-area-5e43f909.esm.js' /* webpackChunkName: "enabled-drop-area" */));
807
845
 
808
- var FileDropped = /*#__PURE__*/lazy(() => import('./file-dropped-area-6f365e02.esm.js' /* webpackChunkName: "filed-dropped-area" */));
846
+ var FileDropped = /*#__PURE__*/lazy(() => import('./file-dropped-area-2a6284e9.esm.js' /* webpackChunkName: "filed-dropped-area" */));
809
847
 
810
848
  function getDropArea(_ref) {
811
849
  let dropAreaState = _ref.dropAreaState,
@@ -1704,6 +1742,7 @@ const Uploading = () => {
1704
1742
  const intl = useIntl();
1705
1743
  const _useImportResourcesCo = useImportResourcesContext(),
1706
1744
  state = _useImportResourcesCo.state,
1745
+ actions = _useImportResourcesCo.actions,
1707
1746
  onClose = _useImportResourcesCo.onClose;
1708
1747
  const resourceTypePlural = resourceTypeToDisplayName({
1709
1748
  resourceType: state.resourceType,
@@ -1739,13 +1778,14 @@ const Uploading = () => {
1739
1778
  size: "medium",
1740
1779
  label: intl.formatMessage(sharedMessages.cancel),
1741
1780
  onClick: () => {
1781
+ actions.setCurrentStep(1);
1742
1782
  state.abortController.abort();
1743
1783
  }
1744
1784
  })]
1745
1785
  }), jsx(ProgressBar, {
1746
1786
  barWidth: "scale",
1747
1787
  height: "10",
1748
- progress: 100
1788
+ progress: state.progress
1749
1789
  }), jsx("div", {})]
1750
1790
  })
1751
1791
  });
@@ -329,49 +329,69 @@ let HttpError = /*#__PURE__*/function (_Error) {
329
329
  }( /*#__PURE__*/_wrapNativeSuper(Error));
330
330
 
331
331
  function ownKeys$e(e, r) { var t = _Object$keys__default["default"](e); if (_Object$getOwnPropertySymbols__default["default"]) { var o = _Object$getOwnPropertySymbols__default["default"](e); r && (o = _filterInstanceProperty__default["default"](o).call(o, function (r) { return _Object$getOwnPropertyDescriptor__default["default"](e, r).enumerable; })), t.push.apply(t, o); } return t; }
332
- function _objectSpread$e(e) { for (var r = 1; r < arguments.length; r++) { var _context2, _context3; var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? _forEachInstanceProperty__default["default"](_context2 = ownKeys$e(Object(t), !0)).call(_context2, function (r) { _defineProperty(e, r, t[r]); }) : _Object$getOwnPropertyDescriptors__default["default"] ? _Object$defineProperties__default["default"](e, _Object$getOwnPropertyDescriptors__default["default"](t)) : _forEachInstanceProperty__default["default"](_context3 = ownKeys$e(Object(t))).call(_context3, function (r) { _Object$defineProperty__default["default"](e, r, _Object$getOwnPropertyDescriptor__default["default"](t, r)); }); } return e; }
332
+ function _objectSpread$e(e) { for (var r = 1; r < arguments.length; r++) { var _context3, _context4; var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? _forEachInstanceProperty__default["default"](_context3 = ownKeys$e(Object(t), !0)).call(_context3, function (r) { _defineProperty(e, r, t[r]); }) : _Object$getOwnPropertyDescriptors__default["default"] ? _Object$defineProperties__default["default"](e, _Object$getOwnPropertyDescriptors__default["default"](t)) : _forEachInstanceProperty__default["default"](_context4 = ownKeys$e(Object(t))).call(_context4, function (r) { _Object$defineProperty__default["default"](e, r, _Object$getOwnPropertyDescriptor__default["default"](t, r)); }); } return e; }
333
333
  const addProxyPrefixToUrl = (uri, proxy) => {
334
334
  var _context;
335
335
  return proxy ? _concatInstanceProperty__default["default"](_context = "/proxy/".concat(proxy)).call(_context, uri) : uri;
336
336
  };
337
- const fetcher = async _ref => {
338
- let url = _ref.url,
339
- payload = _ref.payload,
340
- config = _ref.config;
341
- const data = await applicationShell.executeHttpClientRequest(async options => {
342
- const res = await fetch(applicationShell.buildApiUrl(addProxyPrefixToUrl(url, config === null || config === void 0 ? void 0 : config.proxy)), _objectSpread$e(_objectSpread$e({}, options), {}, {
343
- method: config === null || config === void 0 ? void 0 : config.method,
344
- body: payload,
345
- signal: config === null || config === void 0 ? void 0 : config.abortSignal
346
- }));
347
- if (!res.ok) {
348
- const errorData = await res.json();
349
- throw new HttpError(res.status, res.statusText, errorData);
350
- }
351
- const data = res.json();
352
- return {
353
- data,
354
- statusCode: res.status,
355
- getHeader: key => res.headers.get(key)
356
- };
357
- }, {
337
+ const fetchUsingXhr = _ref2 => {
338
+ let url = _ref2.url,
339
+ payload = _ref2.payload,
340
+ config = _ref2.config,
341
+ onProgress = _ref2.onProgress,
342
+ onSuccess = _ref2.onSuccess;
343
+ const options = applicationShell.createHttpClientOptions({
358
344
  headers: _objectSpread$e({
359
345
  'Content-Type': 'application/json'
360
346
  }, config === null || config === void 0 ? void 0 : config.headers)
361
347
  });
362
- return data;
348
+ const xhr = new XMLHttpRequest();
349
+ xhr.open(config === null || config === void 0 ? void 0 : config.method, applicationShell.buildApiUrl(addProxyPrefixToUrl(url, config === null || config === void 0 ? void 0 : config.proxy)), true);
350
+ if (options.headers) {
351
+ var _context2;
352
+ _forEachInstanceProperty__default["default"](_context2 = _Object$keys__default["default"](options.headers)).call(_context2, key => {
353
+ xhr.setRequestHeader(key, options.headers[key]);
354
+ });
355
+ }
356
+ xhr.upload.onprogress = function (event) {
357
+ if (event.lengthComputable) {
358
+ const percentComplete = event.loaded / event.total * 100;
359
+ onProgress(percentComplete);
360
+ }
361
+ };
362
+ xhr.onload = function () {
363
+ const data = JSON.parse(xhr.responseText);
364
+ // Code copied from `executeHttpClientRequest` to replicate the same behavior
365
+ const refreshedSessionToken = xhr.getResponseHeader('x-refreshed-session-token');
366
+ if (refreshedSessionToken) {
367
+ applicationShellConnectors.oidcStorage.setActiveSession(refreshedSessionToken);
368
+ }
369
+ if (xhr.status >= 200 && xhr.status < 300) {
370
+ onSuccess(data);
371
+ } else {
372
+ throw new HttpError(xhr.status, xhr.statusText, data);
373
+ }
374
+ };
375
+ xhr.onerror = function () {
376
+ const errorData = JSON.parse(xhr.responseText);
377
+ throw new HttpError(xhr.status, xhr.statusText, errorData);
378
+ };
379
+ xhr.send(payload);
380
+ return xhr;
363
381
  };
364
382
 
365
- async function uploadFileForImport(_ref) {
383
+ function uploadFileForImport(_ref) {
366
384
  let projectKey = _ref.projectKey,
367
385
  containerKey = _ref.containerKey,
368
386
  resourceType = _ref.resourceType,
369
387
  file = _ref.file,
370
- abortSignal = _ref.abortSignal;
388
+ abortSignal = _ref.abortSignal,
389
+ onSuccess = _ref.onSuccess,
390
+ onProgress = _ref.onProgress;
371
391
  const uri = getFileUploadURL(projectKey, resourceType, containerKey);
372
392
  const formData = new FormData();
373
393
  formData.append('file', file, file.name);
374
- const response = await fetcher({
394
+ return fetchUsingXhr({
375
395
  url: uri,
376
396
  payload: formData,
377
397
  config: {
@@ -381,9 +401,10 @@ async function uploadFileForImport(_ref) {
381
401
  headers: {
382
402
  'Content-Type': null
383
403
  }
384
- }
404
+ },
405
+ onProgress,
406
+ onSuccess
385
407
  });
386
- return response;
387
408
  }
388
409
 
389
410
  function ownKeys$d(e, r) { var t = _Object$keys__default["default"](e); if (_Object$getOwnPropertySymbols__default["default"]) { var o = _Object$getOwnPropertySymbols__default["default"](e); r && (o = _filterInstanceProperty__default["default"](o).call(o, function (r) { return _Object$getOwnPropertyDescriptor__default["default"](e, r).enumerable; })), t.push.apply(t, o); } return t; }
@@ -439,7 +460,8 @@ function ownKeys$c(e, r) { var t = _Object$keys__default["default"](e); if (_Obj
439
460
  function _objectSpread$c(e) { for (var r = 1; r < arguments.length; r++) { var _context, _context2; var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? _forEachInstanceProperty__default["default"](_context = ownKeys$c(Object(t), !0)).call(_context, function (r) { _defineProperty(e, r, t[r]); }) : _Object$getOwnPropertyDescriptors__default["default"] ? _Object$defineProperties__default["default"](e, _Object$getOwnPropertyDescriptors__default["default"](t)) : _forEachInstanceProperty__default["default"](_context2 = ownKeys$c(Object(t))).call(_context2, function (r) { _Object$defineProperty__default["default"](e, r, _Object$getOwnPropertyDescriptor__default["default"](t, r)); }); } return e; }
440
461
  function reducer(state, action) {
441
462
  if (action.type === 'setCurrentStep') return _objectSpread$c(_objectSpread$c({}, state), {}, {
442
- currentStep: action.currentStep
463
+ currentStep: action.currentStep,
464
+ progress: 0
443
465
  });
444
466
  if (action.type === 'setUploadFileResponse') return _objectSpread$c(_objectSpread$c({}, state), {}, {
445
467
  uploadFileResponse: action.uploadFileResponse
@@ -456,7 +478,8 @@ function reducer(state, action) {
456
478
  fileUploadClientSideErrors: [],
457
479
  uploadFileResponse: undefined,
458
480
  droppedFile: undefined,
459
- dropAreaState: 'disabled'
481
+ dropAreaState: 'disabled',
482
+ progress: 0
460
483
  });
461
484
  if (action.type === 'uploadNewFile') return _objectSpread$c(_objectSpread$c({}, state), {}, {
462
485
  currentStep: 1,
@@ -464,7 +487,8 @@ function reducer(state, action) {
464
487
  fileUploadClientSideErrors: [],
465
488
  uploadFileResponse: undefined,
466
489
  droppedFile: undefined,
467
- dropAreaState: 'ready-for-drop'
490
+ dropAreaState: 'ready-for-drop',
491
+ progress: 0
468
492
  });
469
493
  if (action.type === 'setDroppedFile') {
470
494
  return _objectSpread$c(_objectSpread$c({}, state), {}, {
@@ -481,6 +505,11 @@ function reducer(state, action) {
481
505
  abortController: action.abortController
482
506
  });
483
507
  }
508
+ if (action.type === 'setProgress') {
509
+ return _objectSpread$c(_objectSpread$c({}, state), {}, {
510
+ progress: action.progress
511
+ });
512
+ }
484
513
  throw new Error(getUnknownActionError(action));
485
514
  }
486
515
  function getUnknownActionError(actionType) {
@@ -493,7 +522,8 @@ const initialState = {
493
522
  uploadFileResponse: undefined,
494
523
  fileUploadClientSideErrors: [],
495
524
  resourceType: 'category',
496
- containerKey: undefined
525
+ containerKey: undefined,
526
+ progress: 0
497
527
  };
498
528
 
499
529
  function ownKeys$b(e, r) { var t = _Object$keys__default["default"](e); if (_Object$getOwnPropertySymbols__default["default"]) { var o = _Object$getOwnPropertySymbols__default["default"](e); r && (o = _filterInstanceProperty__default["default"](o).call(o, function (r) { return _Object$getOwnPropertyDescriptor__default["default"](e, r).enumerable; })), t.push.apply(t, o); } return t; }
@@ -548,6 +578,10 @@ const ImportResourcesProvider = props => {
548
578
  type: 'setFileUploadClientSideErrors',
549
579
  fileUploadClientSideErrors: nextFileUploadClientSideErrors
550
580
  });
581
+ const setProgress = progress => dispatch({
582
+ type: 'setProgress',
583
+ progress
584
+ });
551
585
  const handleClose = function () {
552
586
  let _ref = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {},
553
587
  shouldDeleteImportContainer = _ref.shouldDeleteImportContainer;
@@ -573,7 +607,8 @@ const ImportResourcesProvider = props => {
573
607
  setDroppedFile,
574
608
  setContainerKey,
575
609
  setAbortController,
576
- setFileUploadClientSideErrors
610
+ setFileUploadClientSideErrors,
611
+ setProgress
577
612
  }
578
613
  },
579
614
  children: props.children
@@ -732,25 +767,28 @@ const useUpload = () => {
732
767
  actions.setCurrentStep(2);
733
768
  const containerKey = encodeFileNameWithTimestampToContainerKey(state.droppedFile.name);
734
769
  actions.setContainerKey(containerKey);
735
- const newAbortController = new AbortController();
736
- actions.setAbortController(newAbortController);
737
770
  try {
738
771
  await createImportContainerForFileUpload({
739
772
  key: containerKey,
740
773
  resourceType: state.resourceType
741
774
  }, projectKey, asyncDispatch);
742
- const fileUploadResponse = await uploadFileForImport({
775
+ const newAbortController = uploadFileForImport({
743
776
  projectKey,
744
777
  containerKey,
745
778
  resourceType: state.resourceType,
746
779
  file: state.droppedFile,
747
- abortSignal: newAbortController.signal
780
+ onSuccess: fileUploadResponse => {
781
+ actions.setUploadFileResponse(fileUploadResponse);
782
+ actions.setCurrentStep(3);
783
+ },
784
+ onProgress: progress => {
785
+ actions.setProgress(progress);
786
+ }
748
787
  });
749
- actions.setUploadFileResponse(fileUploadResponse);
788
+ actions.setAbortController(newAbortController);
750
789
  } catch (error) {
751
790
  deleteImportContainer(projectKey, containerKey, asyncDispatch);
752
791
  handleUploadError(error);
753
- } finally {
754
792
  actions.setCurrentStep(3);
755
793
  }
756
794
  };
@@ -830,13 +868,13 @@ function getDefaultDropWrapperStyles(_dropAreaState) {
830
868
  return /*#__PURE__*/react.css(process.env.NODE_ENV === "production" ? "" : ";label:getDefaultDropWrapperStyles;", process.env.NODE_ENV === "production" ? "" : "/*# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImRyb3AtYXJlYS13cmFwcGVyLnRzeCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUE0QlkiLCJmaWxlIjoiZHJvcC1hcmVhLXdyYXBwZXIudHN4Iiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHN0eWxlZCBmcm9tICdAZW1vdGlvbi9zdHlsZWQnXG5pbXBvcnQgeyBjc3MgfSBmcm9tICdAZW1vdGlvbi9yZWFjdCdcbmltcG9ydCB7IHR5cGUgRHJvcHpvbmVSb290UHJvcHMgfSBmcm9tICdyZWFjdC1kcm9wem9uZSdcbmltcG9ydCB7IHN0eWxlcyB9IGZyb20gJy4vc3R5bGVzJ1xuaW1wb3J0IHsgdHlwZSBEcm9wQXJlYVN0YXRlIH0gZnJvbSAnQHR5cGVzJ1xuXG5pbnRlcmZhY2UgRHJvcFdyYXBwZXJQcm9wcyBleHRlbmRzIERyb3B6b25lUm9vdFByb3BzIHtcbiAgZHJvcEFyZWFTdGF0ZTogRHJvcEFyZWFTdGF0ZVxufVxuZXhwb3J0IGNvbnN0IERyb3BXcmFwcGVyID0gc3R5bGVkLmRpdjxEcm9wV3JhcHBlclByb3BzPmBcbiAgJHtzdHlsZXMuYmFzZX1cbiAgJHsocHJvcHMpID0+IHtcbiAgICBpZiAocHJvcHMuZHJvcEFyZWFTdGF0ZSA9PT0gJ2Rpc2FibGVkJykge1xuICAgICAgcmV0dXJuIHN0eWxlcy5kaXNhYmxlZFxuICAgIH1cbiAgICBpZiAocHJvcHMuZHJvcEFyZWFTdGF0ZSA9PT0gJ3JlYWR5LWZvci1kcm9wJykge1xuICAgICAgcmV0dXJuIHN0eWxlcy5yZWFkeUZvckRyb3BcbiAgICB9XG4gICAgaWYgKHByb3BzLmRyb3BBcmVhU3RhdGUgPT09ICdhY3RpdmUtZHJhZycpIHtcbiAgICAgIHJldHVybiBzdHlsZXMuYWN0aXZlRHJhZ1xuICAgIH1cbiAgICBpZiAocHJvcHMuZHJvcEFyZWFTdGF0ZSA9PT0gJ2ZpbGUtZHJvcHBlZCcpIHtcbiAgICAgIHJldHVybiBzdHlsZXMuZmlsZURyb3BwZWRcbiAgICB9XG4gICAgcmV0dXJuIGdldERlZmF1bHREcm9wV3JhcHBlclN0eWxlcyhwcm9wcy5kcm9wQXJlYVN0YXRlKVxuICB9fVxuYFxuZnVuY3Rpb24gZ2V0RGVmYXVsdERyb3BXcmFwcGVyU3R5bGVzKF9kcm9wQXJlYVN0YXRlOiBuZXZlcikge1xuICByZXR1cm4gY3NzYGBcbn1cbiJdfQ== */");
831
869
  }
832
870
 
833
- var ActiveDragDropArea = /*#__PURE__*/React.lazy(() => Promise.resolve().then(function () { return require('./active-drag-drop-area-fae899bd.cjs.dev.js' /* webpackChunkName: "active-drag-drop-area" */); }));
871
+ var ActiveDragDropArea = /*#__PURE__*/React.lazy(() => Promise.resolve().then(function () { return require('./active-drag-drop-area-abad3c41.cjs.dev.js' /* webpackChunkName: "active-drag-drop-area" */); }));
834
872
 
835
873
  var DisabledDropArea = /*#__PURE__*/React.lazy(() => Promise.resolve().then(function () { return require('./disabled-drop-area-aa78075b.cjs.dev.js' /* webpackChunkName: "disabled-drop-area" */); }));
836
874
 
837
- var EnabledDropArea = /*#__PURE__*/React.lazy(() => Promise.resolve().then(function () { return require('./enabled-drop-area-56d860b6.cjs.dev.js' /* webpackChunkName: "enabled-drop-area" */); }));
875
+ var EnabledDropArea = /*#__PURE__*/React.lazy(() => Promise.resolve().then(function () { return require('./enabled-drop-area-db0fea7b.cjs.dev.js' /* webpackChunkName: "enabled-drop-area" */); }));
838
876
 
839
- var FileDropped = /*#__PURE__*/React.lazy(() => Promise.resolve().then(function () { return require('./file-dropped-area-6acf82c0.cjs.dev.js' /* webpackChunkName: "filed-dropped-area" */); }));
877
+ var FileDropped = /*#__PURE__*/React.lazy(() => Promise.resolve().then(function () { return require('./file-dropped-area-c728d70e.cjs.dev.js' /* webpackChunkName: "filed-dropped-area" */); }));
840
878
 
841
879
  function getDropArea(_ref) {
842
880
  let dropAreaState = _ref.dropAreaState,
@@ -1735,6 +1773,7 @@ const Uploading = () => {
1735
1773
  const intl = reactIntl.useIntl();
1736
1774
  const _useImportResourcesCo = useImportResourcesContext(),
1737
1775
  state = _useImportResourcesCo.state,
1776
+ actions = _useImportResourcesCo.actions,
1738
1777
  onClose = _useImportResourcesCo.onClose;
1739
1778
  const resourceTypePlural = resourceTypeToDisplayName({
1740
1779
  resourceType: state.resourceType,
@@ -1770,13 +1809,14 @@ const Uploading = () => {
1770
1809
  size: "medium",
1771
1810
  label: intl.formatMessage(sharedMessages.cancel),
1772
1811
  onClick: () => {
1812
+ actions.setCurrentStep(1);
1773
1813
  state.abortController.abort();
1774
1814
  }
1775
1815
  })]
1776
1816
  }), jsxRuntime.jsx(uiKit.ProgressBar, {
1777
1817
  barWidth: "scale",
1778
1818
  height: "10",
1779
- progress: 100
1819
+ progress: state.progress
1780
1820
  }), jsxRuntime.jsx("div", {})]
1781
1821
  })
1782
1822
  });
@@ -329,49 +329,69 @@ let HttpError = /*#__PURE__*/function (_Error) {
329
329
  }( /*#__PURE__*/_wrapNativeSuper(Error));
330
330
 
331
331
  function ownKeys$e(e, r) { var t = _Object$keys__default["default"](e); if (_Object$getOwnPropertySymbols__default["default"]) { var o = _Object$getOwnPropertySymbols__default["default"](e); r && (o = _filterInstanceProperty__default["default"](o).call(o, function (r) { return _Object$getOwnPropertyDescriptor__default["default"](e, r).enumerable; })), t.push.apply(t, o); } return t; }
332
- function _objectSpread$e(e) { for (var r = 1; r < arguments.length; r++) { var _context2, _context3; var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? _forEachInstanceProperty__default["default"](_context2 = ownKeys$e(Object(t), !0)).call(_context2, function (r) { _defineProperty(e, r, t[r]); }) : _Object$getOwnPropertyDescriptors__default["default"] ? _Object$defineProperties__default["default"](e, _Object$getOwnPropertyDescriptors__default["default"](t)) : _forEachInstanceProperty__default["default"](_context3 = ownKeys$e(Object(t))).call(_context3, function (r) { _Object$defineProperty__default["default"](e, r, _Object$getOwnPropertyDescriptor__default["default"](t, r)); }); } return e; }
332
+ function _objectSpread$e(e) { for (var r = 1; r < arguments.length; r++) { var _context3, _context4; var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? _forEachInstanceProperty__default["default"](_context3 = ownKeys$e(Object(t), !0)).call(_context3, function (r) { _defineProperty(e, r, t[r]); }) : _Object$getOwnPropertyDescriptors__default["default"] ? _Object$defineProperties__default["default"](e, _Object$getOwnPropertyDescriptors__default["default"](t)) : _forEachInstanceProperty__default["default"](_context4 = ownKeys$e(Object(t))).call(_context4, function (r) { _Object$defineProperty__default["default"](e, r, _Object$getOwnPropertyDescriptor__default["default"](t, r)); }); } return e; }
333
333
  const addProxyPrefixToUrl = (uri, proxy) => {
334
334
  var _context;
335
335
  return proxy ? _concatInstanceProperty__default["default"](_context = "/proxy/".concat(proxy)).call(_context, uri) : uri;
336
336
  };
337
- const fetcher = async _ref => {
338
- let url = _ref.url,
339
- payload = _ref.payload,
340
- config = _ref.config;
341
- const data = await applicationShell.executeHttpClientRequest(async options => {
342
- const res = await fetch(applicationShell.buildApiUrl(addProxyPrefixToUrl(url, config === null || config === void 0 ? void 0 : config.proxy)), _objectSpread$e(_objectSpread$e({}, options), {}, {
343
- method: config === null || config === void 0 ? void 0 : config.method,
344
- body: payload,
345
- signal: config === null || config === void 0 ? void 0 : config.abortSignal
346
- }));
347
- if (!res.ok) {
348
- const errorData = await res.json();
349
- throw new HttpError(res.status, res.statusText, errorData);
350
- }
351
- const data = res.json();
352
- return {
353
- data,
354
- statusCode: res.status,
355
- getHeader: key => res.headers.get(key)
356
- };
357
- }, {
337
+ const fetchUsingXhr = _ref2 => {
338
+ let url = _ref2.url,
339
+ payload = _ref2.payload,
340
+ config = _ref2.config,
341
+ onProgress = _ref2.onProgress,
342
+ onSuccess = _ref2.onSuccess;
343
+ const options = applicationShell.createHttpClientOptions({
358
344
  headers: _objectSpread$e({
359
345
  'Content-Type': 'application/json'
360
346
  }, config === null || config === void 0 ? void 0 : config.headers)
361
347
  });
362
- return data;
348
+ const xhr = new XMLHttpRequest();
349
+ xhr.open(config === null || config === void 0 ? void 0 : config.method, applicationShell.buildApiUrl(addProxyPrefixToUrl(url, config === null || config === void 0 ? void 0 : config.proxy)), true);
350
+ if (options.headers) {
351
+ var _context2;
352
+ _forEachInstanceProperty__default["default"](_context2 = _Object$keys__default["default"](options.headers)).call(_context2, key => {
353
+ xhr.setRequestHeader(key, options.headers[key]);
354
+ });
355
+ }
356
+ xhr.upload.onprogress = function (event) {
357
+ if (event.lengthComputable) {
358
+ const percentComplete = event.loaded / event.total * 100;
359
+ onProgress(percentComplete);
360
+ }
361
+ };
362
+ xhr.onload = function () {
363
+ const data = JSON.parse(xhr.responseText);
364
+ // Code copied from `executeHttpClientRequest` to replicate the same behavior
365
+ const refreshedSessionToken = xhr.getResponseHeader('x-refreshed-session-token');
366
+ if (refreshedSessionToken) {
367
+ applicationShellConnectors.oidcStorage.setActiveSession(refreshedSessionToken);
368
+ }
369
+ if (xhr.status >= 200 && xhr.status < 300) {
370
+ onSuccess(data);
371
+ } else {
372
+ throw new HttpError(xhr.status, xhr.statusText, data);
373
+ }
374
+ };
375
+ xhr.onerror = function () {
376
+ const errorData = JSON.parse(xhr.responseText);
377
+ throw new HttpError(xhr.status, xhr.statusText, errorData);
378
+ };
379
+ xhr.send(payload);
380
+ return xhr;
363
381
  };
364
382
 
365
- async function uploadFileForImport(_ref) {
383
+ function uploadFileForImport(_ref) {
366
384
  let projectKey = _ref.projectKey,
367
385
  containerKey = _ref.containerKey,
368
386
  resourceType = _ref.resourceType,
369
387
  file = _ref.file,
370
- abortSignal = _ref.abortSignal;
388
+ abortSignal = _ref.abortSignal,
389
+ onSuccess = _ref.onSuccess,
390
+ onProgress = _ref.onProgress;
371
391
  const uri = getFileUploadURL(projectKey, resourceType, containerKey);
372
392
  const formData = new FormData();
373
393
  formData.append('file', file, file.name);
374
- const response = await fetcher({
394
+ return fetchUsingXhr({
375
395
  url: uri,
376
396
  payload: formData,
377
397
  config: {
@@ -381,9 +401,10 @@ async function uploadFileForImport(_ref) {
381
401
  headers: {
382
402
  'Content-Type': null
383
403
  }
384
- }
404
+ },
405
+ onProgress,
406
+ onSuccess
385
407
  });
386
- return response;
387
408
  }
388
409
 
389
410
  function ownKeys$d(e, r) { var t = _Object$keys__default["default"](e); if (_Object$getOwnPropertySymbols__default["default"]) { var o = _Object$getOwnPropertySymbols__default["default"](e); r && (o = _filterInstanceProperty__default["default"](o).call(o, function (r) { return _Object$getOwnPropertyDescriptor__default["default"](e, r).enumerable; })), t.push.apply(t, o); } return t; }
@@ -439,7 +460,8 @@ function ownKeys$c(e, r) { var t = _Object$keys__default["default"](e); if (_Obj
439
460
  function _objectSpread$c(e) { for (var r = 1; r < arguments.length; r++) { var _context, _context2; var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? _forEachInstanceProperty__default["default"](_context = ownKeys$c(Object(t), !0)).call(_context, function (r) { _defineProperty(e, r, t[r]); }) : _Object$getOwnPropertyDescriptors__default["default"] ? _Object$defineProperties__default["default"](e, _Object$getOwnPropertyDescriptors__default["default"](t)) : _forEachInstanceProperty__default["default"](_context2 = ownKeys$c(Object(t))).call(_context2, function (r) { _Object$defineProperty__default["default"](e, r, _Object$getOwnPropertyDescriptor__default["default"](t, r)); }); } return e; }
440
461
  function reducer(state, action) {
441
462
  if (action.type === 'setCurrentStep') return _objectSpread$c(_objectSpread$c({}, state), {}, {
442
- currentStep: action.currentStep
463
+ currentStep: action.currentStep,
464
+ progress: 0
443
465
  });
444
466
  if (action.type === 'setUploadFileResponse') return _objectSpread$c(_objectSpread$c({}, state), {}, {
445
467
  uploadFileResponse: action.uploadFileResponse
@@ -456,7 +478,8 @@ function reducer(state, action) {
456
478
  fileUploadClientSideErrors: [],
457
479
  uploadFileResponse: undefined,
458
480
  droppedFile: undefined,
459
- dropAreaState: 'disabled'
481
+ dropAreaState: 'disabled',
482
+ progress: 0
460
483
  });
461
484
  if (action.type === 'uploadNewFile') return _objectSpread$c(_objectSpread$c({}, state), {}, {
462
485
  currentStep: 1,
@@ -464,7 +487,8 @@ function reducer(state, action) {
464
487
  fileUploadClientSideErrors: [],
465
488
  uploadFileResponse: undefined,
466
489
  droppedFile: undefined,
467
- dropAreaState: 'ready-for-drop'
490
+ dropAreaState: 'ready-for-drop',
491
+ progress: 0
468
492
  });
469
493
  if (action.type === 'setDroppedFile') {
470
494
  return _objectSpread$c(_objectSpread$c({}, state), {}, {
@@ -481,6 +505,11 @@ function reducer(state, action) {
481
505
  abortController: action.abortController
482
506
  });
483
507
  }
508
+ if (action.type === 'setProgress') {
509
+ return _objectSpread$c(_objectSpread$c({}, state), {}, {
510
+ progress: action.progress
511
+ });
512
+ }
484
513
  throw new Error(getUnknownActionError(action));
485
514
  }
486
515
  function getUnknownActionError(actionType) {
@@ -493,7 +522,8 @@ const initialState = {
493
522
  uploadFileResponse: undefined,
494
523
  fileUploadClientSideErrors: [],
495
524
  resourceType: 'category',
496
- containerKey: undefined
525
+ containerKey: undefined,
526
+ progress: 0
497
527
  };
498
528
 
499
529
  function ownKeys$b(e, r) { var t = _Object$keys__default["default"](e); if (_Object$getOwnPropertySymbols__default["default"]) { var o = _Object$getOwnPropertySymbols__default["default"](e); r && (o = _filterInstanceProperty__default["default"](o).call(o, function (r) { return _Object$getOwnPropertyDescriptor__default["default"](e, r).enumerable; })), t.push.apply(t, o); } return t; }
@@ -548,6 +578,10 @@ const ImportResourcesProvider = props => {
548
578
  type: 'setFileUploadClientSideErrors',
549
579
  fileUploadClientSideErrors: nextFileUploadClientSideErrors
550
580
  });
581
+ const setProgress = progress => dispatch({
582
+ type: 'setProgress',
583
+ progress
584
+ });
551
585
  const handleClose = function () {
552
586
  let _ref = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {},
553
587
  shouldDeleteImportContainer = _ref.shouldDeleteImportContainer;
@@ -573,7 +607,8 @@ const ImportResourcesProvider = props => {
573
607
  setDroppedFile,
574
608
  setContainerKey,
575
609
  setAbortController,
576
- setFileUploadClientSideErrors
610
+ setFileUploadClientSideErrors,
611
+ setProgress
577
612
  }
578
613
  },
579
614
  children: props.children
@@ -732,25 +767,28 @@ const useUpload = () => {
732
767
  actions.setCurrentStep(2);
733
768
  const containerKey = encodeFileNameWithTimestampToContainerKey(state.droppedFile.name);
734
769
  actions.setContainerKey(containerKey);
735
- const newAbortController = new AbortController();
736
- actions.setAbortController(newAbortController);
737
770
  try {
738
771
  await createImportContainerForFileUpload({
739
772
  key: containerKey,
740
773
  resourceType: state.resourceType
741
774
  }, projectKey, asyncDispatch);
742
- const fileUploadResponse = await uploadFileForImport({
775
+ const newAbortController = uploadFileForImport({
743
776
  projectKey,
744
777
  containerKey,
745
778
  resourceType: state.resourceType,
746
779
  file: state.droppedFile,
747
- abortSignal: newAbortController.signal
780
+ onSuccess: fileUploadResponse => {
781
+ actions.setUploadFileResponse(fileUploadResponse);
782
+ actions.setCurrentStep(3);
783
+ },
784
+ onProgress: progress => {
785
+ actions.setProgress(progress);
786
+ }
748
787
  });
749
- actions.setUploadFileResponse(fileUploadResponse);
788
+ actions.setAbortController(newAbortController);
750
789
  } catch (error) {
751
790
  deleteImportContainer(projectKey, containerKey, asyncDispatch);
752
791
  handleUploadError(error);
753
- } finally {
754
792
  actions.setCurrentStep(3);
755
793
  }
756
794
  };
@@ -827,13 +865,13 @@ function getDefaultDropWrapperStyles(_dropAreaState) {
827
865
  return /*#__PURE__*/react.css("" , "" );
828
866
  }
829
867
 
830
- var ActiveDragDropArea = /*#__PURE__*/React.lazy(() => Promise.resolve().then(function () { return require('./active-drag-drop-area-be3680ab.cjs.prod.js' /* webpackChunkName: "active-drag-drop-area" */); }));
868
+ var ActiveDragDropArea = /*#__PURE__*/React.lazy(() => Promise.resolve().then(function () { return require('./active-drag-drop-area-7c0fb409.cjs.prod.js' /* webpackChunkName: "active-drag-drop-area" */); }));
831
869
 
832
870
  var DisabledDropArea = /*#__PURE__*/React.lazy(() => Promise.resolve().then(function () { return require('./disabled-drop-area-99c1fa0b.cjs.prod.js' /* webpackChunkName: "disabled-drop-area" */); }));
833
871
 
834
- var EnabledDropArea = /*#__PURE__*/React.lazy(() => Promise.resolve().then(function () { return require('./enabled-drop-area-32e0dc61.cjs.prod.js' /* webpackChunkName: "enabled-drop-area" */); }));
872
+ var EnabledDropArea = /*#__PURE__*/React.lazy(() => Promise.resolve().then(function () { return require('./enabled-drop-area-3ea78d44.cjs.prod.js' /* webpackChunkName: "enabled-drop-area" */); }));
835
873
 
836
- var FileDropped = /*#__PURE__*/React.lazy(() => Promise.resolve().then(function () { return require('./file-dropped-area-e856a71f.cjs.prod.js' /* webpackChunkName: "filed-dropped-area" */); }));
874
+ var FileDropped = /*#__PURE__*/React.lazy(() => Promise.resolve().then(function () { return require('./file-dropped-area-20f1d402.cjs.prod.js' /* webpackChunkName: "filed-dropped-area" */); }));
837
875
 
838
876
  function getDropArea(_ref) {
839
877
  let dropAreaState = _ref.dropAreaState,
@@ -1729,6 +1767,7 @@ const Uploading = () => {
1729
1767
  const intl = reactIntl.useIntl();
1730
1768
  const _useImportResourcesCo = useImportResourcesContext(),
1731
1769
  state = _useImportResourcesCo.state,
1770
+ actions = _useImportResourcesCo.actions,
1732
1771
  onClose = _useImportResourcesCo.onClose;
1733
1772
  const resourceTypePlural = resourceTypeToDisplayName({
1734
1773
  resourceType: state.resourceType,
@@ -1764,13 +1803,14 @@ const Uploading = () => {
1764
1803
  size: "medium",
1765
1804
  label: intl.formatMessage(sharedMessages.cancel),
1766
1805
  onClick: () => {
1806
+ actions.setCurrentStep(1);
1767
1807
  state.abortController.abort();
1768
1808
  }
1769
1809
  })]
1770
1810
  }), jsxRuntime.jsx(uiKit.ProgressBar, {
1771
1811
  barWidth: "scale",
1772
1812
  height: "10",
1773
- progress: 100
1813
+ progress: state.progress
1774
1814
  }), jsxRuntime.jsx("div", {})]
1775
1815
  })
1776
1816
  });
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@commercetools-frontend-extensions/import-resources-modal",
3
3
  "description": "Shared import modal for importing resources",
4
- "version": "1.0.1",
4
+ "version": "1.0.2",
5
5
  "license": "BSD-3-Clause",
6
6
  "publishConfig": {
7
7
  "access": "public"