@commercetools-frontend-extensions/operations 2.0.1 → 3.1.0

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 (68) hide show
  1. package/CHANGELOG.md +20 -0
  2. package/README.md +138 -71
  3. package/dist/commercetools-frontend-extensions-operations.cjs.dev.js +979 -143
  4. package/dist/commercetools-frontend-extensions-operations.cjs.prod.js +979 -143
  5. package/dist/commercetools-frontend-extensions-operations.esm.js +929 -140
  6. package/dist/declarations/src/@api/file-import-jobs.d.ts +7 -0
  7. package/dist/declarations/src/@api/index.d.ts +1 -0
  8. package/dist/declarations/src/@api/test-fixtures.d.ts +8 -1
  9. package/dist/declarations/src/@api/urls.d.ts +30 -0
  10. package/dist/declarations/src/@components/uploading-modal/uploading-modal.d.ts +3 -2
  11. package/dist/declarations/src/@constants/file-import-job.d.ts +1 -0
  12. package/dist/declarations/src/@constants/import-limits.d.ts +6 -0
  13. package/dist/declarations/src/@constants/index.d.ts +2 -1
  14. package/dist/declarations/src/@errors/index.d.ts +5 -4
  15. package/dist/declarations/src/@errors/polling-aborted-error.d.ts +3 -0
  16. package/dist/declarations/src/@hooks/index.d.ts +4 -0
  17. package/dist/declarations/src/@hooks/use-fetch-file-import-job-records.d.ts +18 -0
  18. package/dist/declarations/src/@hooks/use-fetch-file-import-job.d.ts +17 -0
  19. package/dist/declarations/src/@hooks/use-file-import-job-upload.d.ts +18 -0
  20. package/dist/declarations/src/@hooks/use-file-upload.d.ts +29 -0
  21. package/dist/declarations/src/@hooks/use-import-container-upload.d.ts +2 -1
  22. package/dist/declarations/src/@types/export-operation.d.ts +3 -1
  23. package/dist/declarations/src/@types/file-import-job.d.ts +99 -0
  24. package/dist/declarations/src/@types/file-upload-result.d.ts +21 -0
  25. package/dist/declarations/src/@types/file-upload.d.ts +2 -2
  26. package/dist/declarations/src/@types/index.d.ts +2 -0
  27. package/dist/declarations/src/@utils/file-import-job-helpers.d.ts +12 -0
  28. package/dist/declarations/src/@utils/file-upload.d.ts +8 -0
  29. package/dist/declarations/src/@utils/index.d.ts +2 -0
  30. package/dist/declarations/src/@utils/poll-job-until-validated.d.ts +11 -0
  31. package/package.json +12 -13
  32. package/src/@api/fetcher.ts +10 -0
  33. package/src/@api/file-import-jobs.ts +217 -0
  34. package/src/@api/file-upload.spec.ts +4 -2
  35. package/src/@api/index.ts +1 -0
  36. package/src/@api/test-fixtures.ts +127 -5
  37. package/src/@api/urls.ts +77 -1
  38. package/src/@components/uploading-modal/uploading-modal.tsx +7 -5
  39. package/src/@constants/file-import-job.ts +1 -0
  40. package/src/@constants/import-limits.ts +13 -0
  41. package/src/@constants/index.ts +2 -1
  42. package/src/@errors/index.ts +5 -4
  43. package/src/@errors/polling-aborted-error.ts +6 -0
  44. package/src/@hooks/index.ts +4 -0
  45. package/src/@hooks/use-fetch-file-import-job-records.ts +58 -0
  46. package/src/@hooks/use-fetch-file-import-job.spec.ts +131 -0
  47. package/src/@hooks/use-fetch-file-import-job.ts +38 -0
  48. package/src/@hooks/use-fetch.spec.ts +1 -9
  49. package/src/@hooks/use-fetch.ts +4 -8
  50. package/src/@hooks/use-file-import-job-upload.spec.ts +273 -0
  51. package/src/@hooks/use-file-import-job-upload.ts +101 -0
  52. package/src/@hooks/use-file-upload.ts +231 -0
  53. package/src/@hooks/use-import-container-upload.spec.ts +16 -13
  54. package/src/@hooks/use-import-container-upload.ts +6 -2
  55. package/src/@types/export-operation.ts +3 -0
  56. package/src/@types/file-import-job.ts +165 -0
  57. package/src/@types/file-upload-result.ts +23 -0
  58. package/src/@types/file-upload.ts +2 -2
  59. package/src/@types/index.ts +2 -0
  60. package/src/@utils/error-mapping.ts +10 -9
  61. package/src/@utils/file-import-job-helpers.spec.ts +147 -0
  62. package/src/@utils/file-import-job-helpers.ts +47 -0
  63. package/src/@utils/file-upload.ts +39 -0
  64. package/src/@utils/index.ts +2 -0
  65. package/src/@utils/poll-job-until-validated.ts +76 -0
  66. package/dist/declarations/src/@constants/upload-limits.d.ts +0 -10
  67. package/src/@constants/upload-limits.ts +0 -11
  68. package/src/@hooks/messages.ts +0 -11
@@ -22,8 +22,8 @@ var _inherits = require('@babel/runtime-corejs3/helpers/inherits');
22
22
  var _wrapNativeSuper = require('@babel/runtime-corejs3/helpers/wrapNativeSuper');
23
23
  var constants = require('@commercetools-frontend/constants');
24
24
  var _everyInstanceProperty = require('@babel/runtime-corejs3/core-js-stable/instance/every');
25
- var pluralize = require('pluralize');
26
25
  var _Array$isArray = require('@babel/runtime-corejs3/core-js-stable/array/is-array');
26
+ var pluralize = require('pluralize');
27
27
  var _reduceInstanceProperty = require('@babel/runtime-corejs3/core-js-stable/instance/reduce');
28
28
  var _flatMapInstanceProperty = require('@babel/runtime-corejs3/core-js-stable/instance/flat-map');
29
29
  var _mapInstanceProperty = require('@babel/runtime-corejs3/core-js-stable/instance/map');
@@ -31,22 +31,25 @@ var _Promise = require('@babel/runtime-corejs3/core-js-stable/promise');
31
31
  var _findInstanceProperty = require('@babel/runtime-corejs3/core-js-stable/instance/find');
32
32
  var _includesInstanceProperty = require('@babel/runtime-corejs3/core-js-stable/instance/includes');
33
33
  var _someInstanceProperty = require('@babel/runtime-corejs3/core-js-stable/instance/some');
34
+ var _Set = require('@babel/runtime-corejs3/core-js-stable/set');
35
+ var _findIndexInstanceProperty = require('@babel/runtime-corejs3/core-js-stable/instance/find-index');
36
+ var _trimInstanceProperty = require('@babel/runtime-corejs3/core-js-stable/instance/trim');
37
+ var _bindInstanceProperty = require('@babel/runtime-corejs3/core-js-stable/instance/bind');
34
38
  var Papa = require('papaparse');
35
39
  var _sliceInstanceProperty = require('@babel/runtime-corejs3/core-js-stable/instance/slice');
36
40
  var _JSON$stringify = require('@babel/runtime-corejs3/core-js-stable/json/stringify');
37
- var _bindInstanceProperty = require('@babel/runtime-corejs3/core-js-stable/instance/bind');
38
41
  var _startsWithInstanceProperty = require('@babel/runtime-corejs3/core-js-stable/instance/starts-with');
42
+ var _setTimeout = require('@babel/runtime-corejs3/core-js-stable/set-timeout');
43
+ var _concatInstanceProperty = require('@babel/runtime-corejs3/core-js-stable/instance/concat');
39
44
  var _slicedToArray = require('@babel/runtime-corejs3/helpers/slicedToArray');
40
45
  var _URLSearchParams = require('@babel/runtime-corejs3/core-js-stable/url-search-params');
41
46
  var _Object$entries = require('@babel/runtime-corejs3/core-js-stable/object/entries');
42
- var _concatInstanceProperty = require('@babel/runtime-corejs3/core-js-stable/instance/concat');
43
47
  var uiKit = require('@commercetools-frontend/ui-kit');
44
48
  var React = require('react');
45
49
  var jsxRuntime = require('react/jsx-runtime');
46
50
  var react = require('@emotion/react');
47
51
  var _styled = require('@emotion/styled/base');
48
52
  var reactDropzone = require('react-dropzone');
49
- var reactIntl = require('react-intl');
50
53
  var applicationComponents = require('@commercetools-frontend/application-components');
51
54
  var _setInterval = require('@babel/runtime-corejs3/core-js-stable/set-interval');
52
55
  var sentry = require('@commercetools-frontend/sentry');
@@ -71,100 +74,106 @@ var _Promise__default = /*#__PURE__*/_interopDefault(_Promise);
71
74
  var _findInstanceProperty__default = /*#__PURE__*/_interopDefault(_findInstanceProperty);
72
75
  var _includesInstanceProperty__default = /*#__PURE__*/_interopDefault(_includesInstanceProperty);
73
76
  var _someInstanceProperty__default = /*#__PURE__*/_interopDefault(_someInstanceProperty);
77
+ var _Set__default = /*#__PURE__*/_interopDefault(_Set);
78
+ var _findIndexInstanceProperty__default = /*#__PURE__*/_interopDefault(_findIndexInstanceProperty);
79
+ var _trimInstanceProperty__default = /*#__PURE__*/_interopDefault(_trimInstanceProperty);
80
+ var _bindInstanceProperty__default = /*#__PURE__*/_interopDefault(_bindInstanceProperty);
74
81
  var Papa__default = /*#__PURE__*/_interopDefault(Papa);
75
82
  var _sliceInstanceProperty__default = /*#__PURE__*/_interopDefault(_sliceInstanceProperty);
76
83
  var _JSON$stringify__default = /*#__PURE__*/_interopDefault(_JSON$stringify);
77
- var _bindInstanceProperty__default = /*#__PURE__*/_interopDefault(_bindInstanceProperty);
78
84
  var _startsWithInstanceProperty__default = /*#__PURE__*/_interopDefault(_startsWithInstanceProperty);
85
+ var _setTimeout__default = /*#__PURE__*/_interopDefault(_setTimeout);
86
+ var _concatInstanceProperty__default = /*#__PURE__*/_interopDefault(_concatInstanceProperty);
79
87
  var _URLSearchParams__default = /*#__PURE__*/_interopDefault(_URLSearchParams);
80
88
  var _Object$entries__default = /*#__PURE__*/_interopDefault(_Object$entries);
81
- var _concatInstanceProperty__default = /*#__PURE__*/_interopDefault(_concatInstanceProperty);
82
89
  var React__default = /*#__PURE__*/_interopDefault(React);
83
90
  var _styled__default = /*#__PURE__*/_interopDefault(_styled);
84
91
  var _setInterval__default = /*#__PURE__*/_interopDefault(_setInterval);
85
92
 
93
+ function _callSuper$8(t, o, e) { return o = _getPrototypeOf(o), _possibleConstructorReturn(t, _isNativeReflectConstruct$8() ? _Reflect$construct__default["default"](o, e || [], _getPrototypeOf(t).constructor) : o.apply(t, e)); }
94
+ function _isNativeReflectConstruct$8() { try { var t = !Boolean.prototype.valueOf.call(_Reflect$construct__default["default"](Boolean, [], function () {})); } catch (t) {} return (_isNativeReflectConstruct$8 = function () { return !!t; })(); }
95
+ let HttpError = /*#__PURE__*/function (_Error) {
96
+ function HttpError(statusCode, statusText, errorData) {
97
+ var _this;
98
+ _classCallCheck(this, HttpError);
99
+ _this = _callSuper$8(this, HttpError, [`HTTP Error! Status code: ${statusCode}, message: "${statusText ? statusText : ''}"`]);
100
+ _this.statusCode = void 0;
101
+ _this.errorData = void 0;
102
+ _this.name = 'HttpError';
103
+ _this.statusCode = statusCode;
104
+ _this.errorData = errorData;
105
+ return _this;
106
+ }
107
+ _inherits(HttpError, _Error);
108
+ return _createClass(HttpError);
109
+ }(/*#__PURE__*/_wrapNativeSuper(Error));
110
+
86
111
  function _callSuper$7(t, o, e) { return o = _getPrototypeOf(o), _possibleConstructorReturn(t, _isNativeReflectConstruct$7() ? _Reflect$construct__default["default"](o, e || [], _getPrototypeOf(t).constructor) : o.apply(t, e)); }
87
112
  function _isNativeReflectConstruct$7() { try { var t = !Boolean.prototype.valueOf.call(_Reflect$construct__default["default"](Boolean, [], function () {})); } catch (t) {} return (_isNativeReflectConstruct$7 = function () { return !!t; })(); }
88
- let UnexpectedColumnError = /*#__PURE__*/function (_Error) {
89
- function UnexpectedColumnError(columnName) {
113
+ let InvalidResponseError = /*#__PURE__*/function (_Error) {
114
+ function InvalidResponseError(message) {
90
115
  var _this;
91
- _classCallCheck(this, UnexpectedColumnError);
92
- _this = _callSuper$7(this, UnexpectedColumnError, [`Unexpected column "${columnName}"`]);
93
- _this.name = 'UnexpectedColumnError';
116
+ _classCallCheck(this, InvalidResponseError);
117
+ _this = _callSuper$7(this, InvalidResponseError, [message]);
118
+ _this.name = 'InvalidResponseError';
94
119
  return _this;
95
120
  }
96
- _inherits(UnexpectedColumnError, _Error);
97
- return _createClass(UnexpectedColumnError);
121
+ _inherits(InvalidResponseError, _Error);
122
+ return _createClass(InvalidResponseError);
98
123
  }(/*#__PURE__*/_wrapNativeSuper(Error));
99
124
 
100
125
  function _callSuper$6(t, o, e) { return o = _getPrototypeOf(o), _possibleConstructorReturn(t, _isNativeReflectConstruct$6() ? _Reflect$construct__default["default"](o, e || [], _getPrototypeOf(t).constructor) : o.apply(t, e)); }
101
126
  function _isNativeReflectConstruct$6() { try { var t = !Boolean.prototype.valueOf.call(_Reflect$construct__default["default"](Boolean, [], function () {})); } catch (t) {} return (_isNativeReflectConstruct$6 = function () { return !!t; })(); }
102
- let UnexpectedOperationStateError = /*#__PURE__*/function (_Error) {
103
- function UnexpectedOperationStateError(state) {
127
+ let NoResourcesToExportError = /*#__PURE__*/function (_Error) {
128
+ function NoResourcesToExportError() {
104
129
  var _this;
105
- _classCallCheck(this, UnexpectedOperationStateError);
106
- _this = _callSuper$6(this, UnexpectedOperationStateError, [`Unexpected operation state "${state}"`]);
107
- _this.name = 'UnexpectedOperationStateError';
130
+ let message = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 'There are no resources to export.';
131
+ _classCallCheck(this, NoResourcesToExportError);
132
+ _this = _callSuper$6(this, NoResourcesToExportError, [message]);
133
+ _this.name = 'NoResourcesToExportError';
108
134
  return _this;
109
135
  }
110
- _inherits(UnexpectedOperationStateError, _Error);
111
- return _createClass(UnexpectedOperationStateError);
136
+ _inherits(NoResourcesToExportError, _Error);
137
+ return _createClass(NoResourcesToExportError);
112
138
  }(/*#__PURE__*/_wrapNativeSuper(Error));
113
139
 
114
140
  function _callSuper$5(t, o, e) { return o = _getPrototypeOf(o), _possibleConstructorReturn(t, _isNativeReflectConstruct$5() ? _Reflect$construct__default["default"](o, e || [], _getPrototypeOf(t).constructor) : o.apply(t, e)); }
115
141
  function _isNativeReflectConstruct$5() { try { var t = !Boolean.prototype.valueOf.call(_Reflect$construct__default["default"](Boolean, [], function () {})); } catch (t) {} return (_isNativeReflectConstruct$5 = function () { return !!t; })(); }
116
- let UnexpectedResourceTypeError = /*#__PURE__*/function (_Error) {
117
- function UnexpectedResourceTypeError(resourceType) {
142
+ let PollingAbortedError = /*#__PURE__*/function (_Error) {
143
+ function PollingAbortedError() {
118
144
  var _this;
119
- _classCallCheck(this, UnexpectedResourceTypeError);
120
- _this = _callSuper$5(this, UnexpectedResourceTypeError, [`Unexpected resource type "${resourceType}"`]);
121
- _this.name = 'UnexpectedResourceTypeError';
145
+ _classCallCheck(this, PollingAbortedError);
146
+ _this = _callSuper$5(this, PollingAbortedError, ['Polling was aborted']);
147
+ _this.name = 'PollingAbortedError';
122
148
  return _this;
123
149
  }
124
- _inherits(UnexpectedResourceTypeError, _Error);
125
- return _createClass(UnexpectedResourceTypeError);
150
+ _inherits(PollingAbortedError, _Error);
151
+ return _createClass(PollingAbortedError);
126
152
  }(/*#__PURE__*/_wrapNativeSuper(Error));
127
153
 
128
154
  function _callSuper$4(t, o, e) { return o = _getPrototypeOf(o), _possibleConstructorReturn(t, _isNativeReflectConstruct$4() ? _Reflect$construct__default["default"](o, e || [], _getPrototypeOf(t).constructor) : o.apply(t, e)); }
129
155
  function _isNativeReflectConstruct$4() { try { var t = !Boolean.prototype.valueOf.call(_Reflect$construct__default["default"](Boolean, [], function () {})); } catch (t) {} return (_isNativeReflectConstruct$4 = function () { return !!t; })(); }
130
- let HttpError = /*#__PURE__*/function (_Error) {
131
- function HttpError(statusCode, statusText, errorData) {
156
+ let ProjectKeyNotAvailableError = /*#__PURE__*/function (_Error) {
157
+ function ProjectKeyNotAvailableError() {
132
158
  var _this;
133
- _classCallCheck(this, HttpError);
134
- _this = _callSuper$4(this, HttpError, [`HTTP Error! Status code: ${statusCode}, message: "${statusText ? statusText : ''}"`]);
135
- _this.statusCode = void 0;
136
- _this.errorData = void 0;
137
- _this.name = 'HttpError';
138
- _this.statusCode = statusCode;
139
- _this.errorData = errorData;
159
+ let message = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 'Project key is not available';
160
+ _classCallCheck(this, ProjectKeyNotAvailableError);
161
+ _this = _callSuper$4(this, ProjectKeyNotAvailableError, [message]);
162
+ _this.name = 'ProjectKeyNotAvailableError';
140
163
  return _this;
141
164
  }
142
- _inherits(HttpError, _Error);
143
- return _createClass(HttpError);
165
+ _inherits(ProjectKeyNotAvailableError, _Error);
166
+ return _createClass(ProjectKeyNotAvailableError);
144
167
  }(/*#__PURE__*/_wrapNativeSuper(Error));
145
168
 
146
169
  function _callSuper$3(t, o, e) { return o = _getPrototypeOf(o), _possibleConstructorReturn(t, _isNativeReflectConstruct$3() ? _Reflect$construct__default["default"](o, e || [], _getPrototypeOf(t).constructor) : o.apply(t, e)); }
147
170
  function _isNativeReflectConstruct$3() { try { var t = !Boolean.prototype.valueOf.call(_Reflect$construct__default["default"](Boolean, [], function () {})); } catch (t) {} return (_isNativeReflectConstruct$3 = function () { return !!t; })(); }
148
- let InvalidResponseError = /*#__PURE__*/function (_Error) {
149
- function InvalidResponseError(message) {
150
- var _this;
151
- _classCallCheck(this, InvalidResponseError);
152
- _this = _callSuper$3(this, InvalidResponseError, [message]);
153
- _this.name = 'InvalidResponseError';
154
- return _this;
155
- }
156
- _inherits(InvalidResponseError, _Error);
157
- return _createClass(InvalidResponseError);
158
- }(/*#__PURE__*/_wrapNativeSuper(Error));
159
-
160
- function _callSuper$2(t, o, e) { return o = _getPrototypeOf(o), _possibleConstructorReturn(t, _isNativeReflectConstruct$2() ? _Reflect$construct__default["default"](o, e || [], _getPrototypeOf(t).constructor) : o.apply(t, e)); }
161
- function _isNativeReflectConstruct$2() { try { var t = !Boolean.prototype.valueOf.call(_Reflect$construct__default["default"](Boolean, [], function () {})); } catch (t) {} return (_isNativeReflectConstruct$2 = function () { return !!t; })(); }
162
171
  let QueryPredicateError = /*#__PURE__*/function (_Error) {
163
172
  function QueryPredicateError() {
164
173
  var _this;
165
174
  let message = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 'There is an error with the query predicate. Make sure the syntax is correct.';
166
175
  _classCallCheck(this, QueryPredicateError);
167
- _this = _callSuper$2(this, QueryPredicateError, [message]);
176
+ _this = _callSuper$3(this, QueryPredicateError, [message]);
168
177
  _this.field = 'queryPredicate';
169
178
  _this.name = 'QueryPredicateError';
170
179
  return _this;
@@ -173,38 +182,50 @@ let QueryPredicateError = /*#__PURE__*/function (_Error) {
173
182
  return _createClass(QueryPredicateError);
174
183
  }(/*#__PURE__*/_wrapNativeSuper(Error));
175
184
 
185
+ function _callSuper$2(t, o, e) { return o = _getPrototypeOf(o), _possibleConstructorReturn(t, _isNativeReflectConstruct$2() ? _Reflect$construct__default["default"](o, e || [], _getPrototypeOf(t).constructor) : o.apply(t, e)); }
186
+ function _isNativeReflectConstruct$2() { try { var t = !Boolean.prototype.valueOf.call(_Reflect$construct__default["default"](Boolean, [], function () {})); } catch (t) {} return (_isNativeReflectConstruct$2 = function () { return !!t; })(); }
187
+ let UnexpectedColumnError = /*#__PURE__*/function (_Error) {
188
+ function UnexpectedColumnError(columnName) {
189
+ var _this;
190
+ _classCallCheck(this, UnexpectedColumnError);
191
+ _this = _callSuper$2(this, UnexpectedColumnError, [`Unexpected column "${columnName}"`]);
192
+ _this.name = 'UnexpectedColumnError';
193
+ return _this;
194
+ }
195
+ _inherits(UnexpectedColumnError, _Error);
196
+ return _createClass(UnexpectedColumnError);
197
+ }(/*#__PURE__*/_wrapNativeSuper(Error));
198
+
176
199
  function _callSuper$1(t, o, e) { return o = _getPrototypeOf(o), _possibleConstructorReturn(t, _isNativeReflectConstruct$1() ? _Reflect$construct__default["default"](o, e || [], _getPrototypeOf(t).constructor) : o.apply(t, e)); }
177
200
  function _isNativeReflectConstruct$1() { try { var t = !Boolean.prototype.valueOf.call(_Reflect$construct__default["default"](Boolean, [], function () {})); } catch (t) {} return (_isNativeReflectConstruct$1 = function () { return !!t; })(); }
178
- let NoResourcesToExportError = /*#__PURE__*/function (_Error) {
179
- function NoResourcesToExportError() {
201
+ let UnexpectedOperationStateError = /*#__PURE__*/function (_Error) {
202
+ function UnexpectedOperationStateError(state) {
180
203
  var _this;
181
- let message = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 'There are no resources to export.';
182
- _classCallCheck(this, NoResourcesToExportError);
183
- _this = _callSuper$1(this, NoResourcesToExportError, [message]);
184
- _this.name = 'NoResourcesToExportError';
204
+ _classCallCheck(this, UnexpectedOperationStateError);
205
+ _this = _callSuper$1(this, UnexpectedOperationStateError, [`Unexpected operation state "${state}"`]);
206
+ _this.name = 'UnexpectedOperationStateError';
185
207
  return _this;
186
208
  }
187
- _inherits(NoResourcesToExportError, _Error);
188
- return _createClass(NoResourcesToExportError);
209
+ _inherits(UnexpectedOperationStateError, _Error);
210
+ return _createClass(UnexpectedOperationStateError);
189
211
  }(/*#__PURE__*/_wrapNativeSuper(Error));
190
212
 
191
213
  function _callSuper(t, o, e) { return o = _getPrototypeOf(o), _possibleConstructorReturn(t, _isNativeReflectConstruct() ? _Reflect$construct__default["default"](o, e || [], _getPrototypeOf(t).constructor) : o.apply(t, e)); }
192
214
  function _isNativeReflectConstruct() { try { var t = !Boolean.prototype.valueOf.call(_Reflect$construct__default["default"](Boolean, [], function () {})); } catch (t) {} return (_isNativeReflectConstruct = function () { return !!t; })(); }
193
- let ProjectKeyNotAvailableError = /*#__PURE__*/function (_Error) {
194
- function ProjectKeyNotAvailableError() {
215
+ let UnexpectedResourceTypeError = /*#__PURE__*/function (_Error) {
216
+ function UnexpectedResourceTypeError(resourceType) {
195
217
  var _this;
196
- let message = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 'Project key is not available';
197
- _classCallCheck(this, ProjectKeyNotAvailableError);
198
- _this = _callSuper(this, ProjectKeyNotAvailableError, [message]);
199
- _this.name = 'ProjectKeyNotAvailableError';
218
+ _classCallCheck(this, UnexpectedResourceTypeError);
219
+ _this = _callSuper(this, UnexpectedResourceTypeError, [`Unexpected resource type "${resourceType}"`]);
220
+ _this.name = 'UnexpectedResourceTypeError';
200
221
  return _this;
201
222
  }
202
- _inherits(ProjectKeyNotAvailableError, _Error);
203
- return _createClass(ProjectKeyNotAvailableError);
223
+ _inherits(UnexpectedResourceTypeError, _Error);
224
+ return _createClass(UnexpectedResourceTypeError);
204
225
  }(/*#__PURE__*/_wrapNativeSuper(Error));
205
226
 
206
- function ownKeys$8(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; }
207
- function _objectSpread$8(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$8(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$8(Object(t))).call(_context3, function (r) { _Object$defineProperty__default["default"](e, r, _Object$getOwnPropertyDescriptor__default["default"](t, r)); }); } return e; }
227
+ function ownKeys$9(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; }
228
+ function _objectSpread$9(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$9(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$9(Object(t))).call(_context3, function (r) { _Object$defineProperty__default["default"](e, r, _Object$getOwnPropertyDescriptor__default["default"](t, r)); }); } return e; }
208
229
  const addProxyPrefixToUrl = (uri, proxy) => {
209
230
  return proxy ? `/proxy/${proxy}${uri}` : uri;
210
231
  };
@@ -213,7 +234,7 @@ const fetcher = async _ref => {
213
234
  payload = _ref.payload,
214
235
  config = _ref.config;
215
236
  const data = await applicationShell.executeHttpClientRequest(async options => {
216
- const res = await fetch(applicationShell.buildApiUrl(addProxyPrefixToUrl(url, config?.proxy)), _objectSpread$8(_objectSpread$8({}, options), {}, {
237
+ const res = await fetch(applicationShell.buildApiUrl(addProxyPrefixToUrl(url, config?.proxy)), _objectSpread$9(_objectSpread$9({}, options), {}, {
217
238
  method: config?.method,
218
239
  body: payload,
219
240
  signal: config?.abortSignal
@@ -229,7 +250,7 @@ const fetcher = async _ref => {
229
250
  getHeader: key => res.headers.get(key)
230
251
  };
231
252
  }, {
232
- headers: _objectSpread$8({
253
+ headers: _objectSpread$9({
233
254
  'Content-Type': 'application/json'
234
255
  }, config?.headers)
235
256
  });
@@ -243,7 +264,7 @@ const fetchUsingXhr = _ref2 => {
243
264
  onSuccess = _ref2.onSuccess,
244
265
  onError = _ref2.onError;
245
266
  const options = applicationShell.createHttpClientOptions({
246
- headers: _objectSpread$8({
267
+ headers: _objectSpread$9({
247
268
  'Content-Type': 'application/json'
248
269
  }, config?.headers)
249
270
  });
@@ -285,6 +306,15 @@ const fetchUsingXhr = _ref2 => {
285
306
  xhr.onabort = function () {
286
307
  onError(new DOMException('Aborted', 'AbortError'));
287
308
  };
309
+ if (config.abortSignal) {
310
+ if (config.abortSignal.aborted) {
311
+ xhr.abort();
312
+ } else {
313
+ config.abortSignal.addEventListener('abort', () => xhr.abort(), {
314
+ once: true
315
+ });
316
+ }
317
+ }
288
318
  xhr.send(payload);
289
319
  return xhr;
290
320
  };
@@ -324,6 +354,34 @@ function assertExportOperationsDownloadFileResponse(maybeExportOperationDownload
324
354
  throw new Error('Invalid response');
325
355
  }
326
356
 
357
+ function assertFileImportJob(maybeJob) {
358
+ const requiredFields = ['id', 'fileName', 'importContainerKey', 'state'];
359
+ if (hasRequiredFields(maybeJob, requiredFields)) return;
360
+ throw new Error('Invalid File Import Job response');
361
+ }
362
+ function assertFileImportJobRecordsResponse(maybeRecords) {
363
+ const requiredFields = ['results', 'total', 'limit', 'offset', 'count'];
364
+ if (!hasRequiredFields(maybeRecords, requiredFields)) {
365
+ throw new Error('Invalid File Import Job records response: missing required fields');
366
+ }
367
+ }
368
+ function assertProcessFileImportJobResponse(maybeResponse) {
369
+ const requiredFields = ['message'];
370
+ if (hasRequiredFields(maybeResponse, requiredFields)) return;
371
+ throw new Error('Invalid Process File Import Job response');
372
+ }
373
+ function assertListFileImportJobsResponse(maybeResponse) {
374
+ if (!_Array$isArray__default["default"](maybeResponse)) {
375
+ throw new Error('Invalid List File Import Jobs response: expected an array');
376
+ }
377
+ if (maybeResponse.length > 0) {
378
+ const requiredFields = ['id', 'fileName', 'importContainerKey', 'state'];
379
+ if (!hasRequiredFields(maybeResponse[0], requiredFields)) {
380
+ throw new Error('Invalid List File Import Jobs response: missing required fields');
381
+ }
382
+ }
383
+ }
384
+
327
385
  function assertImportContainerPagedResponse(maybeImportContainerPagedResponse) {
328
386
  const requiredFields = ['count', 'results'];
329
387
  if (hasRequiredFields(maybeImportContainerPagedResponse, requiredFields)) return;
@@ -372,24 +430,24 @@ let ImportStates = /*#__PURE__*/function (ImportStates) {
372
430
  return ImportStates;
373
431
  }({});
374
432
 
375
- function ownKeys$7(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; }
376
- function _objectSpread$7(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$7(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$7(Object(t))).call(_context3, function (r) { _Object$defineProperty__default["default"](e, r, _Object$getOwnPropertyDescriptor__default["default"](t, r)); }); } return e; }
377
433
  function getFileUploadErrorsCount(errors) {
378
434
  if (!errors || !_Array$isArray__default["default"](errors)) return 0;
379
435
  return _reduceInstanceProperty__default["default"](errors).call(errors, (acc, curr) => acc += curr.errors.length, 0);
380
436
  }
437
+
438
+ // TODO: After fully migrating to new flow, remove `row` and only use `index`
381
439
  function mapUploadFileErrorsResponseToUploadFileErrorRows(uploadFileErrorsResponse) {
382
440
  if (!uploadFileErrorsResponse || !_Array$isArray__default["default"](uploadFileErrorsResponse)) return [];
383
441
  let idCounter = 1;
384
442
  return _flatMapInstanceProperty__default["default"](uploadFileErrorsResponse).call(uploadFileErrorsResponse, rowErrorsResponse => {
385
443
  var _context;
386
- return _mapInstanceProperty__default["default"](_context = rowErrorsResponse.errors).call(_context, rowError => _objectSpread$7(_objectSpread$7(_objectSpread$7({
387
- id: String(idCounter++)
388
- }, rowErrorsResponse.row !== undefined ? {
389
- row: rowErrorsResponse.row
390
- } : {}), rowErrorsResponse.index !== undefined ? {
391
- index: rowErrorsResponse.index
392
- } : {}), {}, {
444
+ // TODO: use `row` if available, otherwise fall back to `index`
445
+ // Old flow uses `row`, new flow uses `index`
446
+ const rowNumber = rowErrorsResponse.row ?? rowErrorsResponse.index;
447
+ return _mapInstanceProperty__default["default"](_context = rowErrorsResponse.errors).call(_context, rowError => ({
448
+ id: String(idCounter++),
449
+ row: rowNumber,
450
+ index: rowNumber,
393
451
  field: rowError.field,
394
452
  code: rowError.code,
395
453
  validationMessage: rowError.message
@@ -397,8 +455,40 @@ function mapUploadFileErrorsResponseToUploadFileErrorRows(uploadFileErrorsRespon
397
455
  });
398
456
  }
399
457
 
400
- function ownKeys$6(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; }
401
- function _objectSpread$6(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$6(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$6(Object(t))).call(_context3, function (r) { _Object$defineProperty__default["default"](e, r, _Object$getOwnPropertyDescriptor__default["default"](t, r)); }); } return e; }
458
+ function getFileImportJobFileType(resourceType) {
459
+ return resourceType === 'custom-object' ? 'json' : 'csv';
460
+ }
461
+ function toImportApiResourceType(resourceType) {
462
+ return resourceType === 'product' ? 'product-draft' : resourceType;
463
+ }
464
+ function isImportJobQueued(job) {
465
+ return job?.state === 'queued';
466
+ }
467
+ function isImportJobProcessing(job) {
468
+ return job?.state === 'processing';
469
+ }
470
+ function isImportJobValidated(job) {
471
+ return job?.state === 'validated';
472
+ }
473
+ function isImportJobInitializing(job) {
474
+ return job?.state === 'initialising';
475
+ }
476
+ function isImportJobReady(job) {
477
+ return job?.state === 'ready';
478
+ }
479
+ function isImportJobRejected(job) {
480
+ return job?.state === 'rejected';
481
+ }
482
+ function isImportJobTerminal(job) {
483
+ return isImportJobValidated(job) || isImportJobRejected(job);
484
+ }
485
+ function shouldContinuePollingForImportValidation(job) {
486
+ if (!job) return true;
487
+ return isImportJobQueued(job) || isImportJobProcessing(job);
488
+ }
489
+
490
+ function ownKeys$8(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; }
491
+ function _objectSpread$8(e) { for (var r = 1; r < arguments.length; r++) { var _context6, _context7; var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? _forEachInstanceProperty__default["default"](_context6 = ownKeys$8(Object(t), !0)).call(_context6, function (r) { _defineProperty(e, r, t[r]); }) : _Object$getOwnPropertyDescriptors__default["default"] ? _Object$defineProperties__default["default"](e, _Object$getOwnPropertyDescriptors__default["default"](t)) : _forEachInstanceProperty__default["default"](_context7 = ownKeys$8(Object(t))).call(_context7, function (r) { _Object$defineProperty__default["default"](e, r, _Object$getOwnPropertyDescriptor__default["default"](t, r)); }); } return e; }
402
492
 
403
493
  /**
404
494
  * Convert megabytes to bytes
@@ -517,6 +607,44 @@ const countJsonFileItems = async file => {
517
607
  }
518
608
  };
519
609
 
610
+ /**
611
+ * Count unique resources in a CSV file by counting unique values in the "key" column.
612
+ * A single resource can span multiple rows (when it has array fields like variants, assets...),
613
+ * so we count unique keys rather than rows.
614
+ * @param file The CSV file to process
615
+ * @returns A promise that resolves to the number of unique resources
616
+ */
617
+ const countUniqueResourcesInCsv = file => {
618
+ return new _Promise__default["default"](resolve => {
619
+ const uniqueKeys = new _Set__default["default"]();
620
+ let keyColumnIndex = -1;
621
+ let isFirstRow = true;
622
+ Papa__default["default"].parse(file, {
623
+ step: _ref2 => {
624
+ var _context4, _context5;
625
+ let data = _ref2.data;
626
+ if (!_Array$isArray__default["default"](data)) return;
627
+ if (isFirstRow) {
628
+ keyColumnIndex = _findIndexInstanceProperty__default["default"](data).call(data, col => {
629
+ var _context2, _context3;
630
+ return ((_context2 = col?.toLowerCase()) == null ? void 0 : _bindInstanceProperty__default["default"](_context3 = Function.call).call(_context3, _trimInstanceProperty__default["default"](_context2), _context2))?.() === 'key';
631
+ });
632
+ isFirstRow = false;
633
+ return;
634
+ }
635
+ if (keyColumnIndex === -1) return;
636
+ const keyValue = ((_context4 = data[keyColumnIndex]) == null ? void 0 : _bindInstanceProperty__default["default"](_context5 = Function.call).call(_context5, _trimInstanceProperty__default["default"](_context4), _context4))?.();
637
+ if (keyValue) {
638
+ uniqueKeys.add(keyValue);
639
+ }
640
+ },
641
+ complete: () => {
642
+ resolve(uniqueKeys.size);
643
+ }
644
+ });
645
+ });
646
+ };
647
+
520
648
  /**
521
649
  * Map file upload errors to upload file error rows with unique IDs
522
650
  * @param uploadFileErrors Array of file upload errors
@@ -524,13 +652,13 @@ const countJsonFileItems = async file => {
524
652
  */
525
653
  const mapFileUploadErrorsToUploadFileErrorRows = uploadFileErrors => {
526
654
  let idCounter = 1;
527
- return _mapInstanceProperty__default["default"](uploadFileErrors).call(uploadFileErrors, uploadFileError => _objectSpread$6(_objectSpread$6({}, uploadFileError), {}, {
655
+ return _mapInstanceProperty__default["default"](uploadFileErrors).call(uploadFileErrors, uploadFileError => _objectSpread$8(_objectSpread$8({}, uploadFileError), {}, {
528
656
  id: String(idCounter++)
529
657
  }));
530
658
  };
531
659
 
532
- function ownKeys$5(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; }
533
- function _objectSpread$5(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$5(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$5(Object(t))).call(_context2, function (r) { _Object$defineProperty__default["default"](e, r, _Object$getOwnPropertyDescriptor__default["default"](t, r)); }); } return e; }
660
+ function ownKeys$7(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; }
661
+ function _objectSpread$7(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$7(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$7(Object(t))).call(_context2, function (r) { _Object$defineProperty__default["default"](e, r, _Object$getOwnPropertyDescriptor__default["default"](t, r)); }); } return e; }
534
662
  const mapFormikErrors = error => {
535
663
  if (typeof error === 'string') {
536
664
  return {
@@ -538,7 +666,7 @@ const mapFormikErrors = error => {
538
666
  };
539
667
  }
540
668
  if (_Array$isArray__default["default"](error)) {
541
- return _reduceInstanceProperty__default["default"](error).call(error, (errorAggregator, currentError) => _objectSpread$5(_objectSpread$5({}, errorAggregator), {}, {
669
+ return _reduceInstanceProperty__default["default"](error).call(error, (errorAggregator, currentError) => _objectSpread$7(_objectSpread$7({}, errorAggregator), {}, {
542
670
  [currentError]: true
543
671
  }), {});
544
672
  }
@@ -607,6 +735,54 @@ const decodeFileNameFromImportContainerKey = importContainerKey => {
607
735
  }
608
736
  };
609
737
 
738
+ const pollJobUntilValidated = async _ref => {
739
+ let projectKey = _ref.projectKey,
740
+ jobId = _ref.jobId,
741
+ importContainerKey = _ref.importContainerKey,
742
+ _ref$pollingInterval = _ref.pollingInterval,
743
+ pollingInterval = _ref$pollingInterval === void 0 ? 5000 : _ref$pollingInterval,
744
+ _ref$maxAttempts = _ref.maxAttempts,
745
+ maxAttempts = _ref$maxAttempts === void 0 ? 120 : _ref$maxAttempts,
746
+ onJobUpdate = _ref.onJobUpdate,
747
+ abortSignal = _ref.abortSignal;
748
+ let attempts = 0;
749
+ while (attempts < maxAttempts) {
750
+ if (abortSignal?.aborted) {
751
+ throw new PollingAbortedError();
752
+ }
753
+ const job = await getFileImportJob({
754
+ projectKey,
755
+ importContainerKey,
756
+ jobId
757
+ });
758
+ if (abortSignal?.aborted) {
759
+ throw new PollingAbortedError();
760
+ }
761
+ onJobUpdate?.(job);
762
+ if (isImportJobTerminal(job)) {
763
+ return job;
764
+ }
765
+ await new _Promise__default["default"]((resolve, reject) => {
766
+ let timeoutId;
767
+ const onAbort = () => {
768
+ clearTimeout(timeoutId);
769
+ reject(new PollingAbortedError());
770
+ };
771
+ if (abortSignal?.aborted) {
772
+ reject(new PollingAbortedError());
773
+ return;
774
+ }
775
+ timeoutId = _setTimeout__default["default"](() => {
776
+ abortSignal?.removeEventListener('abort', onAbort);
777
+ resolve();
778
+ }, pollingInterval);
779
+ abortSignal?.addEventListener('abort', onAbort);
780
+ });
781
+ attempts++;
782
+ }
783
+ throw new Error(`Job validation timeout after ${maxAttempts} attempts (${maxAttempts * pollingInterval / 1000}s)`);
784
+ };
785
+
610
786
  /**
611
787
  * Formats an object into a URL query string
612
788
  * @param queryParams - Object containing query parameters
@@ -685,6 +861,42 @@ function getExportOperationsURL(_ref0) {
685
861
  const queryString = formatQueryString(queryParams);
686
862
  return `/${projectKey}/export-operations${queryString}`;
687
863
  }
864
+ function getFileImportJobsURL(_ref1) {
865
+ let projectKey = _ref1.projectKey,
866
+ resourceType = _ref1.resourceType,
867
+ importContainerKey = _ref1.importContainerKey;
868
+ return `/${projectKey}/${pluralize.plural(toImportApiResourceType(resourceType))}/import-containers/${importContainerKey}/file-import-jobs`;
869
+ }
870
+ function getFileImportJobByIdURL(_ref10) {
871
+ let projectKey = _ref10.projectKey,
872
+ importContainerKey = _ref10.importContainerKey,
873
+ jobId = _ref10.jobId;
874
+ return `/${projectKey}/import-containers/${importContainerKey}/file-import-jobs/${jobId}`;
875
+ }
876
+ function getFileImportJobRecordsURL(_ref11) {
877
+ let projectKey = _ref11.projectKey,
878
+ importContainerKey = _ref11.importContainerKey,
879
+ jobId = _ref11.jobId;
880
+ return `/${projectKey}/import-containers/${importContainerKey}/file-import-jobs/${jobId}/records`;
881
+ }
882
+ function getFileImportJobProcessURL(_ref12) {
883
+ let projectKey = _ref12.projectKey,
884
+ resourceType = _ref12.resourceType,
885
+ importContainerKey = _ref12.importContainerKey,
886
+ jobId = _ref12.jobId;
887
+ return `/${projectKey}/${pluralize.plural(toImportApiResourceType(resourceType))}/import-containers/${importContainerKey}/file-import-jobs/${jobId}/process`;
888
+ }
889
+ function getFileImportJobDeleteURL(_ref13) {
890
+ let projectKey = _ref13.projectKey,
891
+ importContainerKey = _ref13.importContainerKey,
892
+ jobId = _ref13.jobId;
893
+ return `/${projectKey}/import-containers/${importContainerKey}/file-import-jobs/${jobId}`;
894
+ }
895
+ function getFileImportJobsListURL(_ref14) {
896
+ let projectKey = _ref14.projectKey,
897
+ importContainerKey = _ref14.importContainerKey;
898
+ return `/${projectKey}/import-containers/${importContainerKey}/file-import-jobs`;
899
+ }
688
900
 
689
901
  function uploadFileForImport(_ref) {
690
902
  let projectKey = _ref.projectKey,
@@ -724,8 +936,181 @@ function assertFileUploadResponse(maybeFileUploadResponse) {
724
936
  throw new Error('Invalid response');
725
937
  }
726
938
 
727
- function ownKeys$4(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; }
728
- function _objectSpread$4(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$4(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$4(Object(t))).call(_context3, function (r) { _Object$defineProperty__default["default"](e, r, _Object$getOwnPropertyDescriptor__default["default"](t, r)); }); } return e; }
939
+ function createFileImportJob(_ref) {
940
+ let projectKey = _ref.projectKey,
941
+ resourceType = _ref.resourceType,
942
+ importContainerKey = _ref.importContainerKey,
943
+ payload = _ref.payload,
944
+ onProgress = _ref.onProgress,
945
+ abortSignal = _ref.abortSignal;
946
+ const url = getFileImportJobsURL({
947
+ projectKey,
948
+ resourceType,
949
+ importContainerKey
950
+ });
951
+ if ('fileType' in payload) {
952
+ return new _Promise__default["default"]((resolve, reject) => {
953
+ const formData = new FormData();
954
+ formData.append('fileType', payload.fileType);
955
+ formData.append('fileName', payload.fileName);
956
+ formData.append('file', payload.file, payload.fileName);
957
+ fetchUsingXhr({
958
+ url,
959
+ payload: formData,
960
+ config: {
961
+ proxy: constants.MC_API_PROXY_TARGETS.IMPORT,
962
+ method: 'POST',
963
+ headers: {
964
+ 'Content-Type': null
965
+ },
966
+ abortSignal
967
+ },
968
+ onProgress: onProgress || (() => {}),
969
+ onSuccess: response => {
970
+ assertFileImportJob(response);
971
+ resolve(response);
972
+ },
973
+ onError: reject
974
+ });
975
+ });
976
+ }
977
+ return fetcher({
978
+ url,
979
+ payload: _JSON$stringify__default["default"](payload),
980
+ config: {
981
+ proxy: constants.MC_API_PROXY_TARGETS.IMPORT,
982
+ method: 'POST',
983
+ headers: {
984
+ accept: 'application/json',
985
+ 'Content-Type': 'application/json'
986
+ }
987
+ }
988
+ }).then(response => {
989
+ assertFileImportJob(response);
990
+ return response;
991
+ });
992
+ }
993
+ async function getFileImportJob(_ref2) {
994
+ let projectKey = _ref2.projectKey,
995
+ importContainerKey = _ref2.importContainerKey,
996
+ jobId = _ref2.jobId;
997
+ const url = getFileImportJobByIdURL({
998
+ projectKey,
999
+ importContainerKey,
1000
+ jobId
1001
+ });
1002
+ const response = await fetcher({
1003
+ url,
1004
+ config: {
1005
+ proxy: constants.MC_API_PROXY_TARGETS.IMPORT,
1006
+ method: 'GET'
1007
+ }
1008
+ });
1009
+ assertFileImportJob(response);
1010
+ return response;
1011
+ }
1012
+ async function getFileImportJobRecords(_ref3) {
1013
+ let projectKey = _ref3.projectKey,
1014
+ importContainerKey = _ref3.importContainerKey,
1015
+ jobId = _ref3.jobId,
1016
+ limit = _ref3.limit,
1017
+ offset = _ref3.offset,
1018
+ isValid = _ref3.isValid;
1019
+ const baseUrl = getFileImportJobRecordsURL({
1020
+ projectKey,
1021
+ importContainerKey,
1022
+ jobId
1023
+ });
1024
+ const queryString = formatQueryString({
1025
+ limit,
1026
+ offset,
1027
+ isValid
1028
+ });
1029
+ const url = `${baseUrl}${queryString}`;
1030
+ const response = await fetcher({
1031
+ url,
1032
+ config: {
1033
+ proxy: constants.MC_API_PROXY_TARGETS.IMPORT,
1034
+ method: 'GET'
1035
+ }
1036
+ });
1037
+ assertFileImportJobRecordsResponse(response);
1038
+ return response;
1039
+ }
1040
+ async function processFileImportJob(_ref4) {
1041
+ let projectKey = _ref4.projectKey,
1042
+ resourceType = _ref4.resourceType,
1043
+ importContainerKey = _ref4.importContainerKey,
1044
+ jobId = _ref4.jobId,
1045
+ action = _ref4.action;
1046
+ const url = getFileImportJobProcessURL({
1047
+ projectKey,
1048
+ resourceType,
1049
+ importContainerKey,
1050
+ jobId
1051
+ });
1052
+ const payload = action ? {
1053
+ action
1054
+ } : {};
1055
+ const response = await fetcher({
1056
+ url,
1057
+ payload: _JSON$stringify__default["default"](payload),
1058
+ config: {
1059
+ proxy: constants.MC_API_PROXY_TARGETS.IMPORT,
1060
+ method: 'POST',
1061
+ headers: {
1062
+ accept: 'application/json',
1063
+ 'Content-Type': 'application/json'
1064
+ }
1065
+ }
1066
+ });
1067
+ assertProcessFileImportJobResponse(response);
1068
+ return response;
1069
+ }
1070
+ async function deleteFileImportJob(_ref5) {
1071
+ let projectKey = _ref5.projectKey,
1072
+ importContainerKey = _ref5.importContainerKey,
1073
+ jobId = _ref5.jobId;
1074
+ const url = getFileImportJobDeleteURL({
1075
+ projectKey,
1076
+ importContainerKey,
1077
+ jobId
1078
+ });
1079
+ await fetcher({
1080
+ url,
1081
+ config: {
1082
+ proxy: constants.MC_API_PROXY_TARGETS.IMPORT,
1083
+ method: 'DELETE'
1084
+ }
1085
+ });
1086
+ }
1087
+ async function listFileImportJobs(_ref6) {
1088
+ let projectKey = _ref6.projectKey,
1089
+ importContainerKey = _ref6.importContainerKey,
1090
+ limit = _ref6.limit,
1091
+ offset = _ref6.offset;
1092
+ const baseUrl = getFileImportJobsListURL({
1093
+ projectKey,
1094
+ importContainerKey
1095
+ });
1096
+ const queryString = formatQueryString({
1097
+ limit,
1098
+ offset
1099
+ });
1100
+ const url = `${baseUrl}${queryString}`;
1101
+ const response = await fetcher({
1102
+ url,
1103
+ config: {
1104
+ proxy: constants.MC_API_PROXY_TARGETS.IMPORT,
1105
+ method: 'GET'
1106
+ }
1107
+ });
1108
+ assertListFileImportJobsResponse(response);
1109
+ return response;
1110
+ }
1111
+
1112
+ function ownKeys$6(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; }
1113
+ function _objectSpread$6(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$6(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$6(Object(t))).call(_context3, function (r) { _Object$defineProperty__default["default"](e, r, _Object$getOwnPropertyDescriptor__default["default"](t, r)); }); } return e; }
729
1114
  function getImportState(importSummary) {
730
1115
  const processing = importSummary.states.processing > 0;
731
1116
  if (processing) return ImportStates.Processing;
@@ -750,7 +1135,7 @@ function createImportContainerForFileUpload(_ref) {
750
1135
  url: getCreateImportContainerURL({
751
1136
  projectKey
752
1137
  }),
753
- payload: _JSON$stringify__default["default"](_objectSpread$4({
1138
+ payload: _JSON$stringify__default["default"](_objectSpread$6({
754
1139
  retentionPolicy: {
755
1140
  strategy: 'ttl',
756
1141
  config: {
@@ -984,6 +1369,21 @@ const DELIMITERS = {
984
1369
  };
985
1370
  const COLUMN_DELIMITERS = [DELIMITERS.COMMA, DELIMITERS.SEMICOLON, DELIMITERS.PIPE, DELIMITERS.TAB];
986
1371
 
1372
+ const FILE_IMPORT_JOB_POLLING_INTERVAL = 2000;
1373
+
1374
+ const IMPORT_MAX_FILE_SIZE_MB = 200;
1375
+ const IMPORT_MAX_ITEM_COUNT = 500_000;
1376
+
1377
+ // =============================================================================
1378
+ // Legacy constants (old flow) - Remove after testing and migration is complete
1379
+ // =============================================================================
1380
+
1381
+ /** @deprecated Use IMPORT_MAX_FILE_SIZE_MB instead. Remove after migration. */
1382
+ const IMPORT_LEGACY_MAX_FILE_SIZE_MB = 35;
1383
+
1384
+ /** @deprecated Use IMPORT_MAX_ITEM_COUNT instead. Remove after migration. */
1385
+ const IMPORT_LEGACY_MAX_ROW_COUNT = 80_000;
1386
+
987
1387
  const IMPORT_TAG_KEYS = {
988
1388
  source: 'source'
989
1389
  };
@@ -1027,18 +1427,6 @@ const RESOURCE_TYPE_DOCUMENTATION_LINKS = {
1027
1427
  'business-unit': 'https://docs.commercetools.com/merchant-center/import-business-units#supported-headers-and-values'
1028
1428
  };
1029
1429
 
1030
- /**
1031
- * Maximum file size for imports.
1032
- * Recommended by backend, enforced in frontend validation.
1033
- */
1034
- const MAX_FILE_SIZE_MB = 35;
1035
-
1036
- /**
1037
- * Maximum row count for imports.
1038
- * Recommended by backend, enforced in frontend validation.
1039
- */
1040
- const MAX_ROW_COUNT = 80_000;
1041
-
1042
1430
  const automatedImportContainerKey = 'automated-container-key';
1043
1431
  const fileUploadImportContainerKey = 'eyJ0aW1lc3RhbXAiOiAxNzA1MDc0MzIxODY4LCAiZmlsZU5hbWUiOiAiZmlsZS11cGxvYWQtY29udGFpbmVyLWtleS5jc3YifQ';
1044
1432
  const manualImports = [{
@@ -1291,8 +1679,8 @@ const validFileUploadResponse = {
1291
1679
  itemsCount: 2,
1292
1680
  rowsCount: 2,
1293
1681
  columnsCount: 11,
1294
- columns: ['id', 'lastModifiedAt', 'key', 'name.en', 'name.de', 'slug.en', 'slug.de', 'orderHint', 'externalId', 'description.en', 'description.de'],
1295
- ignoredColumns: ['id', 'lastModifiedAt']
1682
+ fields: ['id', 'lastModifiedAt', 'key', 'name.en', 'name.de', 'slug.en', 'slug.de', 'orderHint', 'externalId', 'description.en', 'description.de'],
1683
+ ignoredFields: ['id', 'lastModifiedAt']
1296
1684
  };
1297
1685
  const invalidFileUploadResponse = {
1298
1686
  invalid: 2,
@@ -1301,8 +1689,8 @@ const invalidFileUploadResponse = {
1301
1689
  itemsCount: 2,
1302
1690
  rowsCount: 2,
1303
1691
  columnsCount: 11,
1304
- columns: ['key', 'externalId2', 'orderHint', 'name.de2', 'description.de2', 'slug.RU', 'name.enn', 'description.en', 'slug.RU', 'test1', 'test2'],
1305
- ignoredColumns: [],
1692
+ fields: ['key', 'externalId2', 'orderHint', 'name.de2', 'description.de2', 'slug.RU', 'name.enn', 'description.en', 'slug.RU', 'test1', 'test2'],
1693
+ ignoredFields: [],
1306
1694
  results: [{
1307
1695
  row: 1,
1308
1696
  errors: [{
@@ -1685,10 +2073,101 @@ const exportOperationsProcessing = [{
1685
2073
  fields: ['id'],
1686
2074
  locales: ['en']
1687
2075
  }];
2076
+ const validFileImportJobQueued = {
2077
+ id: 'job-uuid-12345',
2078
+ fileName: 'categories.csv',
2079
+ importContainerKey: 'container-key',
2080
+ state: 'queued',
2081
+ summary: {
2082
+ total: 0,
2083
+ valid: 0,
2084
+ invalid: 0,
2085
+ fieldsCount: 0,
2086
+ fields: [],
2087
+ ignoredFields: []
2088
+ }
2089
+ };
2090
+ const validFileImportJobProcessing = {
2091
+ id: 'job-uuid-12345',
2092
+ fileName: 'categories.csv',
2093
+ importContainerKey: 'container-key',
2094
+ state: 'processing',
2095
+ summary: {
2096
+ total: 0,
2097
+ valid: 0,
2098
+ invalid: 0,
2099
+ fieldsCount: 0,
2100
+ fields: [],
2101
+ ignoredFields: []
2102
+ }
2103
+ };
2104
+ const validFileImportJobValidated = {
2105
+ id: 'job-uuid-12345',
2106
+ fileName: 'categories.csv',
2107
+ importContainerKey: 'container-key',
2108
+ state: 'validated',
2109
+ summary: {
2110
+ total: 2,
2111
+ valid: 2,
2112
+ invalid: 0,
2113
+ fieldsCount: 2,
2114
+ fields: ['key', 'name.en'],
2115
+ ignoredFields: ['id', 'lastModifiedAt']
2116
+ }
2117
+ };
2118
+ const invalidFileImportJobValidated = {
2119
+ id: 'job-uuid-12345',
2120
+ fileName: 'categories.csv',
2121
+ importContainerKey: 'container-key',
2122
+ state: 'validated',
2123
+ summary: {
2124
+ total: 2,
2125
+ valid: 0,
2126
+ invalid: 2,
2127
+ fieldsCount: 11,
2128
+ fields: ['key', 'externalId2', 'orderHint', 'name.de2', 'description.de2', 'slug.RU', 'name.enn', 'description.en', 'slug.RU', 'test1', 'test2'],
2129
+ ignoredFields: []
2130
+ }
2131
+ };
2132
+ const validFileImportJobRecordsResponse = {
2133
+ results: [],
2134
+ total: 0,
2135
+ limit: 20,
2136
+ offset: 0,
2137
+ count: 0
2138
+ };
2139
+ const invalidFileImportJobRecordsResponse = {
2140
+ results: [{
2141
+ index: 1,
2142
+ errors: [{
2143
+ code: 'InvalidField',
2144
+ message: '"externalId2" is not allowed',
2145
+ field: 'externalId2'
2146
+ }, {
2147
+ code: 'InvalidField',
2148
+ message: '"orderHint" is not allowed',
2149
+ field: 'orderHint'
2150
+ }]
2151
+ }, {
2152
+ index: 2,
2153
+ errors: [{
2154
+ code: 'InvalidField',
2155
+ message: '"name.de2" is not allowed',
2156
+ field: 'name.de2'
2157
+ }]
2158
+ }],
2159
+ total: 2,
2160
+ limit: 20,
2161
+ offset: 0,
2162
+ count: 2
2163
+ };
2164
+ const processFileImportJobResponse = {
2165
+ message: 'acknowledged'
2166
+ };
1688
2167
 
1689
- function ownKeys$3(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; }
1690
- function _objectSpread$3(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$3(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$3(Object(t))).call(_context2, function (r) { _Object$defineProperty__default["default"](e, r, _Object$getOwnPropertyDescriptor__default["default"](t, r)); }); } return e; }
1691
- const FileIcon = props => /*#__PURE__*/jsxRuntime.jsxs("svg", _objectSpread$3(_objectSpread$3({
2168
+ function ownKeys$5(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; }
2169
+ function _objectSpread$5(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$5(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$5(Object(t))).call(_context2, function (r) { _Object$defineProperty__default["default"](e, r, _Object$getOwnPropertyDescriptor__default["default"](t, r)); }); } return e; }
2170
+ const FileIcon = props => /*#__PURE__*/jsxRuntime.jsxs("svg", _objectSpread$5(_objectSpread$5({
1692
2171
  width: "32",
1693
2172
  height: "32",
1694
2173
  viewBox: "0 0 32 32",
@@ -1790,9 +2269,9 @@ const ActiveDragDropArea = _ref => {
1790
2269
  });
1791
2270
  };
1792
2271
 
1793
- function ownKeys$2(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; }
1794
- function _objectSpread$2(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$2(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$2(Object(t))).call(_context2, function (r) { _Object$defineProperty__default["default"](e, r, _Object$getOwnPropertyDescriptor__default["default"](t, r)); }); } return e; }
1795
- const LockIcon = props => /*#__PURE__*/jsxRuntime.jsxs("svg", _objectSpread$2(_objectSpread$2({
2272
+ function ownKeys$4(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; }
2273
+ function _objectSpread$4(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$4(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$4(Object(t))).call(_context2, function (r) { _Object$defineProperty__default["default"](e, r, _Object$getOwnPropertyDescriptor__default["default"](t, r)); }); } return e; }
2274
+ const LockIcon = props => /*#__PURE__*/jsxRuntime.jsxs("svg", _objectSpread$4(_objectSpread$4({
1796
2275
  width: "87px",
1797
2276
  height: "118px",
1798
2277
  viewBox: "0 0 87 118",
@@ -1896,8 +2375,8 @@ function getDefaultDropWrapperStyles(_dropAreaState) {
1896
2375
  return /*#__PURE__*/react.css(process.env.NODE_ENV === "production" ? "" : ";label:getDefaultDropWrapperStyles;");
1897
2376
  }
1898
2377
 
1899
- function ownKeys$1(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; }
1900
- function _objectSpread$1(e) { for (var r = 1; r < arguments.length; r++) { var _context7, _context8; var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? _forEachInstanceProperty__default["default"](_context7 = ownKeys$1(Object(t), !0)).call(_context7, function (r) { _defineProperty(e, r, t[r]); }) : _Object$getOwnPropertyDescriptors__default["default"] ? _Object$defineProperties__default["default"](e, _Object$getOwnPropertyDescriptors__default["default"](t)) : _forEachInstanceProperty__default["default"](_context8 = ownKeys$1(Object(t))).call(_context8, function (r) { _Object$defineProperty__default["default"](e, r, _Object$getOwnPropertyDescriptor__default["default"](t, r)); }); } return e; }
2378
+ function ownKeys$3(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; }
2379
+ function _objectSpread$3(e) { for (var r = 1; r < arguments.length; r++) { var _context7, _context8; var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? _forEachInstanceProperty__default["default"](_context7 = ownKeys$3(Object(t), !0)).call(_context7, function (r) { _defineProperty(e, r, t[r]); }) : _Object$getOwnPropertyDescriptors__default["default"] ? _Object$defineProperties__default["default"](e, _Object$getOwnPropertyDescriptors__default["default"](t)) : _forEachInstanceProperty__default["default"](_context8 = ownKeys$3(Object(t))).call(_context8, function (r) { _Object$defineProperty__default["default"](e, r, _Object$getOwnPropertyDescriptor__default["default"](t, r)); }); } return e; }
1901
2380
  const FileDropArea = _ref => {
1902
2381
  let onDrop = _ref.onDrop,
1903
2382
  disabled = _ref.disabled,
@@ -1930,11 +2409,11 @@ const FileDropArea = _ref => {
1930
2409
  getInputProps = _useDropzone.getInputProps,
1931
2410
  isDragActive = _useDropzone.isDragActive;
1932
2411
  const dropAreaState = getDropAreaState(isDragActive);
1933
- return /*#__PURE__*/jsxRuntime.jsxs(DropAreaWrapper, _objectSpread$1(_objectSpread$1({
2412
+ return /*#__PURE__*/jsxRuntime.jsxs(DropAreaWrapper, _objectSpread$3(_objectSpread$3({
1934
2413
  role: "presentation"
1935
2414
  }, getRootProps()), {}, {
1936
2415
  dropAreaState: dropAreaState,
1937
- children: [/*#__PURE__*/jsxRuntime.jsx("input", _objectSpread$1({
2416
+ children: [/*#__PURE__*/jsxRuntime.jsx("input", _objectSpread$3({
1938
2417
  "data-testid": "file-input"
1939
2418
  }, getInputProps())), /*#__PURE__*/jsxRuntime.jsx(uiKit.Constraints.Horizontal, {
1940
2419
  children: children(dropAreaState)
@@ -2039,8 +2518,8 @@ const UploadingModal = _ref => {
2039
2518
  progress = _ref.progress,
2040
2519
  cancelLabel = _ref.cancelLabel,
2041
2520
  onCancel = _ref.onCancel,
2042
- onClose = _ref.onClose;
2043
- const intl = reactIntl.useIntl();
2521
+ onClose = _ref.onClose,
2522
+ statusMessage = _ref.statusMessage;
2044
2523
  return /*#__PURE__*/jsxRuntime.jsx(applicationComponents.InfoDialog, {
2045
2524
  size: 16,
2046
2525
  isOpen: isOpen,
@@ -2064,7 +2543,7 @@ const UploadingModal = _ref => {
2064
2543
  })
2065
2544
  }), /*#__PURE__*/jsxRuntime.jsxs(uiKit.Text.Body, {
2066
2545
  tone: "secondary",
2067
- children: ["(", intl.formatNumber(convertFileSizeToKB(fileSize)), " KB)"]
2546
+ children: ["(", convertFileSizeToKB(fileSize).toLocaleString(), " KB)"]
2068
2547
  })]
2069
2548
  }), /*#__PURE__*/jsxRuntime.jsx(uiKit.SecondaryButton, {
2070
2549
  tone: "secondary",
@@ -2076,22 +2555,16 @@ const UploadingModal = _ref => {
2076
2555
  barWidth: "scale",
2077
2556
  height: "10",
2078
2557
  progress: progress
2079
- }), /*#__PURE__*/jsxRuntime.jsx("div", {})]
2558
+ }), statusMessage && /*#__PURE__*/jsxRuntime.jsx(uiKit.Text.Detail, {
2559
+ tone: "tertiary",
2560
+ children: statusMessage
2561
+ })]
2080
2562
  })
2081
2563
  });
2082
2564
  };
2083
2565
 
2084
- var messages = reactIntl.defineMessages({
2085
- unexpectedError: {
2086
- id: 'operations.fetch.unexpectedError',
2087
- description: 'Generic error message displayed when an unexpected error occurs during data fetching',
2088
- defaultMessage: 'An unexpected error occurred while fetching the data. Please try again. If the problem persists, please contact support.'
2089
- }
2090
- });
2091
-
2092
2566
  const useFetch = function (fetchFunction) {
2093
2567
  let config = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
2094
- const intl = reactIntl.useIntl();
2095
2568
  const _React$useState = React__default["default"].useState(null),
2096
2569
  _React$useState2 = _slicedToArray(_React$useState, 2),
2097
2570
  data = _React$useState2[0],
@@ -2130,10 +2603,9 @@ const useFetch = function (fetchFunction) {
2130
2603
  }
2131
2604
  }
2132
2605
  } catch (err) {
2133
- if (err instanceof HttpError) {
2134
- setError(err);
2135
- } else {
2136
- setError(new Error(intl.formatMessage(messages.unexpectedError)));
2606
+ const error = err instanceof Error ? err : new Error(String(err));
2607
+ setError(error);
2608
+ if (!(err instanceof HttpError)) {
2137
2609
  sentry.reportErrorToSentry(new Error('An unexpected error occurred in the `useFetch` hook'), {
2138
2610
  extra: {
2139
2611
  error: err
@@ -2155,7 +2627,7 @@ const useFetch = function (fetchFunction) {
2155
2627
  setError(null);
2156
2628
  setIsLoading(false);
2157
2629
  };
2158
- }, [fetchFunction, refetchCount, intl, config.pollingInterval, config.shouldContinuePolling]);
2630
+ }, [fetchFunction, refetchCount, config.pollingInterval, config.shouldContinuePolling]);
2159
2631
  return {
2160
2632
  data,
2161
2633
  error,
@@ -2185,6 +2657,61 @@ const useFetchExportOperations = _ref => {
2185
2657
  });
2186
2658
  };
2187
2659
 
2660
+ const useFetchFileImportJob = _ref => {
2661
+ let projectKey = _ref.projectKey,
2662
+ importContainerKey = _ref.importContainerKey,
2663
+ jobId = _ref.jobId,
2664
+ pollingInterval = _ref.pollingInterval,
2665
+ shouldContinuePolling = _ref.shouldContinuePolling;
2666
+ const fetchData = React__default["default"].useCallback(() => {
2667
+ if (!projectKey) {
2668
+ return _Promise__default["default"].reject(new ProjectKeyNotAvailableError());
2669
+ }
2670
+ return getFileImportJob({
2671
+ projectKey,
2672
+ importContainerKey,
2673
+ jobId
2674
+ });
2675
+ }, [projectKey, importContainerKey, jobId]);
2676
+ return useFetch(fetchData, {
2677
+ pollingInterval,
2678
+ shouldContinuePolling
2679
+ });
2680
+ };
2681
+
2682
+ const EMPTY_RESPONSE = {
2683
+ results: [],
2684
+ total: 0,
2685
+ limit: 0,
2686
+ offset: 0,
2687
+ count: 0
2688
+ };
2689
+ const useFetchFileImportJobRecords = _ref => {
2690
+ let projectKey = _ref.projectKey,
2691
+ importContainerKey = _ref.importContainerKey,
2692
+ jobId = _ref.jobId,
2693
+ limit = _ref.limit,
2694
+ offset = _ref.offset,
2695
+ isValid = _ref.isValid,
2696
+ _ref$skip = _ref.skip,
2697
+ skip = _ref$skip === void 0 ? false : _ref$skip;
2698
+ const shouldSkip = skip || !projectKey || !importContainerKey || !jobId;
2699
+ const fetchData = React__default["default"].useCallback(() => {
2700
+ if (shouldSkip) {
2701
+ return _Promise__default["default"].resolve(EMPTY_RESPONSE);
2702
+ }
2703
+ return getFileImportJobRecords({
2704
+ projectKey: projectKey,
2705
+ importContainerKey: importContainerKey,
2706
+ jobId: jobId,
2707
+ limit,
2708
+ offset,
2709
+ isValid
2710
+ });
2711
+ }, [shouldSkip, projectKey, importContainerKey, jobId, limit, offset, isValid]);
2712
+ return useFetch(fetchData);
2713
+ };
2714
+
2188
2715
  const useFetchImportContainerDetails = _ref => {
2189
2716
  let projectKey = _ref.projectKey,
2190
2717
  importContainerKey = _ref.importContainerKey,
@@ -2253,8 +2780,78 @@ const useFetchImportSummaries = _ref => {
2253
2780
  });
2254
2781
  };
2255
2782
 
2256
- function ownKeys(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; }
2257
- function _objectSpread(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(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(Object(t))).call(_context2, function (r) { _Object$defineProperty__default["default"](e, r, _Object$getOwnPropertyDescriptor__default["default"](t, r)); }); } return e; }
2783
+ function ownKeys$2(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; }
2784
+ function _objectSpread$2(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$2(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$2(Object(t))).call(_context2, function (r) { _Object$defineProperty__default["default"](e, r, _Object$getOwnPropertyDescriptor__default["default"](t, r)); }); } return e; }
2785
+ const useFileImportJobUpload = _ref => {
2786
+ let projectKey = _ref.projectKey;
2787
+ const _React$useState = React__default["default"].useState(false),
2788
+ _React$useState2 = _slicedToArray(_React$useState, 2),
2789
+ isUploading = _React$useState2[0],
2790
+ setIsUploading = _React$useState2[1];
2791
+ const _React$useState3 = React__default["default"].useState(0),
2792
+ _React$useState4 = _slicedToArray(_React$useState3, 2),
2793
+ progress = _React$useState4[0],
2794
+ setProgress = _React$useState4[1];
2795
+ const upload = React__default["default"].useCallback(async config => {
2796
+ if (!projectKey) {
2797
+ throw new ProjectKeyNotAvailableError();
2798
+ }
2799
+ setIsUploading(true);
2800
+ setProgress(0);
2801
+ const importContainerKey = encodeFileNameWithTimestampToContainerKey(config.file.name);
2802
+ try {
2803
+ await createImportContainerForFileUpload({
2804
+ importContainerDraft: _objectSpread$2({
2805
+ key: importContainerKey,
2806
+ resourceType: config.resourceType,
2807
+ tags: [TAG_KEY_SOURCE_FILE_UPLOAD]
2808
+ }, config.settings ? {
2809
+ settings: config.settings
2810
+ } : {}),
2811
+ projectKey
2812
+ });
2813
+ const jobResponse = await createFileImportJob({
2814
+ projectKey,
2815
+ resourceType: config.resourceType,
2816
+ importContainerKey,
2817
+ payload: {
2818
+ fileType: getFileImportJobFileType(config.resourceType),
2819
+ fileName: config.file.name,
2820
+ file: config.file
2821
+ },
2822
+ onProgress: uploadProgress => {
2823
+ setProgress(uploadProgress);
2824
+ config.onProgress?.(uploadProgress);
2825
+ },
2826
+ abortSignal: config.abortSignal
2827
+ });
2828
+ setIsUploading(false);
2829
+ setProgress(100);
2830
+ config.onSuccess(jobResponse.id, importContainerKey);
2831
+ } catch (error) {
2832
+ try {
2833
+ await deleteImportContainer({
2834
+ projectKey,
2835
+ importContainerKey
2836
+ });
2837
+ } catch {
2838
+ // Ignore cleanup errors - container will be cleaned up by TTL retention policy
2839
+ // Cleanup errors are unlikely unless there is a network issue or container was removed externally
2840
+ }
2841
+ setIsUploading(false);
2842
+ setProgress(0);
2843
+ config.onError?.(error);
2844
+ }
2845
+ }, [projectKey]);
2846
+ return {
2847
+ upload,
2848
+ isUploading,
2849
+ progress
2850
+ };
2851
+ };
2852
+
2853
+ function ownKeys$1(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; }
2854
+ function _objectSpread$1(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$1(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$1(Object(t))).call(_context2, function (r) { _Object$defineProperty__default["default"](e, r, _Object$getOwnPropertyDescriptor__default["default"](t, r)); }); } return e; }
2258
2855
  const useImportContainerUpload = _ref => {
2259
2856
  let projectKey = _ref.projectKey;
2260
2857
  const _React$useState = React__default["default"].useState(false),
@@ -2272,7 +2869,8 @@ const useImportContainerUpload = _ref => {
2272
2869
  settings = _ref2.settings,
2273
2870
  onSuccess = _ref2.onSuccess,
2274
2871
  onError = _ref2.onError,
2275
- onProgress = _ref2.onProgress;
2872
+ onProgress = _ref2.onProgress,
2873
+ abortSignal = _ref2.abortSignal;
2276
2874
  if (!projectKey) {
2277
2875
  throw new ProjectKeyNotAvailableError();
2278
2876
  }
@@ -2281,7 +2879,7 @@ const useImportContainerUpload = _ref => {
2281
2879
  const importContainerKey = encodeFileNameWithTimestampToContainerKey(file.name);
2282
2880
  try {
2283
2881
  await createImportContainerForFileUpload({
2284
- importContainerDraft: _objectSpread({
2882
+ importContainerDraft: _objectSpread$1({
2285
2883
  key: importContainerKey,
2286
2884
  resourceType,
2287
2885
  tags: [TAG_KEY_SOURCE_FILE_UPLOAD]
@@ -2295,6 +2893,7 @@ const useImportContainerUpload = _ref => {
2295
2893
  importContainerKey,
2296
2894
  resourceType,
2297
2895
  file,
2896
+ abortSignal,
2298
2897
  onSuccess: response => {
2299
2898
  setIsUploading(false);
2300
2899
  setProgress(100);
@@ -2333,7 +2932,8 @@ const useImportContainerUpload = _ref => {
2333
2932
  }
2334
2933
  setIsUploading(false);
2335
2934
  setProgress(0);
2336
- throw error;
2935
+ onError?.(error);
2936
+ return undefined;
2337
2937
  }
2338
2938
  };
2339
2939
  const abort = () => {
@@ -2349,6 +2949,199 @@ const useImportContainerUpload = _ref => {
2349
2949
  };
2350
2950
  };
2351
2951
 
2952
+ function ownKeys(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; }
2953
+ function _objectSpread(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(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(Object(t))).call(_context2, function (r) { _Object$defineProperty__default["default"](e, r, _Object$getOwnPropertyDescriptor__default["default"](t, r)); }); } return e; }
2954
+ const safeDeleteContainer = async _ref => {
2955
+ let projectKey = _ref.projectKey,
2956
+ containerKey = _ref.containerKey;
2957
+ try {
2958
+ await deleteImportContainer({
2959
+ projectKey,
2960
+ importContainerKey: containerKey
2961
+ });
2962
+ } catch {}
2963
+ };
2964
+ const useFileUpload = _ref2 => {
2965
+ let projectKey = _ref2.projectKey,
2966
+ _ref2$useJobBasedFlow = _ref2.useJobBasedFlow,
2967
+ useJobBasedFlow = _ref2$useJobBasedFlow === void 0 ? false : _ref2$useJobBasedFlow,
2968
+ _ref2$pollingInterval = _ref2.pollingInterval,
2969
+ pollingInterval = _ref2$pollingInterval === void 0 ? 5000 : _ref2$pollingInterval,
2970
+ _ref2$maxPollingAttem = _ref2.maxPollingAttempts,
2971
+ maxPollingAttempts = _ref2$maxPollingAttem === void 0 ? 120 : _ref2$maxPollingAttem;
2972
+ const _React$useState = React__default["default"].useState(false),
2973
+ _React$useState2 = _slicedToArray(_React$useState, 2),
2974
+ isUploading = _React$useState2[0],
2975
+ setIsUploading = _React$useState2[1];
2976
+ const _React$useState3 = React__default["default"].useState(0),
2977
+ _React$useState4 = _slicedToArray(_React$useState3, 2),
2978
+ progress = _React$useState4[0],
2979
+ setProgress = _React$useState4[1];
2980
+ const _React$useState5 = React__default["default"].useState({
2981
+ processed: 0,
2982
+ total: 0,
2983
+ isValidating: false
2984
+ }),
2985
+ _React$useState6 = _slicedToArray(_React$useState5, 2),
2986
+ validationProgress = _React$useState6[0],
2987
+ setValidationProgress = _React$useState6[1];
2988
+ const containerUpload = useImportContainerUpload({
2989
+ projectKey
2990
+ });
2991
+ const jobUpload = useFileImportJobUpload({
2992
+ projectKey
2993
+ });
2994
+ const resetState = React__default["default"].useCallback(() => {
2995
+ setIsUploading(false);
2996
+ setProgress(0);
2997
+ setValidationProgress({
2998
+ processed: 0,
2999
+ total: 0,
3000
+ isValidating: false
3001
+ });
3002
+ }, []);
3003
+ const upload = React__default["default"].useCallback(async config => {
3004
+ setIsUploading(true);
3005
+ setProgress(0);
3006
+ try {
3007
+ if (useJobBasedFlow) {
3008
+ const totalResources = await countUniqueResourcesInCsv(config.file);
3009
+ await jobUpload.upload({
3010
+ file: config.file,
3011
+ resourceType: config.resourceType,
3012
+ settings: config.settings,
3013
+ abortSignal: config.abortSignal,
3014
+ onSuccess: async (jobId, containerKey) => {
3015
+ try {
3016
+ setValidationProgress({
3017
+ processed: 0,
3018
+ total: totalResources,
3019
+ isValidating: true
3020
+ });
3021
+ const validatedJob = await pollJobUntilValidated({
3022
+ projectKey,
3023
+ jobId,
3024
+ importContainerKey: containerKey,
3025
+ pollingInterval,
3026
+ maxAttempts: maxPollingAttempts,
3027
+ abortSignal: config.abortSignal,
3028
+ onJobUpdate: job => {
3029
+ const processed = job.summary?.total ?? 0;
3030
+ setValidationProgress({
3031
+ processed,
3032
+ total: totalResources,
3033
+ isValidating: true
3034
+ });
3035
+ config.onValidationProgress?.(job);
3036
+ }
3037
+ });
3038
+
3039
+ // Handle rejected job with jobError for the new flow (like MissingCsvFieldIdentifier error)
3040
+ // We wrap it in HttpError to reuse existing error handling (for the old flow) in consumers until BE supports this error type
3041
+ if (validatedJob.jobError) {
3042
+ throw new HttpError(400, validatedJob.jobError.message, validatedJob.jobError);
3043
+ }
3044
+ if (validatedJob.summary.invalid > 0) {
3045
+ await safeDeleteContainer({
3046
+ projectKey,
3047
+ containerKey
3048
+ });
3049
+ }
3050
+ const result = {
3051
+ containerKey,
3052
+ summary: _objectSpread(_objectSpread({}, validatedJob.summary), {}, {
3053
+ // TODO: Remove this once the old flow is fully removed
3054
+ results: []
3055
+ }),
3056
+ jobId,
3057
+ job: validatedJob
3058
+ };
3059
+ setIsUploading(false);
3060
+ setValidationProgress({
3061
+ processed: 0,
3062
+ total: 0,
3063
+ isValidating: false
3064
+ });
3065
+ config.onSuccess(result);
3066
+ } catch (error) {
3067
+ await safeDeleteContainer({
3068
+ projectKey,
3069
+ containerKey
3070
+ });
3071
+ resetState();
3072
+ if (!(error instanceof PollingAbortedError)) {
3073
+ config.onError?.(error);
3074
+ }
3075
+ }
3076
+ },
3077
+ onProgress: prog => {
3078
+ setProgress(prog);
3079
+ config.onProgress?.(prog);
3080
+ },
3081
+ onError: error => {
3082
+ resetState();
3083
+ config.onError?.(error);
3084
+ }
3085
+ });
3086
+ } else {
3087
+ await containerUpload.upload({
3088
+ file: config.file,
3089
+ resourceType: config.resourceType,
3090
+ settings: config.settings,
3091
+ abortSignal: config.abortSignal,
3092
+ onSuccess: async (fileUploadResponse, containerKey) => {
3093
+ if (config.abortSignal?.aborted) {
3094
+ await safeDeleteContainer({
3095
+ projectKey,
3096
+ containerKey
3097
+ });
3098
+ resetState();
3099
+ return;
3100
+ }
3101
+ if (fileUploadResponse.invalid > 0) {
3102
+ await safeDeleteContainer({
3103
+ projectKey,
3104
+ containerKey
3105
+ });
3106
+ }
3107
+ const result = {
3108
+ containerKey,
3109
+ summary: {
3110
+ total: fileUploadResponse.itemsCount,
3111
+ valid: fileUploadResponse.valid,
3112
+ invalid: fileUploadResponse.invalid,
3113
+ fieldsCount: fileUploadResponse.columnsCount,
3114
+ fields: fileUploadResponse.fields || [],
3115
+ ignoredFields: fileUploadResponse.ignoredFields || [],
3116
+ results: fileUploadResponse.results || []
3117
+ }
3118
+ };
3119
+ setIsUploading(false);
3120
+ config.onSuccess(result);
3121
+ },
3122
+ onProgress: prog => {
3123
+ setProgress(prog);
3124
+ config.onProgress?.(prog);
3125
+ },
3126
+ onError: error => {
3127
+ resetState();
3128
+ config.onError?.(error);
3129
+ }
3130
+ });
3131
+ }
3132
+ } catch (error) {
3133
+ resetState();
3134
+ config.onError?.(error);
3135
+ }
3136
+ }, [projectKey, useJobBasedFlow, pollingInterval, maxPollingAttempts, containerUpload, jobUpload]);
3137
+ return {
3138
+ upload,
3139
+ isUploading,
3140
+ progress,
3141
+ validationProgress
3142
+ };
3143
+ };
3144
+
2352
3145
  exports.ActiveDragDropArea = ActiveDragDropArea;
2353
3146
  exports.COLUMN_DELIMITERS = COLUMN_DELIMITERS;
2354
3147
  exports.CT_API_DOCS_URL = CT_API_DOCS_URL;
@@ -2356,19 +3149,23 @@ exports.DELIMITERS = DELIMITERS;
2356
3149
  exports.DisabledDropArea = DisabledDropArea;
2357
3150
  exports.DropAreaWrapper = DropAreaWrapper;
2358
3151
  exports.EnabledDropArea = EnabledDropArea;
3152
+ exports.FILE_IMPORT_JOB_POLLING_INTERVAL = FILE_IMPORT_JOB_POLLING_INTERVAL;
2359
3153
  exports.FileDropArea = FileDropArea;
2360
3154
  exports.FileDroppedArea = FileDroppedArea;
2361
3155
  exports.FileIcon = FileIcon;
2362
3156
  exports.HttpError = HttpError;
3157
+ exports.IMPORT_LEGACY_MAX_FILE_SIZE_MB = IMPORT_LEGACY_MAX_FILE_SIZE_MB;
3158
+ exports.IMPORT_LEGACY_MAX_ROW_COUNT = IMPORT_LEGACY_MAX_ROW_COUNT;
3159
+ exports.IMPORT_MAX_FILE_SIZE_MB = IMPORT_MAX_FILE_SIZE_MB;
3160
+ exports.IMPORT_MAX_ITEM_COUNT = IMPORT_MAX_ITEM_COUNT;
2363
3161
  exports.IMPORT_TAG_KEYS = IMPORT_TAG_KEYS;
2364
3162
  exports.IMPORT_TAG_VALUES = IMPORT_TAG_VALUES;
2365
3163
  exports.ImportStates = ImportStates;
2366
3164
  exports.InfoBox = InfoBox;
2367
3165
  exports.InvalidResponseError = InvalidResponseError;
2368
3166
  exports.LockIcon = LockIcon;
2369
- exports.MAX_FILE_SIZE_MB = MAX_FILE_SIZE_MB;
2370
- exports.MAX_ROW_COUNT = MAX_ROW_COUNT;
2371
3167
  exports.NoResourcesToExportError = NoResourcesToExportError;
3168
+ exports.PollingAbortedError = PollingAbortedError;
2372
3169
  exports.ProjectKeyNotAvailableError = ProjectKeyNotAvailableError;
2373
3170
  exports.QueryPredicateError = QueryPredicateError;
2374
3171
  exports.RESOURCE_TYPE_DOCUMENTATION_LINKS = RESOURCE_TYPE_DOCUMENTATION_LINKS;
@@ -2387,12 +3184,16 @@ exports.allFileUploadImportOperationsResponse = allFileUploadImportOperationsRes
2387
3184
  exports.appendCsvOrJsonExtensionIfAbsent = appendCsvOrJsonExtensionIfAbsent;
2388
3185
  exports.assertCancelContainerResponse = assertCancelContainerResponse;
2389
3186
  exports.assertExportOperationsDownloadFileResponse = assertExportOperationsDownloadFileResponse;
3187
+ exports.assertFileImportJob = assertFileImportJob;
3188
+ exports.assertFileImportJobRecordsResponse = assertFileImportJobRecordsResponse;
2390
3189
  exports.assertFileUploadResponse = assertFileUploadResponse;
2391
3190
  exports.assertImportContainer = assertImportContainer;
2392
3191
  exports.assertImportContainerPagedResponse = assertImportContainerPagedResponse;
2393
3192
  exports.assertImportOperationPagedResponse = assertImportOperationPagedResponse;
2394
3193
  exports.assertImportSummary = assertImportSummary;
3194
+ exports.assertListFileImportJobsResponse = assertListFileImportJobsResponse;
2395
3195
  exports.assertPaginatedExportOperationResponse = assertPaginatedExportOperationResponse;
3196
+ exports.assertProcessFileImportJobResponse = assertProcessFileImportJobResponse;
2396
3197
  exports.assertProcessFileResponse = assertProcessFileResponse;
2397
3198
  exports.assertResourceType = assertResourceType;
2398
3199
  exports.automatedImportContainerKey = automatedImportContainerKey;
@@ -2401,8 +3202,11 @@ exports.cancelImportContainerByKey = cancelImportContainerByKey;
2401
3202
  exports.checkIfFileUploadImport = checkIfFileUploadImport;
2402
3203
  exports.convertFileSizeToKB = convertFileSizeToKB;
2403
3204
  exports.countJsonFileItems = countJsonFileItems;
3205
+ exports.countUniqueResourcesInCsv = countUniqueResourcesInCsv;
3206
+ exports.createFileImportJob = createFileImportJob;
2404
3207
  exports.createImportContainerForFileUpload = createImportContainerForFileUpload;
2405
3208
  exports.decodeFileNameFromImportContainerKey = decodeFileNameFromImportContainerKey;
3209
+ exports.deleteFileImportJob = deleteFileImportJob;
2406
3210
  exports.deleteImportContainer = deleteImportContainer;
2407
3211
  exports.dropAreaStyles = dropAreaStyles;
2408
3212
  exports.encodeFileNameWithTimestampToContainerKey = encodeFileNameWithTimestampToContainerKey;
@@ -2426,6 +3230,15 @@ exports.formatQueryString = formatQueryString;
2426
3230
  exports.getCreateImportContainerURL = getCreateImportContainerURL;
2427
3231
  exports.getDeleteImportContainerURL = getDeleteImportContainerURL;
2428
3232
  exports.getExportOperationsURL = getExportOperationsURL;
3233
+ exports.getFileImportJob = getFileImportJob;
3234
+ exports.getFileImportJobByIdURL = getFileImportJobByIdURL;
3235
+ exports.getFileImportJobDeleteURL = getFileImportJobDeleteURL;
3236
+ exports.getFileImportJobFileType = getFileImportJobFileType;
3237
+ exports.getFileImportJobProcessURL = getFileImportJobProcessURL;
3238
+ exports.getFileImportJobRecords = getFileImportJobRecords;
3239
+ exports.getFileImportJobRecordsURL = getFileImportJobRecordsURL;
3240
+ exports.getFileImportJobsListURL = getFileImportJobsListURL;
3241
+ exports.getFileImportJobsURL = getFileImportJobsURL;
2429
3242
  exports.getFileUploadErrorsCount = getFileUploadErrorsCount;
2430
3243
  exports.getFileUploadURL = getFileUploadURL;
2431
3244
  exports.getImportContainerByKeyURL = getImportContainerByKeyURL;
@@ -2444,26 +3257,49 @@ exports.hasSingleKeyColumn = hasSingleKeyColumn;
2444
3257
  exports.importContainers = importContainers;
2445
3258
  exports.importStatesMap = importStatesMap;
2446
3259
  exports.importsSummaries = importsSummaries;
3260
+ exports.invalidFileImportJobRecordsResponse = invalidFileImportJobRecordsResponse;
3261
+ exports.invalidFileImportJobValidated = invalidFileImportJobValidated;
2447
3262
  exports.invalidFileUploadResponse = invalidFileUploadResponse;
2448
3263
  exports.isAbortError = isAbortError;
2449
3264
  exports.isError = isError;
3265
+ exports.isImportJobInitializing = isImportJobInitializing;
3266
+ exports.isImportJobProcessing = isImportJobProcessing;
3267
+ exports.isImportJobQueued = isImportJobQueued;
3268
+ exports.isImportJobReady = isImportJobReady;
3269
+ exports.isImportJobRejected = isImportJobRejected;
3270
+ exports.isImportJobTerminal = isImportJobTerminal;
3271
+ exports.isImportJobValidated = isImportJobValidated;
2450
3272
  exports.isResourceType = isResourceType;
3273
+ exports.listFileImportJobs = listFileImportJobs;
2451
3274
  exports.manualImports = manualImports;
2452
3275
  exports.mapFileUploadErrorsToUploadFileErrorRows = mapFileUploadErrorsToUploadFileErrorRows;
2453
3276
  exports.mapFormikErrors = mapFormikErrors;
2454
3277
  exports.mapUploadFileErrorsResponseToUploadFileErrorRows = mapUploadFileErrorsResponseToUploadFileErrorRows;
3278
+ exports.pollJobUntilValidated = pollJobUntilValidated;
3279
+ exports.processFileImportJob = processFileImportJob;
3280
+ exports.processFileImportJobResponse = processFileImportJobResponse;
2455
3281
  exports.processUploadedFile = processUploadedFile;
3282
+ exports.shouldContinuePollingForImportValidation = shouldContinuePollingForImportValidation;
2456
3283
  exports.successfulAutomatedImportOperations = successfulAutomatedImportOperations;
2457
3284
  exports.successfulAutomatedImportOperationsResponse = successfulAutomatedImportOperationsResponse;
2458
3285
  exports.successfulFileUploadImportOperations = successfulFileUploadImportOperations;
2459
3286
  exports.successfulFileUploadImportOperationsResponse = successfulFileUploadImportOperationsResponse;
2460
3287
  exports.toBytes = toBytes;
3288
+ exports.toImportApiResourceType = toImportApiResourceType;
2461
3289
  exports.uploadFileForImport = uploadFileForImport;
2462
3290
  exports.useFetchExportOperations = useFetchExportOperations;
3291
+ exports.useFetchFileImportJob = useFetchFileImportJob;
3292
+ exports.useFetchFileImportJobRecords = useFetchFileImportJobRecords;
2463
3293
  exports.useFetchImportContainerDetails = useFetchImportContainerDetails;
2464
3294
  exports.useFetchImportOperations = useFetchImportOperations;
2465
3295
  exports.useFetchImportSummaries = useFetchImportSummaries;
3296
+ exports.useFileImportJobUpload = useFileImportJobUpload;
3297
+ exports.useFileUpload = useFileUpload;
2466
3298
  exports.useImportContainerUpload = useImportContainerUpload;
3299
+ exports.validFileImportJobProcessing = validFileImportJobProcessing;
3300
+ exports.validFileImportJobQueued = validFileImportJobQueued;
3301
+ exports.validFileImportJobRecordsResponse = validFileImportJobRecordsResponse;
3302
+ exports.validFileImportJobValidated = validFileImportJobValidated;
2467
3303
  exports.validFileUploadResponse = validFileUploadResponse;
2468
3304
  exports.validProcessFileResponse = validProcessFileResponse;
2469
3305
  exports.validateDelimiter = validateDelimiter;