@commercetools-frontend-extensions/import-resources-modal 1.11.6 → 1.13.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.
@@ -31,6 +31,7 @@ var _possibleConstructorReturn = require('@babel/runtime-corejs3/helpers/possibl
31
31
  var _getPrototypeOf = require('@babel/runtime-corejs3/helpers/getPrototypeOf');
32
32
  var _inherits = require('@babel/runtime-corejs3/helpers/inherits');
33
33
  var _wrapNativeSuper = require('@babel/runtime-corejs3/helpers/wrapNativeSuper');
34
+ var applicationShell = require('@commercetools-frontend/application-shell');
34
35
  var sentry = require('@commercetools-frontend/sentry');
35
36
  var _mapInstanceProperty = require('@babel/runtime-corejs3/core-js-stable/instance/map');
36
37
  var _sliceInstanceProperty = require('@babel/runtime-corejs3/core-js-stable/instance/slice');
@@ -63,66 +64,90 @@ let CurrentStep$1 = /*#__PURE__*/function (CurrentStep) {
63
64
  return CurrentStep;
64
65
  }({});
65
66
 
66
- function ownKeys$c(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; }
67
- function _objectSpread$c(e) { for (var r = 1; r < arguments.length; r++) { var _context, _context2; var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? _forEachInstanceProperty__default["default"](_context = ownKeys$c(Object(t), !0)).call(_context, function (r) { _defineProperty(e, r, t[r]); }) : _Object$getOwnPropertyDescriptors__default["default"] ? _Object$defineProperties__default["default"](e, _Object$getOwnPropertyDescriptors__default["default"](t)) : _forEachInstanceProperty__default["default"](_context2 = ownKeys$c(Object(t))).call(_context2, function (r) { _Object$defineProperty__default["default"](e, r, _Object$getOwnPropertyDescriptor__default["default"](t, r)); }); } return e; }
67
+ function ownKeys$b(e, r) { var t = _Object$keys__default["default"](e); if (_Object$getOwnPropertySymbols__default["default"]) { var o = _Object$getOwnPropertySymbols__default["default"](e); r && (o = _filterInstanceProperty__default["default"](o).call(o, function (r) { return _Object$getOwnPropertyDescriptor__default["default"](e, r).enumerable; })), t.push.apply(t, o); } return t; }
68
+ function _objectSpread$b(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$b(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$b(Object(t))).call(_context2, function (r) { _Object$defineProperty__default["default"](e, r, _Object$getOwnPropertyDescriptor__default["default"](t, r)); }); } return e; }
68
69
 
69
70
  // TODO: make this resource type specific
70
71
 
71
72
  function reducer(state, action) {
72
- if (action.type === 'setCurrentStep') return _objectSpread$c(_objectSpread$c({}, state), {}, {
73
+ if (action.type === 'setCurrentStep') return _objectSpread$b(_objectSpread$b({}, state), {}, {
73
74
  currentStep: action.currentStep,
74
75
  progress: 0
75
76
  });
76
- if (action.type === 'setUploadFileResponse') return _objectSpread$c(_objectSpread$c({}, state), {}, {
77
+ if (action.type === 'setUploadFileResponse') return _objectSpread$b(_objectSpread$b({}, state), {}, {
77
78
  uploadFileResponse: action.uploadFileResponse
78
79
  });
79
- if (action.type === 'setResourceType') return _objectSpread$c(_objectSpread$c({}, state), {}, {
80
+ if (action.type === 'setResourceType') return _objectSpread$b(_objectSpread$b({}, state), {}, {
80
81
  resourceType: action.resourceType
81
82
  });
82
- if (action.type === 'setContainerKey') return _objectSpread$c(_objectSpread$c({}, state), {}, {
83
+ if (action.type === 'setContainerKey') return _objectSpread$b(_objectSpread$b({}, state), {}, {
83
84
  containerKey: action.containerKey
84
85
  });
85
- if (action.type === 'cancelImport') return _objectSpread$c(_objectSpread$c({}, state), {}, {
86
+ if (action.type === 'cancelImport') return _objectSpread$b(_objectSpread$b({}, state), {}, {
86
87
  currentStep: CurrentStep$1.Upload,
87
88
  containerKey: undefined,
89
+ jobId: undefined,
88
90
  fileUploadErrors: [],
89
91
  uploadFileResponse: undefined,
90
92
  droppedFile: undefined,
91
93
  dropAreaState: 'disabled',
92
- progress: 0
94
+ progress: 0,
95
+ totalResourceCount: undefined,
96
+ validationProcessed: undefined,
97
+ isValidating: false
93
98
  });
94
- if (action.type === 'uploadNewFile') return _objectSpread$c(_objectSpread$c({}, state), {}, {
99
+ if (action.type === 'uploadNewFile') return _objectSpread$b(_objectSpread$b({}, state), {}, {
95
100
  currentStep: CurrentStep$1.Upload,
96
101
  containerKey: undefined,
102
+ jobId: undefined,
97
103
  fileUploadErrors: [],
98
104
  uploadFileResponse: undefined,
99
105
  droppedFile: undefined,
100
106
  dropAreaState: 'ready-for-drop',
101
- progress: 0
107
+ progress: 0,
108
+ totalResourceCount: undefined,
109
+ validationProcessed: undefined,
110
+ isValidating: false
102
111
  });
103
112
  if (action.type === 'setDroppedFile') {
104
- return _objectSpread$c(_objectSpread$c({}, state), {}, {
113
+ return _objectSpread$b(_objectSpread$b({}, state), {}, {
105
114
  droppedFile: action.droppedFile
106
115
  });
107
116
  }
108
117
  if (action.type === 'setFileUploadErrors') {
109
- return _objectSpread$c(_objectSpread$c({}, state), {}, {
118
+ return _objectSpread$b(_objectSpread$b({}, state), {}, {
110
119
  fileUploadErrors: action.fileUploadErrors
111
120
  });
112
121
  }
113
122
  if (action.type === 'setAbortController') {
114
- return _objectSpread$c(_objectSpread$c({}, state), {}, {
123
+ return _objectSpread$b(_objectSpread$b({}, state), {}, {
115
124
  abortController: action.abortController
116
125
  });
117
126
  }
118
127
  if (action.type === 'setProgress') {
119
- return _objectSpread$c(_objectSpread$c({}, state), {}, {
128
+ return _objectSpread$b(_objectSpread$b({}, state), {}, {
120
129
  progress: action.progress
121
130
  });
122
131
  }
123
132
  if (action.type === 'setUploadSettings') {
124
- return _objectSpread$c(_objectSpread$c({}, state), {}, {
125
- settings: _objectSpread$c(_objectSpread$c({}, state.settings), action.settings)
133
+ return _objectSpread$b(_objectSpread$b({}, state), {}, {
134
+ settings: _objectSpread$b(_objectSpread$b({}, state.settings), action.settings)
135
+ });
136
+ }
137
+ if (action.type === 'setJobId') {
138
+ return _objectSpread$b(_objectSpread$b({}, state), {}, {
139
+ jobId: action.jobId
140
+ });
141
+ }
142
+ if (action.type === 'setTotalResourceCount') {
143
+ return _objectSpread$b(_objectSpread$b({}, state), {}, {
144
+ totalResourceCount: action.totalResourceCount
145
+ });
146
+ }
147
+ if (action.type === 'setValidationProgress') {
148
+ return _objectSpread$b(_objectSpread$b({}, state), {}, {
149
+ validationProcessed: action.validationProcessed,
150
+ isValidating: action.isValidating
126
151
  });
127
152
  }
128
153
  throw new Error(getUnknownActionError(action));
@@ -138,21 +163,75 @@ const initialState = {
138
163
  fileUploadErrors: [],
139
164
  resourceType: 'category',
140
165
  containerKey: undefined,
166
+ jobId: undefined,
141
167
  progress: 0,
142
168
  settings: {
143
169
  decimalSeparator: '.'
170
+ },
171
+ totalResourceCount: undefined,
172
+ validationProcessed: undefined,
173
+ isValidating: false
174
+ };
175
+ const initialActions = {
176
+ setCurrentStep(_currentStep) {
177
+ /**/
178
+ },
179
+ cancelImport() {
180
+ /**/
181
+ },
182
+ uploadNewFile() {
183
+ /**/
184
+ },
185
+ setUploadFileResponse(_uploadFileResponse) {
186
+ /**/
187
+ },
188
+ setResourceType(_nextResourceType) {
189
+ /**/
190
+ },
191
+ setDroppedFile(_nextDroppedFile) {
192
+ /**/
193
+ },
194
+ setFileUploadErrors(_fileUploadErrors) {
195
+ /**/
196
+ },
197
+ setContainerKey(_containerKey) {
198
+ /**/
199
+ },
200
+ setAbortController(_abortController) {
201
+ /**/
202
+ },
203
+ setUploadSettings(_settings) {
204
+ /**/
205
+ },
206
+ setProgress(_progress) {
207
+ /**/
208
+ },
209
+ setJobId(_jobId) {
210
+ /**/
211
+ },
212
+ setTotalResourceCount(_totalResourceCount) {
213
+ /**/
214
+ },
215
+ setValidationProgress(_params) {
216
+ /**/
144
217
  }
145
218
  };
146
219
 
147
- function ownKeys$b(e, r) { var t = _Object$keys__default["default"](e); if (_Object$getOwnPropertySymbols__default["default"]) { var o = _Object$getOwnPropertySymbols__default["default"](e); r && (o = _filterInstanceProperty__default["default"](o).call(o, function (r) { return _Object$getOwnPropertyDescriptor__default["default"](e, r).enumerable; })), t.push.apply(t, o); } return t; }
148
- function _objectSpread$b(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$b(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$b(Object(t))).call(_context2, function (r) { _Object$defineProperty__default["default"](e, r, _Object$getOwnPropertyDescriptor__default["default"](t, r)); }); } return e; }
149
- const ImportResourcesContext = /*#__PURE__*/React__default["default"].createContext();
220
+ function ownKeys$a(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; }
221
+ function _objectSpread$a(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$a(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$a(Object(t))).call(_context2, function (r) { _Object$defineProperty__default["default"](e, r, _Object$getOwnPropertyDescriptor__default["default"](t, r)); }); } return e; }
222
+ const ImportResourcesContext = /*#__PURE__*/React__default["default"].createContext({
223
+ state: initialState,
224
+ resourceTypes: [],
225
+ onClose: () => {},
226
+ onStartImportSuccess: () => {},
227
+ actions: initialActions
228
+ });
150
229
  const ImportResourcesProvider = props => {
151
230
  const _useApplicationContex = applicationShellConnectors.useApplicationContext(context => ({
152
231
  projectKey: context.project?.key
153
232
  })),
154
233
  projectKey = _useApplicationContex.projectKey;
155
- const _React$useReducer = React__default["default"].useReducer(reducer, _objectSpread$b(_objectSpread$b({}, initialState), {}, {
234
+ const _React$useReducer = React__default["default"].useReducer(reducer, _objectSpread$a(_objectSpread$a({}, initialState), {}, {
156
235
  resourceType: props.resourceTypes[0]
157
236
  })),
158
237
  _React$useReducer2 = _slicedToArray(_React$useReducer, 2),
@@ -202,9 +281,26 @@ const ImportResourcesProvider = props => {
202
281
  settings: nextSettings
203
282
  });
204
283
  };
284
+ const setJobId = jobId => dispatch({
285
+ type: 'setJobId',
286
+ jobId
287
+ });
288
+ const setTotalResourceCount = totalResourceCount => dispatch({
289
+ type: 'setTotalResourceCount',
290
+ totalResourceCount
291
+ });
292
+ const setValidationProgress = _ref => {
293
+ let processed = _ref.processed,
294
+ isValidating = _ref.isValidating;
295
+ return dispatch({
296
+ type: 'setValidationProgress',
297
+ validationProcessed: processed,
298
+ isValidating
299
+ });
300
+ };
205
301
  const handleClose = function () {
206
- let _ref = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {},
207
- shouldDeleteImportContainer = _ref.shouldDeleteImportContainer;
302
+ let _ref2 = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {},
303
+ shouldDeleteImportContainer = _ref2.shouldDeleteImportContainer;
208
304
  if (state.abortController) state.abortController.abort();
209
305
  if (typeof props.onClose === 'function') props.onClose();
210
306
  // Removes the associated import container when the import is closed
@@ -230,10 +326,13 @@ const ImportResourcesProvider = props => {
230
326
  setResourceType,
231
327
  setDroppedFile,
232
328
  setContainerKey,
329
+ setJobId,
233
330
  setAbortController,
234
331
  setFileUploadErrors,
235
332
  setProgress,
236
- setUploadSettings
333
+ setUploadSettings,
334
+ setTotalResourceCount,
335
+ setValidationProgress
237
336
  }
238
337
  },
239
338
  children: props.children
@@ -290,7 +389,7 @@ function getDropAreaState(flags) {
290
389
  return 'ready-for-drop';
291
390
  }
292
391
 
293
- var messages$5 = reactIntl.defineMessages({
392
+ var messages$6 = reactIntl.defineMessages({
294
393
  dragAndDropCSV: {
295
394
  id: 'ImportResourcesModal.dragAndDropCSV',
296
395
  description: 'The message telling the user to drag and drop CSV file in the file drop area',
@@ -423,7 +522,7 @@ function useImportResourcesContext() {
423
522
  return context;
424
523
  }
425
524
 
426
- var messages$4 = reactIntl.defineMessages({
525
+ var messages$5 = reactIntl.defineMessages({
427
526
  fileSizeExceededTitle: {
428
527
  id: 'ImportResourcesModal.sizeExceededTitle',
429
528
  defaultMessage: 'File size exceeded'
@@ -828,8 +927,46 @@ function resourceTypeToPluralMessage(resourceType) {
828
927
  return message;
829
928
  }
830
929
 
831
- function ownKeys$a(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; }
832
- function _objectSpread$a(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$a(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$a(Object(t))).call(_context2, function (r) { _Object$defineProperty__default["default"](e, r, _Object$getOwnPropertyDescriptor__default["default"](t, r)); }); } return e; }
930
+ const INITIAL_COLUMN_DISPLAY_COUNT = 8;
931
+
932
+ const PERMISSIONS = {
933
+ // Categories
934
+ ManageCategories: 'ManageCategories',
935
+ ViewCategories: 'ViewCategories',
936
+ // Products
937
+ ManageProducts: 'ManageProducts',
938
+ ViewProducts: 'ViewProducts',
939
+ // ProductTypes
940
+ ManageProductTypes: 'ManageProductTypes',
941
+ ViewProductTypes: 'ViewProductTypes',
942
+ // DiscountCodes
943
+ ManageDiscountCodes: 'ManageDiscountCodes',
944
+ ViewDiscountCodes: 'ViewDiscountCodes',
945
+ // Customers
946
+ ManageCustomers: 'ManageCustomers',
947
+ ViewCustomers: 'ViewCustomers',
948
+ // Orders
949
+ ManageOrders: 'ManageOrders',
950
+ ViewOrders: 'ViewOrders',
951
+ // KeyValueDocuments
952
+ ManageKeyValueDocuments: 'ManageKeyValueDocuments',
953
+ ViewKeyValueDocuments: 'ViewKeyValueDocuments',
954
+ // BusinessUnits
955
+ ManageBusinessUnits: 'ManageBusinessUnits',
956
+ ViewBusinessUnits: 'ViewBusinessUnits'
957
+ };
958
+
959
+ 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; }
960
+ function _objectSpread$9(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$9(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$9(Object(t))).call(_context2, function (r) { _Object$defineProperty__default["default"](e, r, _Object$getOwnPropertyDescriptor__default["default"](t, r)); }); } return e; }
961
+ const FILE_IMPORT_JOB_FLOW = 'fileImportJobFlow';
962
+ const DEFAULT_SHORT_LIVED_FLAGS = {
963
+ [FILE_IMPORT_JOB_FLOW]: false
964
+ };
965
+ const DEFAULT_LONG_LIVED_FLAGS = {};
966
+ _objectSpread$9(_objectSpread$9({}, DEFAULT_SHORT_LIVED_FLAGS), DEFAULT_LONG_LIVED_FLAGS);
967
+
968
+ 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; }
969
+ function _objectSpread$8(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$8(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$8(Object(t))).call(_context2, function (r) { _Object$defineProperty__default["default"](e, r, _Object$getOwnPropertyDescriptor__default["default"](t, r)); }); } return e; }
833
970
  const useUpload = () => {
834
971
  const intl = reactIntl.useIntl();
835
972
  const _useApplicationContex = applicationShellConnectors.useApplicationContext(context => ({
@@ -840,39 +977,38 @@ const useUpload = () => {
840
977
  state = _useImportResourcesCo.state,
841
978
  actions = _useImportResourcesCo.actions;
842
979
  const showNotification = actionsGlobal.useShowNotification();
843
- const _useImportContainerUp = operations.useImportContainerUpload({
844
- projectKey: projectKey
980
+ const isFileImportJobFlowEnabled = applicationShell.useFeatureToggle(FILE_IMPORT_JOB_FLOW);
981
+ const _useFileUpload = operations.useFileUpload({
982
+ projectKey: projectKey,
983
+ useJobBasedFlow: isFileImportJobFlowEnabled
845
984
  }),
846
- upload = _useImportContainerUp.upload;
847
- React__default["default"].useEffect(() => {
848
- return () => {
849
- if (state.abortController) state.abortController.abort();
850
- };
851
- }, [state.abortController]);
985
+ upload = _useFileUpload.upload;
852
986
  const isFileValid = async file => {
853
987
  const errors = [];
988
+ const maxFileSizeMB = isFileImportJobFlowEnabled ? operations.IMPORT_MAX_FILE_SIZE_MB : operations.IMPORT_LEGACY_MAX_FILE_SIZE_MB;
989
+ const maxItemCount = isFileImportJobFlowEnabled ? operations.IMPORT_MAX_ITEM_COUNT : operations.IMPORT_LEGACY_MAX_ROW_COUNT;
854
990
  const isDelimiterValid = await operations.validateDelimiter(file, operations.COLUMN_DELIMITERS);
855
991
  if (!isDelimiterValid) errors.push({
856
- title: intl.formatMessage(messages$4.wrongSeparatorTitle),
857
- description: intl.formatMessage(messages$4.wrongSeparatorDescription, {
992
+ title: intl.formatMessage(messages$5.wrongSeparatorTitle),
993
+ description: intl.formatMessage(messages$5.wrongSeparatorDescription, {
858
994
  delimiterList: formatAllowedDelimitersForMessageDisplay(intl)
859
995
  })
860
996
  });
861
997
  const rowCount = await operations.getRowCount(file);
862
998
  if (rowCount < 1) errors.push({
863
- title: intl.formatMessage(messages$4.dropAreaNotEnoughRowsTitle),
864
- description: intl.formatMessage(messages$4.dropAreaNotEnoughRowsDescription)
999
+ title: intl.formatMessage(messages$5.dropAreaNotEnoughRowsTitle),
1000
+ description: intl.formatMessage(messages$5.dropAreaNotEnoughRowsDescription)
865
1001
  });
866
- if (state.resourceType && file.size > operations.toBytes(operations.MAX_FILE_SIZE_MB)) errors.push({
867
- title: intl.formatMessage(messages$4.fileSizeExceededTitle),
868
- description: intl.formatMessage(messages$4.fileSizeExceededDescription, {
869
- fileSizeLimit: intl.formatNumber(operations.MAX_FILE_SIZE_MB)
1002
+ if (state.resourceType && file.size > operations.toBytes(maxFileSizeMB)) errors.push({
1003
+ title: intl.formatMessage(messages$5.fileSizeExceededTitle),
1004
+ description: intl.formatMessage(messages$5.fileSizeExceededDescription, {
1005
+ fileSizeLimit: intl.formatNumber(maxFileSizeMB)
870
1006
  })
871
1007
  });
872
- if (state.resourceType && rowCount > operations.MAX_ROW_COUNT) errors.push({
873
- title: intl.formatMessage(messages$4.rowLimitExceededTitle),
874
- description: intl.formatMessage(messages$4.rowLimitExceededDescription, {
875
- rowLimit: intl.formatNumber(operations.MAX_ROW_COUNT)
1008
+ if (state.resourceType && rowCount > maxItemCount) errors.push({
1009
+ title: intl.formatMessage(messages$5.rowLimitExceededTitle),
1010
+ description: intl.formatMessage(messages$5.rowLimitExceededDescription, {
1011
+ rowLimit: intl.formatNumber(maxItemCount)
876
1012
  })
877
1013
  });
878
1014
  if (errors.length > 0) {
@@ -880,6 +1016,10 @@ const useUpload = () => {
880
1016
  actions.setCurrentStep(CurrentStep$1.UploadResult);
881
1017
  return false;
882
1018
  }
1019
+ if (isFileImportJobFlowEnabled) {
1020
+ const resourceCount = await operations.countUniqueResourcesInCsv(file);
1021
+ actions.setTotalResourceCount(resourceCount);
1022
+ }
883
1023
  return true;
884
1024
  };
885
1025
  const handleUploadError = error => {
@@ -888,18 +1028,22 @@ const useUpload = () => {
888
1028
  return;
889
1029
  }
890
1030
  if (error instanceof operations.HttpError) {
1031
+ actions.setValidationProgress({
1032
+ processed: 0,
1033
+ isValidating: false
1034
+ });
891
1035
  if (error.errorData?.code === 'MISSING_KEY_ERROR') {
892
1036
  actions.setFileUploadErrors([{
893
- title: intl.formatMessage(messages$4.missingRequiredField),
894
- description: intl.formatMessage(messages$4.missingKeyError)
1037
+ title: intl.formatMessage(messages$5.missingRequiredField),
1038
+ description: intl.formatMessage(messages$5.missingKeyError)
895
1039
  }]);
896
1040
  actions.setCurrentStep(CurrentStep$1.UploadResult);
897
1041
  } else if (error.errorData?.code === 'MissingCsvFieldIdentifier') {
898
1042
  const MissingCsvFieldIdentifierError = error.errorData;
899
1043
  const fieldNames = operations.formatKeys(MissingCsvFieldIdentifierError.rowValue);
900
1044
  actions.setFileUploadErrors([{
901
- title: intl.formatMessage(messages$4.missingRequiredField),
902
- description: intl.formatMessage(messages$4.missingRequiredKeys, {
1045
+ title: intl.formatMessage(messages$5.missingRequiredField),
1046
+ description: intl.formatMessage(messages$5.missingRequiredKeys, {
903
1047
  fieldNames
904
1048
  })
905
1049
  }]);
@@ -912,7 +1056,7 @@ const useUpload = () => {
912
1056
  showNotification({
913
1057
  kind: 'error',
914
1058
  domain: constants.DOMAINS.PAGE,
915
- text: intl.formatMessage(messages$4.unexpectedError)
1059
+ text: intl.formatMessage(messages$5.unexpectedError)
916
1060
  });
917
1061
  }
918
1062
  } else {
@@ -935,77 +1079,65 @@ const useUpload = () => {
935
1079
  if (!state.droppedFile || !state.resourceType) return;
936
1080
  const canUpload = await isFileValid(state.droppedFile);
937
1081
  if (!canUpload) return;
1082
+ const abortController = new AbortController();
1083
+ actions.setAbortController(abortController);
938
1084
  actions.setCurrentStep(CurrentStep$1.Uploading);
939
- try {
940
- const shouldApplyPublishSettings = state.resourceType === 'product';
941
- const xhr = await upload({
942
- file: state.droppedFile,
943
- resourceType: state.resourceType,
944
- settings: _objectSpread$a({
945
- format: 'CSV',
946
- decimalSeparator: state.settings?.decimalSeparator
947
- }, shouldApplyPublishSettings ? {
948
- resourceType: state.resourceType === 'product' ? 'product-draft' : state.resourceType,
949
- options: {
950
- publishAllChanges: state.settings?.publish ?? false
951
- }
952
- } : {}),
953
- onSuccess: (fileUploadResponse, containerKey) => {
954
- actions.setContainerKey(containerKey);
955
- actions.setUploadFileResponse(fileUploadResponse);
956
- actions.setCurrentStep(CurrentStep$1.UploadResult);
957
- },
958
- onProgress: progress => {
959
- actions.setProgress(progress);
960
- },
961
- onError: handleUploadError
962
- });
963
- actions.setAbortController(xhr);
964
- } catch (error) {
965
- handleUploadError(error);
966
- actions.setCurrentStep(CurrentStep$1.UploadResult);
967
- }
1085
+ const shouldApplyPublishSettings = state.resourceType === 'product';
1086
+ const uploadSettings = _objectSpread$8({
1087
+ format: 'CSV',
1088
+ decimalSeparator: state.settings?.decimalSeparator
1089
+ }, shouldApplyPublishSettings ? {
1090
+ resourceType: state.resourceType === 'product' ? 'product-draft' : state.resourceType,
1091
+ options: {
1092
+ publishAllChanges: state.settings?.publish ?? false
1093
+ }
1094
+ } : {});
1095
+ await upload({
1096
+ file: state.droppedFile,
1097
+ resourceType: state.resourceType,
1098
+ settings: uploadSettings,
1099
+ abortSignal: abortController.signal,
1100
+ onSuccess: result => {
1101
+ actions.setValidationProgress({
1102
+ processed: 0,
1103
+ isValidating: false
1104
+ });
1105
+ actions.setContainerKey(result.containerKey);
1106
+ if (result.jobId) {
1107
+ actions.setJobId(result.jobId);
1108
+ }
1109
+ const fileUploadResponse = {
1110
+ results: result.summary.results,
1111
+ invalid: result.summary.invalid,
1112
+ valid: result.summary.valid,
1113
+ fileName: state.droppedFile?.name || '',
1114
+ itemsCount: result.summary.total,
1115
+ rowsCount: result.summary.total,
1116
+ columnsCount: result.summary.fieldsCount,
1117
+ fields: result.summary.fields,
1118
+ ignoredFields: result.summary.ignoredFields
1119
+ };
1120
+ actions.setUploadFileResponse(fileUploadResponse);
1121
+ actions.setCurrentStep(CurrentStep$1.UploadResult);
1122
+ },
1123
+ onProgress: progress => {
1124
+ actions.setProgress(progress);
1125
+ },
1126
+ onValidationProgress: job => {
1127
+ const processed = job.summary?.total ?? 0;
1128
+ actions.setValidationProgress({
1129
+ processed,
1130
+ isValidating: true
1131
+ });
1132
+ },
1133
+ onError: handleUploadError
1134
+ });
968
1135
  };
969
1136
  return {
970
1137
  handleUploadAndValidation
971
1138
  };
972
1139
  };
973
1140
 
974
- const INITIAL_COLUMN_DISPLAY_COUNT = 8;
975
-
976
- const PERMISSIONS = {
977
- // Categories
978
- ManageCategories: 'ManageCategories',
979
- ViewCategories: 'ViewCategories',
980
- // Products
981
- ManageProducts: 'ManageProducts',
982
- ViewProducts: 'ViewProducts',
983
- // ProductTypes
984
- ManageProductTypes: 'ManageProductTypes',
985
- ViewProductTypes: 'ViewProductTypes',
986
- // DiscountCodes
987
- ManageDiscountCodes: 'ManageDiscountCodes',
988
- ViewDiscountCodes: 'ViewDiscountCodes',
989
- // Customers
990
- ManageCustomers: 'ManageCustomers',
991
- ViewCustomers: 'ViewCustomers',
992
- // Orders
993
- ManageOrders: 'ManageOrders',
994
- ViewOrders: 'ViewOrders',
995
- // KeyValueDocuments
996
- ManageKeyValueDocuments: 'ManageKeyValueDocuments',
997
- ViewKeyValueDocuments: 'ViewKeyValueDocuments',
998
- // BusinessUnits
999
- ManageBusinessUnits: 'ManageBusinessUnits',
1000
- ViewBusinessUnits: 'ViewBusinessUnits'
1001
- };
1002
-
1003
- 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; }
1004
- function _objectSpread$9(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$9(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$9(Object(t))).call(_context2, function (r) { _Object$defineProperty__default["default"](e, r, _Object$getOwnPropertyDescriptor__default["default"](t, r)); }); } return e; }
1005
- const DEFAULT_SHORT_LIVED_FLAGS = {};
1006
- const DEFAULT_LONG_LIVED_FLAGS = {};
1007
- _objectSpread$9(_objectSpread$9({}, DEFAULT_SHORT_LIVED_FLAGS), DEFAULT_LONG_LIVED_FLAGS);
1008
-
1009
1141
  const useImportPermission = () => {
1010
1142
  const _useApplicationContex = applicationShellConnectors.useApplicationContext(applicationContext => ({
1011
1143
  actionRights: applicationContext.actionRights?.products
@@ -1070,9 +1202,9 @@ const FileDropArea = () => {
1070
1202
  }, [state.resourceType, actions]);
1071
1203
  const handleDropRejected = React__default["default"].useCallback(errorType => {
1072
1204
  const errorMessageMap = {
1073
- 'too-many-files': messages$5.tooManyFilesError,
1074
- 'invalid-type': messages$5.fileFormatNotSupported,
1075
- generic: messages$5.genericError
1205
+ 'too-many-files': messages$6.tooManyFilesError,
1206
+ 'invalid-type': messages$6.fileFormatNotSupported,
1207
+ generic: messages$6.genericError
1076
1208
  };
1077
1209
  showNotification({
1078
1210
  kind: 'error',
@@ -1099,10 +1231,10 @@ const FileDropArea = () => {
1099
1231
  isFileDropped: Boolean(state.droppedFile),
1100
1232
  fileName: state.droppedFile?.name,
1101
1233
  messages: {
1102
- chooseFile: intl.formatMessage(messages$5.chooseFile),
1103
- dragAndDropCSV: intl.formatMessage(messages$5.dragAndDropCSV),
1104
- or: intl.formatMessage(messages$5.or),
1105
- browseButton: intl.formatMessage(messages$5.browseButton)
1234
+ chooseFile: intl.formatMessage(messages$6.chooseFile),
1235
+ dragAndDropCSV: intl.formatMessage(messages$6.dragAndDropCSV),
1236
+ or: intl.formatMessage(messages$6.or),
1237
+ browseButton: intl.formatMessage(messages$6.browseButton)
1106
1238
  }
1107
1239
  })
1108
1240
  });
@@ -1150,14 +1282,14 @@ const Upload = () => {
1150
1282
  children: [jsxRuntime.jsx(uiKit.Grid.Item, {
1151
1283
  children: jsxRuntime.jsx(uiKit.Text.Body, {
1152
1284
  isBold: true,
1153
- intlMessage: messages$5.dataType
1285
+ intlMessage: messages$6.dataType
1154
1286
  })
1155
1287
  }), jsxRuntime.jsx(uiKit.Grid.Item, {
1156
1288
  children: jsxRuntime.jsx(ResourceTypeSelection, {})
1157
1289
  }), jsxRuntime.jsx(uiKit.Grid.Item, {
1158
1290
  children: jsxRuntime.jsx(uiKit.Text.Body, {
1159
1291
  isBold: true,
1160
- intlMessage: messages$5.instructions
1292
+ intlMessage: messages$6.instructions
1161
1293
  })
1162
1294
  }), jsxRuntime.jsx(uiKit.Grid.Item, {
1163
1295
  children: jsxRuntime.jsx(Instructions, {})
@@ -1165,8 +1297,8 @@ const Upload = () => {
1165
1297
  }) : jsxRuntime.jsx(jsxRuntime.Fragment, {
1166
1298
  children: jsxRuntime.jsx(Instructions, {})
1167
1299
  }), jsxRuntime.jsx(operations.InfoBox, {
1168
- title: intl.formatMessage(messages$5.prerequisitesOfImportingData),
1169
- description: intl.formatMessage(messages$5.keysForEveryResource, {
1300
+ title: intl.formatMessage(messages$6.prerequisitesOfImportingData),
1301
+ description: intl.formatMessage(messages$6.keysForEveryResource, {
1170
1302
  link: msg => jsxRuntime.jsx(uiKit.Link, {
1171
1303
  tone: "secondary",
1172
1304
  isExternal: true,
@@ -1181,11 +1313,11 @@ const Upload = () => {
1181
1313
  decimalSeparator
1182
1314
  });
1183
1315
  },
1184
- separatorTitle: intl.formatMessage(messages$5.separatorTitle),
1185
- decimalsSeparatorDescription: intl.formatMessage(messages$5.decimalsSeparatorDescription),
1186
- decimalSeparatorPointLabel: intl.formatMessage(messages$5.decimalSeparatorPoint),
1187
- decimalSeparatorCommaLabel: intl.formatMessage(messages$5.decimalSeparatorComma),
1188
- decimalsLabel: intl.formatMessage(messages$5.decimals)
1316
+ separatorTitle: intl.formatMessage(messages$6.separatorTitle),
1317
+ decimalsSeparatorDescription: intl.formatMessage(messages$6.decimalsSeparatorDescription),
1318
+ decimalSeparatorPointLabel: intl.formatMessage(messages$6.decimalSeparatorPoint),
1319
+ decimalSeparatorCommaLabel: intl.formatMessage(messages$6.decimalSeparatorComma),
1320
+ decimalsLabel: intl.formatMessage(messages$6.decimals)
1189
1321
  }), jsxRuntime.jsx(fullstory.Masking.Mask, {
1190
1322
  children: jsxRuntime.jsx(FileDropArea, {})
1191
1323
  }), jsxRuntime.jsx(operations.UploadSettings, {
@@ -1196,7 +1328,7 @@ const Upload = () => {
1196
1328
  publish: checked
1197
1329
  });
1198
1330
  },
1199
- publishProductsLabel: intl.formatMessage(messages$5.publishProducts),
1331
+ publishProductsLabel: intl.formatMessage(messages$6.publishProducts),
1200
1332
  dataTrackingTarget: "product_import-publish_checkbox",
1201
1333
  canPublishProducts: canPublishProducts
1202
1334
  })]
@@ -1205,7 +1337,7 @@ const Upload = () => {
1205
1337
  });
1206
1338
  };
1207
1339
 
1208
- var messages$3 = reactIntl.defineMessages({
1340
+ var messages$4 = reactIntl.defineMessages({
1209
1341
  row: {
1210
1342
  id: 'ImportResourcesModal.row',
1211
1343
  description: 'In Upload file error modal - "Row" column',
@@ -1238,149 +1370,186 @@ var messages$3 = reactIntl.defineMessages({
1238
1370
  }
1239
1371
  });
1240
1372
 
1241
- 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; }
1242
- 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; }
1243
- const getColumns$1 = () => [{
1373
+ 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; }
1374
+ 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; }
1375
+ const PER_PAGE = 20;
1376
+ const columns = [{
1377
+ key: 'row',
1378
+ label: jsxRuntime.jsx(reactIntl.FormattedMessage, _objectSpread$7({}, messages$4.row)),
1379
+ width: 'max-content'
1380
+ }, {
1244
1381
  key: 'errorType',
1245
- label: jsxRuntime.jsx(reactIntl.FormattedMessage, _objectSpread$8({}, messages$3.errorType)),
1382
+ label: jsxRuntime.jsx(reactIntl.FormattedMessage, _objectSpread$7({}, messages$4.errorType)),
1246
1383
  width: 'max-content'
1247
1384
  }, {
1248
1385
  key: 'details',
1249
- label: jsxRuntime.jsx(reactIntl.FormattedMessage, _objectSpread$8({}, messages$3.details))
1386
+ label: jsxRuntime.jsx(reactIntl.FormattedMessage, _objectSpread$7({}, messages$4.details))
1250
1387
  }];
1251
- const UploadErrorTable = props => {
1252
- var _context;
1388
+ const ServerPaginatedErrorTable = _ref => {
1389
+ let jobId = _ref.jobId,
1390
+ containerKey = _ref.containerKey,
1391
+ totalInvalid = _ref.totalInvalid;
1392
+ const projectKey = applicationShellConnectors.useApplicationContext(context => context.project?.key);
1253
1393
  const pagination = uiKit.usePaginationState({
1254
- perPage: 10
1394
+ perPage: PER_PAGE
1255
1395
  });
1256
- const startIndex = (pagination.page.value - 1) * pagination.perPage.value;
1257
- const endIndex = startIndex + pagination.perPage.value;
1258
- const currentPageRows = _sliceInstanceProperty__default["default"](_context = props.rows).call(_context, startIndex, endIndex);
1259
- const shouldShowPagination = props.rows.length > pagination.perPage.value;
1396
+ const offset = (pagination.page.value - 1) * PER_PAGE;
1397
+ const totalPages = Math.ceil(totalInvalid / PER_PAGE);
1398
+ const _useFetchFileImportJo = operations.useFetchFileImportJobRecords({
1399
+ projectKey: projectKey,
1400
+ importContainerKey: containerKey,
1401
+ jobId,
1402
+ offset,
1403
+ limit: PER_PAGE,
1404
+ isValid: false
1405
+ }),
1406
+ data = _useFetchFileImportJo.data,
1407
+ isLoading = _useFetchFileImportJo.isLoading;
1408
+ const rows = React__default["default"].useMemo(() => data ? operations.mapUploadFileErrorsResponseToUploadFileErrorRows(data.results) : [], [data]);
1409
+ const showInitialLoading = isLoading && !data;
1410
+ if (showInitialLoading) {
1411
+ return jsxRuntime.jsx(uiKit.Spacings.Stack, {
1412
+ alignItems: "center",
1413
+ children: jsxRuntime.jsx(uiKit.LoadingSpinner, {})
1414
+ });
1415
+ }
1260
1416
  return jsxRuntime.jsxs(uiKit.Spacings.Stack, {
1261
1417
  scale: "l",
1262
1418
  children: [jsxRuntime.jsx(uiKit.DataTable, {
1263
1419
  verticalCellAlignment: "center",
1264
1420
  isCondensed: true,
1265
- rows: currentPageRows,
1266
- columns: getColumns$1(),
1267
- itemRenderer: itemRenderer$1
1268
- }), shouldShowPagination && jsxRuntime.jsx(uiKit.PageNavigator, {
1421
+ rows: rows,
1422
+ columns: columns,
1423
+ itemRenderer: itemRenderer
1424
+ }), totalPages > 1 && jsxRuntime.jsx(uiKit.PageNavigator, {
1269
1425
  onPageChange: pagination.page.onChange,
1270
1426
  page: pagination.page.value,
1271
- totalPages: Math.ceil(props.rows.length / pagination.perPage.value)
1427
+ totalPages: totalPages
1272
1428
  })]
1273
1429
  });
1274
1430
  };
1275
- function itemRenderer$1(item, column) {
1431
+ function itemRenderer(item, column) {
1276
1432
  switch (column.key) {
1433
+ case 'row':
1434
+ return item.row;
1277
1435
  case 'errorType':
1278
1436
  return jsxRuntime.jsx(uiKit.Stamp, {
1279
1437
  isCondensed: true,
1280
- label: item.title,
1438
+ label: operations.formatErrorCode(item.code),
1281
1439
  tone: "critical"
1282
1440
  });
1283
1441
  case 'details':
1284
- return jsxRuntime.jsx(uiKit.Text.Body, {
1285
- children: item.description
1442
+ return jsxRuntime.jsxs(uiKit.Spacings.Inline, {
1443
+ scale: "xs",
1444
+ children: [jsxRuntime.jsx(uiKit.Text.Body, {
1445
+ tone: "information",
1446
+ children: item.field
1447
+ }), jsxRuntime.jsx(uiKit.Text.Body, {
1448
+ children: operations.extractErrorDescriptionFromValidationMessage(item.validationMessage)
1449
+ })]
1286
1450
  });
1287
1451
  default:
1288
1452
  throw new operations.UnexpectedColumnError(column.key);
1289
1453
  }
1290
1454
  }
1291
1455
 
1292
- 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; }
1293
- 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; }
1294
- const UploadErrorsModal = () => {
1295
- const intl = reactIntl.useIntl();
1296
- const _useImportResourcesCo = useImportResourcesContext(),
1297
- state = _useImportResourcesCo.state,
1298
- actions = _useImportResourcesCo.actions,
1299
- onClose = _useImportResourcesCo.onClose;
1300
- const errorsCount = state.fileUploadErrors.length;
1301
- return jsxRuntime.jsx(applicationComponents.InfoDialog, {
1302
- size: 16,
1303
- isOpen: true,
1304
- title: intl.formatMessage(sharedMessages[`modalTitle.${state.resourceType}`]),
1305
- onClose: () => onClose(),
1306
- children: jsxRuntime.jsx(fullstory.Masking.Unmask, {
1307
- children: jsxRuntime.jsxs(uiKit.Spacings.Stack, {
1308
- scale: "l",
1309
- children: [jsxRuntime.jsx(fullstory.Masking.Mask, {
1310
- children: jsxRuntime.jsx(uiKit.Text.Body, {
1311
- intlMessage: _objectSpread$7(_objectSpread$7({}, messages$3.uploadErrorDescription), {}, {
1312
- values: {
1313
- fileName: state.droppedFile?.name,
1314
- errorsCount: intl.formatNumber(errorsCount),
1315
- b: getBold$3
1316
- }
1317
- })
1318
- })
1319
- }), jsxRuntime.jsx(UploadErrorTable, {
1320
- rows: operations.mapFileUploadErrorsToUploadFileErrorRows(state.fileUploadErrors)
1321
- }), jsxRuntime.jsxs(uiKit.Spacings.Inline, {
1322
- scale: "m",
1323
- justifyContent: "flex-end",
1324
- children: [jsxRuntime.jsx(uiKit.SecondaryButton, {
1325
- label: intl.formatMessage(sharedMessages.close),
1326
- onClick: () => onClose()
1327
- }), jsxRuntime.jsx(uiKit.PrimaryButton, {
1328
- iconLeft: jsxRuntime.jsx(uiKit.ImportIcon, {}),
1329
- label: intl.formatMessage(messages$3.uploadNewFile),
1330
- onClick: () => actions.uploadNewFile()
1331
- })]
1332
- })]
1333
- })
1334
- })
1335
- });
1336
- };
1337
- function getBold$3(msg) {
1338
- return jsxRuntime.jsx(uiKit.Text.Body, {
1339
- as: "span",
1340
- isBold: true,
1341
- children: msg
1342
- }, crypto.randomUUID());
1343
- }
1344
-
1345
1456
  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; }
1346
- 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; }
1347
- const getColumns = () => [{
1457
+ function _objectSpread$6(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$6(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$6(Object(t))).call(_context2, function (r) { _Object$defineProperty__default["default"](e, r, _Object$getOwnPropertyDescriptor__default["default"](t, r)); }); } return e; }
1458
+ const fileLevelColumns = [{
1459
+ key: 'errorType',
1460
+ label: jsxRuntime.jsx(reactIntl.FormattedMessage, _objectSpread$6({}, messages$4.errorType)),
1461
+ width: 'max-content'
1462
+ }, {
1463
+ key: 'details',
1464
+ label: jsxRuntime.jsx(reactIntl.FormattedMessage, _objectSpread$6({}, messages$4.details))
1465
+ }];
1466
+ const rowLevelColumns = [{
1348
1467
  key: 'row',
1349
- label: jsxRuntime.jsx(reactIntl.FormattedMessage, _objectSpread$6({}, messages$3.row)),
1468
+ label: jsxRuntime.jsx(reactIntl.FormattedMessage, _objectSpread$6({}, messages$4.row)),
1350
1469
  width: 'max-content'
1351
1470
  }, {
1352
1471
  key: 'errorType',
1353
- label: jsxRuntime.jsx(reactIntl.FormattedMessage, _objectSpread$6({}, messages$3.errorType)),
1472
+ label: jsxRuntime.jsx(reactIntl.FormattedMessage, _objectSpread$6({}, messages$4.errorType)),
1354
1473
  width: 'max-content'
1355
1474
  }, {
1356
1475
  key: 'details',
1357
- label: jsxRuntime.jsx(reactIntl.FormattedMessage, _objectSpread$6({}, messages$3.details))
1476
+ label: jsxRuntime.jsx(reactIntl.FormattedMessage, _objectSpread$6({}, messages$4.details))
1358
1477
  }];
1359
- const UploadRowErrorTable = props => {
1360
- var _context;
1478
+ const FileLevelErrorTable = _ref => {
1479
+ let rows = _ref.rows;
1361
1480
  const pagination = uiKit.usePaginationState({
1362
1481
  perPage: 10
1363
1482
  });
1364
1483
  const startIndex = (pagination.page.value - 1) * pagination.perPage.value;
1365
1484
  const endIndex = startIndex + pagination.perPage.value;
1366
- const currentPageRows = _sliceInstanceProperty__default["default"](_context = props.rows).call(_context, startIndex, endIndex);
1367
- const shouldShowPagination = props.rows.length > pagination.perPage.value;
1485
+ const currentPageRows = _sliceInstanceProperty__default["default"](rows).call(rows, startIndex, endIndex);
1486
+ const shouldShowPagination = rows.length > pagination.perPage.value;
1368
1487
  return jsxRuntime.jsxs(uiKit.Spacings.Stack, {
1369
1488
  scale: "l",
1370
1489
  children: [jsxRuntime.jsx(uiKit.DataTable, {
1371
1490
  verticalCellAlignment: "center",
1372
1491
  isCondensed: true,
1373
1492
  rows: currentPageRows,
1374
- columns: getColumns(),
1375
- itemRenderer: itemRenderer
1493
+ columns: fileLevelColumns,
1494
+ itemRenderer: fileLevelItemRenderer
1376
1495
  }), shouldShowPagination && jsxRuntime.jsx(uiKit.PageNavigator, {
1377
1496
  onPageChange: pagination.page.onChange,
1378
1497
  page: pagination.page.value,
1379
- totalPages: Math.ceil(props.rows.length / pagination.perPage.value)
1498
+ totalPages: Math.ceil(rows.length / pagination.perPage.value)
1380
1499
  })]
1381
1500
  });
1382
1501
  };
1383
- function itemRenderer(item, column) {
1502
+ const RowLevelErrorTable = _ref2 => {
1503
+ let rows = _ref2.rows;
1504
+ const pagination = uiKit.usePaginationState({
1505
+ perPage: 10
1506
+ });
1507
+ const startIndex = (pagination.page.value - 1) * pagination.perPage.value;
1508
+ const endIndex = startIndex + pagination.perPage.value;
1509
+ const currentPageRows = _sliceInstanceProperty__default["default"](rows).call(rows, startIndex, endIndex);
1510
+ const shouldShowPagination = rows.length > pagination.perPage.value;
1511
+ return jsxRuntime.jsxs(uiKit.Spacings.Stack, {
1512
+ scale: "l",
1513
+ children: [jsxRuntime.jsx(uiKit.DataTable, {
1514
+ verticalCellAlignment: "center",
1515
+ isCondensed: true,
1516
+ rows: currentPageRows,
1517
+ columns: rowLevelColumns,
1518
+ itemRenderer: rowLevelItemRenderer
1519
+ }), shouldShowPagination && jsxRuntime.jsx(uiKit.PageNavigator, {
1520
+ onPageChange: pagination.page.onChange,
1521
+ page: pagination.page.value,
1522
+ totalPages: Math.ceil(rows.length / pagination.perPage.value)
1523
+ })]
1524
+ });
1525
+ };
1526
+ const UploadErrorTable = props => {
1527
+ if (props.variant === 'row-level') {
1528
+ return jsxRuntime.jsx(RowLevelErrorTable, {
1529
+ rows: props.rows
1530
+ });
1531
+ }
1532
+ return jsxRuntime.jsx(FileLevelErrorTable, {
1533
+ rows: props.rows
1534
+ });
1535
+ };
1536
+ function fileLevelItemRenderer(item, column) {
1537
+ switch (column.key) {
1538
+ case 'errorType':
1539
+ return jsxRuntime.jsx(uiKit.Stamp, {
1540
+ isCondensed: true,
1541
+ label: item.title,
1542
+ tone: "critical"
1543
+ });
1544
+ case 'details':
1545
+ return jsxRuntime.jsx(uiKit.Text.Body, {
1546
+ children: item.description
1547
+ });
1548
+ default:
1549
+ throw new operations.UnexpectedColumnError(column.key);
1550
+ }
1551
+ }
1552
+ function rowLevelItemRenderer(item, column) {
1384
1553
  switch (column.key) {
1385
1554
  case 'row':
1386
1555
  return item.row;
@@ -1407,19 +1576,23 @@ function itemRenderer(item, column) {
1407
1576
 
1408
1577
  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; }
1409
1578
  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; }
1410
- const UploadRowErrorsModal = () => {
1579
+ const UploadErrorsModal = () => {
1411
1580
  const intl = reactIntl.useIntl();
1412
1581
  const _useImportResourcesCo = useImportResourcesContext(),
1413
1582
  state = _useImportResourcesCo.state,
1414
1583
  actions = _useImportResourcesCo.actions,
1415
1584
  onClose = _useImportResourcesCo.onClose;
1416
- const errorsCount = operations.getFileUploadErrorsCount(state.uploadFileResponse?.results);
1585
+ const isNewFlow = Boolean(state.jobId);
1586
+ const hasInvalidRecords = (state.uploadFileResponse?.invalid ?? 0) > 0;
1587
+ const isRowLevelErrors = hasInvalidRecords && (state.uploadFileResponse?.results?.length ?? 0) > 0;
1588
+ const isFileLevelErrors = state.fileUploadErrors.length > 0;
1589
+ const errorsCount = isNewFlow ? state.uploadFileResponse?.invalid ?? 0 : isRowLevelErrors ? operations.getFileUploadErrorsCount(state.uploadFileResponse?.results) : state.fileUploadErrors.length;
1417
1590
  const documentationLink = operations.RESOURCE_TYPE_DOCUMENTATION_LINKS[state.resourceType];
1418
1591
  return jsxRuntime.jsx(applicationComponents.InfoDialog, {
1419
1592
  size: 16,
1420
1593
  isOpen: true,
1421
1594
  title: intl.formatMessage(sharedMessages[`modalTitle.${state.resourceType}`]),
1422
- onClose: onClose,
1595
+ onClose: () => onClose(),
1423
1596
  children: jsxRuntime.jsx(fullstory.Masking.Unmask, {
1424
1597
  children: jsxRuntime.jsxs(uiKit.Spacings.Stack, {
1425
1598
  scale: "l",
@@ -1427,7 +1600,7 @@ const UploadRowErrorsModal = () => {
1427
1600
  scale: "xs",
1428
1601
  children: [jsxRuntime.jsx(fullstory.Masking.Mask, {
1429
1602
  children: jsxRuntime.jsx(uiKit.Text.Body, {
1430
- intlMessage: _objectSpread$5(_objectSpread$5({}, messages$3.uploadErrorDescription), {}, {
1603
+ intlMessage: _objectSpread$5(_objectSpread$5({}, messages$4.uploadErrorDescription), {}, {
1431
1604
  values: {
1432
1605
  fileName: state.droppedFile?.name,
1433
1606
  errorsCount: intl.formatNumber(errorsCount),
@@ -1435,8 +1608,8 @@ const UploadRowErrorsModal = () => {
1435
1608
  }
1436
1609
  })
1437
1610
  })
1438
- }), jsxRuntime.jsx(uiKit.Text.Body, {
1439
- intlMessage: _objectSpread$5(_objectSpread$5({}, messages$3.supportedValuesDocumentation), {}, {
1611
+ }), hasInvalidRecords && jsxRuntime.jsx(uiKit.Text.Body, {
1612
+ intlMessage: _objectSpread$5(_objectSpread$5({}, messages$4.supportedValuesDocumentation), {}, {
1440
1613
  values: {
1441
1614
  documentationLink: msg => jsxRuntime.jsx(uiKit.Link, {
1442
1615
  tone: "secondary",
@@ -1447,8 +1620,16 @@ const UploadRowErrorsModal = () => {
1447
1620
  }
1448
1621
  })
1449
1622
  })]
1450
- }), jsxRuntime.jsx(UploadRowErrorTable, {
1623
+ }), isNewFlow && hasInvalidRecords && state.containerKey && jsxRuntime.jsx(ServerPaginatedErrorTable, {
1624
+ jobId: state.jobId,
1625
+ containerKey: state.containerKey,
1626
+ totalInvalid: state.uploadFileResponse?.invalid ?? 0
1627
+ }), !isNewFlow && isRowLevelErrors && jsxRuntime.jsx(UploadErrorTable, {
1628
+ variant: "row-level",
1451
1629
  rows: operations.mapUploadFileErrorsResponseToUploadFileErrorRows(state.uploadFileResponse?.results)
1630
+ }), isFileLevelErrors && jsxRuntime.jsx(UploadErrorTable, {
1631
+ variant: "file-level",
1632
+ rows: operations.mapFileUploadErrorsToUploadFileErrorRows(state.fileUploadErrors)
1452
1633
  }), jsxRuntime.jsxs(uiKit.Spacings.Inline, {
1453
1634
  scale: "m",
1454
1635
  justifyContent: "flex-end",
@@ -1457,7 +1638,7 @@ const UploadRowErrorsModal = () => {
1457
1638
  onClick: () => onClose()
1458
1639
  }), jsxRuntime.jsx(uiKit.PrimaryButton, {
1459
1640
  iconLeft: jsxRuntime.jsx(uiKit.ImportIcon, {}),
1460
- label: intl.formatMessage(messages$3.uploadNewFile),
1641
+ label: intl.formatMessage(messages$4.uploadNewFile),
1461
1642
  onClick: () => actions.uploadNewFile()
1462
1643
  })]
1463
1644
  })]
@@ -1473,7 +1654,7 @@ function getBold$2(msg) {
1473
1654
  }, crypto.randomUUID());
1474
1655
  }
1475
1656
 
1476
- var messages$2 = reactIntl.defineMessages({
1657
+ var messages$3 = reactIntl.defineMessages({
1477
1658
  startImportButton: {
1478
1659
  id: 'ImportResourcesModal.startImportButton',
1479
1660
  description: 'Label for the modal Start import button',
@@ -1590,7 +1771,7 @@ const ColumnList = props => {
1590
1771
  e.preventDefault();
1591
1772
  setIsExpanded(!isExpanded);
1592
1773
  },
1593
- children: isExpanded ? jsxRuntime.jsx(reactIntl.FormattedMessage, _objectSpread$4({}, messages$2.showLess)) : jsxRuntime.jsx(reactIntl.FormattedMessage, _objectSpread$4({}, messages$2.showMore))
1774
+ children: isExpanded ? jsxRuntime.jsx(reactIntl.FormattedMessage, _objectSpread$4({}, messages$3.showLess)) : jsxRuntime.jsx(reactIntl.FormattedMessage, _objectSpread$4({}, messages$3.showMore))
1594
1775
  })
1595
1776
  })]
1596
1777
  });
@@ -1610,13 +1791,13 @@ function UploadPreviewModal() {
1610
1791
  const resourceType = intl.formatMessage(resourceTypeMessage).toLowerCase();
1611
1792
  const resourceTypePluralMessage = resourceTypeToPluralMessage(state.resourceType);
1612
1793
  const resourceTypePlural = intl.formatMessage(resourceTypePluralMessage).toLowerCase();
1613
- const ignoredColumns = state.uploadFileResponse.ignoredColumns;
1614
- const validatedColumns = operations.getValidatedColumns(state.uploadFileResponse.columns, ignoredColumns);
1794
+ const ignoredFields = state.uploadFileResponse.ignoredFields;
1795
+ const validatedFields = operations.getValidatedColumns(state.uploadFileResponse.fields, ignoredFields);
1615
1796
  return jsxRuntime.jsx(applicationComponents.FormDialog, {
1616
1797
  size: 16,
1617
1798
  isOpen: true,
1618
1799
  title: intl.formatMessage(sharedMessages[`modalTitle.${state.resourceType}`]),
1619
- labelPrimary: intl.formatMessage(messages$2.continue),
1800
+ labelPrimary: intl.formatMessage(messages$3.continue),
1620
1801
  onSecondaryButtonClick: () => onClose({
1621
1802
  shouldDeleteImportContainer: true
1622
1803
  }),
@@ -1635,7 +1816,7 @@ function UploadPreviewModal() {
1635
1816
  children: jsxRuntime.jsxs(uiKit.Spacings.Stack, {
1636
1817
  scale: "m",
1637
1818
  children: [jsxRuntime.jsx("div", {}), jsxRuntime.jsx(uiKit.Text.Body, {
1638
- intlMessage: messages$2.previewOfYourImport
1819
+ intlMessage: messages$3.previewOfYourImport
1639
1820
  }), jsxRuntime.jsx(uiKit.Card, {
1640
1821
  insetScale: "xl",
1641
1822
  children: jsxRuntime.jsxs(uiKit.Spacings.Stack, {
@@ -1647,7 +1828,7 @@ function UploadPreviewModal() {
1647
1828
  children: [jsxRuntime.jsx(uiKit.CheckBoldIcon, {
1648
1829
  color: "success"
1649
1830
  }), jsxRuntime.jsx(uiKit.Text.Body, {
1650
- intlMessage: _objectSpread$3(_objectSpread$3({}, messages$2.itemsToBeImported), {}, {
1831
+ intlMessage: _objectSpread$3(_objectSpread$3({}, messages$3.itemsToBeImported), {}, {
1651
1832
  values: {
1652
1833
  resourceType,
1653
1834
  resourceTypePlural,
@@ -1662,19 +1843,19 @@ function UploadPreviewModal() {
1662
1843
  children: [jsxRuntime.jsx(uiKit.CheckBoldIcon, {
1663
1844
  color: "success"
1664
1845
  }), jsxRuntime.jsx(uiKit.Text.Body, {
1665
- intlMessage: _objectSpread$3(_objectSpread$3({}, messages$2.columnsToBeImported), {}, {
1846
+ intlMessage: _objectSpread$3(_objectSpread$3({}, messages$3.columnsToBeImported), {}, {
1666
1847
  values: {
1667
- columnCount: intl.formatNumber(validatedColumns.length),
1848
+ columnCount: intl.formatNumber(validatedFields.length),
1668
1849
  b: getBold$1
1669
1850
  }
1670
1851
  })
1671
1852
  })]
1672
1853
  })]
1673
1854
  }), jsxRuntime.jsx(ColumnList, {
1674
- columns: validatedColumns
1855
+ columns: validatedFields
1675
1856
  })]
1676
1857
  })
1677
- }), ignoredColumns.length > 0 && jsxRuntime.jsx(uiKit.Card, {
1858
+ }), ignoredFields.length > 0 && jsxRuntime.jsx(uiKit.Card, {
1678
1859
  insetScale: "xl",
1679
1860
  children: jsxRuntime.jsxs(uiKit.Spacings.Stack, {
1680
1861
  scale: "s",
@@ -1683,15 +1864,15 @@ function UploadPreviewModal() {
1683
1864
  children: [jsxRuntime.jsx(uiKit.EyeCrossedIcon, {
1684
1865
  color: "neutral60"
1685
1866
  }), jsxRuntime.jsx(uiKit.Text.Body, {
1686
- intlMessage: _objectSpread$3(_objectSpread$3({}, messages$2.columnsToBeIgnored), {}, {
1867
+ intlMessage: _objectSpread$3(_objectSpread$3({}, messages$3.columnsToBeIgnored), {}, {
1687
1868
  values: {
1688
- columnCount: intl.formatNumber(ignoredColumns.length),
1869
+ columnCount: intl.formatNumber(ignoredFields.length),
1689
1870
  b: getBold$1
1690
1871
  }
1691
1872
  })
1692
1873
  })]
1693
1874
  }), jsxRuntime.jsx(ColumnList, {
1694
- columns: ignoredColumns
1875
+ columns: ignoredFields
1695
1876
  })]
1696
1877
  })
1697
1878
  })]
@@ -1723,13 +1904,13 @@ var _ref2 = process.env.NODE_ENV === "production" ? {
1723
1904
  styles: "width:360px"
1724
1905
  } : {
1725
1906
  name: "g36yzl-ImportRunningTextNotification",
1726
- styles: "width:360px;label:ImportRunningTextNotification;/*# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImltcG9ydC1jb25maXJtYXRpb24tbW9kYWwudHN4Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQXlCWSIsImZpbGUiOiJpbXBvcnQtY29uZmlybWF0aW9uLW1vZGFsLnRzeCIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IHVzZUludGwgfSBmcm9tICdyZWFjdC1pbnRsJ1xuaW1wb3J0IHsgdXNlU2hvd05vdGlmaWNhdGlvbiB9IGZyb20gJ0Bjb21tZXJjZXRvb2xzLWZyb250ZW5kL2FjdGlvbnMtZ2xvYmFsJ1xuaW1wb3J0IHsgQ29uZmlybWF0aW9uRGlhbG9nIH0gZnJvbSAnQGNvbW1lcmNldG9vbHMtZnJvbnRlbmQvYXBwbGljYXRpb24tY29tcG9uZW50cydcbmltcG9ydCB7IHVzZUFwcGxpY2F0aW9uQ29udGV4dCB9IGZyb20gJ0Bjb21tZXJjZXRvb2xzLWZyb250ZW5kL2FwcGxpY2F0aW9uLXNoZWxsLWNvbm5lY3RvcnMnXG5pbXBvcnQgeyBET01BSU5TIH0gZnJvbSAnQGNvbW1lcmNldG9vbHMtZnJvbnRlbmQvY29uc3RhbnRzJ1xuaW1wb3J0IHsgTWFza2luZyBhcyBGdWxsU3RvcnlNYXNraW5nIH0gZnJvbSAnQGNvbW1lcmNldG9vbHMtZnJvbnRlbmQvZnVsbHN0b3J5J1xuaW1wb3J0IHsgTGluaywgU3BhY2luZ3MsIFRleHQgfSBmcm9tICdAY29tbWVyY2V0b29scy1mcm9udGVuZC91aS1raXQnXG5pbXBvcnQge1xuICBpc0Vycm9yLFxuICBwcm9jZXNzVXBsb2FkZWRGaWxlLFxufSBmcm9tICdAY29tbWVyY2V0b29scy1mcm9udGVuZC1leHRlbnNpb25zL29wZXJhdGlvbnMnXG5pbXBvcnQgeyBjc3MgfSBmcm9tICdAZW1vdGlvbi9yZWFjdCdcbmltcG9ydCBtZXNzYWdlcyBmcm9tICcuL21lc3NhZ2VzJ1xuaW1wb3J0IHsgdXNlSW1wb3J0UmVzb3VyY2VzQ29udGV4dCB9IGZyb20gJy4uLy4uL0Bob29rcydcbmltcG9ydCBzaGFyZWRNZXNzYWdlcyBmcm9tICcuLi8uLi9tZXNzYWdlcydcblxuY29uc3QgZ2V0TmV3TGluZSA9ICgpID0+IDxiciBrZXk9XCJicmVha1wiIC8+XG5jb25zdCBnZXRJbXBvcnRMb2dzTGluayA9IChtc2csIHByb2plY3RLZXkpID0+IChcbiAgPExpbmsgdG89e2AvJHtwcm9qZWN0S2V5fS9vcGVyYXRpb25zL2ltcG9ydC9sb2dzYH0ga2V5PVwibGlua1wiPlxuICAgIHttc2d9XG4gIDwvTGluaz5cbilcblxuY29uc3QgSW1wb3J0UnVubmluZ1RleHROb3RpZmljYXRpb24gPSAocHJvcHM6IHsgcHJvamVjdEtleTogc3RyaW5nIH0pID0+IChcbiAgPGRpdlxuICAgIGNzcz17Y3NzYFxuICAgICAgd2lkdGg6IDM2MHB4O1xuICAgIGB9XG4gID5cbiAgICA8VGV4dC5Cb2R5XG4gICAgICBpbnRsTWVzc2FnZT17e1xuICAgICAgICAuLi5tZXNzYWdlcy5pbXBvcnROb3RpZmljYXRpb25TdWNjZXNzTWVzc2FnZSxcbiAgICAgICAgdmFsdWVzOiB7XG4gICAgICAgICAgbmV3bGluZTogZ2V0TmV3TGluZSxcbiAgICAgICAgICBsb2dzTGluazogKG1zZykgPT4gZ2V0SW1wb3J0TG9nc0xpbmsobXNnLCBwcm9wcy5wcm9qZWN0S2V5KSxcbiAgICAgICAgICBiOiBnZXRCb2xkLFxuICAgICAgICB9LFxuICAgICAgfX1cbiAgICAvPlxuICA8L2Rpdj5cbilcblxuY29uc3QgSW1wb3J0UHJlcGFyaW5nVGV4dE5vdGlmaWNhdGlvbiA9IChwcm9wczogeyBwcm9qZWN0S2V5OiBzdHJpbmcgfSkgPT4gKFxuICA8ZGl2XG4gICAgY3NzPXtjc3NgXG4gICAgICB3aWR0aDogMzYwcHg7XG4gICAgYH1cbiAgPlxuICAgIDxUZXh0LkJvZHlcbiAgICAgIGludGxNZXNzYWdlPXt7XG4gICAgICAgIC4uLm1lc3NhZ2VzLmltcG9ydE5vdGlmaWNhdGlvblByZXBhcmVNZXNzYWdlLFxuICAgICAgICB2YWx1ZXM6IHtcbiAgICAgICAgICBuZXdsaW5lOiBnZXROZXdMaW5lLFxuICAgICAgICAgIGxvZ3NMaW5rOiAobXNnKSA9PiBnZXRJbXBvcnRMb2dzTGluayhtc2csIHByb3BzLnByb2plY3RLZXkpLFxuICAgICAgICAgIGI6IGdldEJvbGQsXG4gICAgICAgIH0sXG4gICAgICB9fVxuICAgIC8+XG4gIDwvZGl2PlxuKVxuXG5leHBvcnQgY29uc3QgSW1wb3J0Q29uZmlybWF0aW9uTW9kYWwgPSAoKSA9PiB7XG4gIGNvbnN0IGludGwgPSB1c2VJbnRsKClcbiAgY29uc3QgeyBzdGF0ZSwgb25TdGFydEltcG9ydFN1Y2Nlc3MsIG9uQ2xvc2UgfSA9IHVzZUltcG9ydFJlc291cmNlc0NvbnRleHQoKVxuICBjb25zdCB7IHByb2plY3RLZXksIHByb2plY3ROYW1lIH0gPSB1c2VBcHBsaWNhdGlvbkNvbnRleHQoKGNvbnRleHQpID0+ICh7XG4gICAgcHJvamVjdEtleTogY29udGV4dC5wcm9qZWN0Py5rZXksXG4gICAgcHJvamVjdE5hbWU6IGNvbnRleHQucHJvamVjdD8ubmFtZSxcbiAgfSkpXG5cbiAgY29uc3Qgc2hvd05vdGlmaWNhdGlvbiA9IHVzZVNob3dOb3RpZmljYXRpb24oKVxuXG4gIHJldHVybiAoXG4gICAgPENvbmZpcm1hdGlvbkRpYWxvZ1xuICAgICAgdGl0bGU9e2ludGwuZm9ybWF0TWVzc2FnZShcbiAgICAgICAgc2hhcmVkTWVzc2FnZXNbYG1vZGFsVGl0bGUuJHtzdGF0ZS5yZXNvdXJjZVR5cGV9YF1cbiAgICAgICl9XG4gICAgICBsYWJlbFByaW1hcnk9e2ludGwuZm9ybWF0TWVzc2FnZShtZXNzYWdlcy5zdGFydEltcG9ydEJ1dHRvbil9XG4gICAgICBpc09wZW49e3RydWV9XG4gICAgICBvbkNsb3NlPXsoKSA9PiBvbkNsb3NlKHsgc2hvdWxkRGVsZXRlSW1wb3J0Q29udGFpbmVyOiB0cnVlIH0pfVxuICAgICAgb25DYW5jZWw9eygpID0+IG9uQ2xvc2UoeyBzaG91bGREZWxldGVJbXBvcnRDb250YWluZXI6IHRydWUgfSl9XG4gICAgICBkYXRhQXR0cmlidXRlc1ByaW1hcnlCdXR0b249e3tcbiAgICAgICAgJ2RhdGEtdGVzdC1pZCc6ICdjb25maXJtYXRpb24tZGlhbG9nLWNvbmZpcm0nLFxuICAgICAgfX1cbiAgICAgIGRhdGFBdHRyaWJ1dGVzU2Vjb25kYXJ5QnV0dG9uPXt7XG4gICAgICAgICdkYXRhLXRlc3QtaWQnOiAnY29uZmlybWF0aW9uLWRpYWxvZy1jYW5jZWwnLFxuICAgICAgICAnZGF0YS10cmFja2luZy10YXJnZXQnOiBgJHtzdGF0ZS5yZXNvdXJjZVR5cGV9X2ltcG9ydC1zdGFydF9pbXBvcnRfYnV0dG9uYCxcbiAgICAgIH19XG4gICAgICBvbkNvbmZpcm09e2FzeW5jICgpID0+IHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBjb25zdCBjYW5Db25maXJtID1cbiAgICAgICAgICAgIHByb2plY3RLZXkgJiZcbiAgICAgICAgICAgIHN0YXRlLmNvbnRhaW5lcktleSAmJlxuICAgICAgICAgICAgc3RhdGUuZHJvcHBlZEZpbGU/Lm5hbWUgJiZcbiAgICAgICAgICAgIHN0YXRlLnJlc291cmNlVHlwZVxuICAgICAgICAgIGlmICghY2FuQ29uZmlybSkgcmV0dXJuXG4gICAgICAgICAgb25DbG9zZSgpXG4gICAgICAgICAgc2hvd05vdGlmaWNhdGlvbihcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAga2luZDogJ2luZm8nLFxuICAgICAgICAgICAgICBkb21haW46IERPTUFJTlMuU0lERSxcbiAgICAgICAgICAgICAgLy8gQHRzLWlnbm9yZVxuICAgICAgICAgICAgICB0ZXh0OiA8SW1wb3J0UHJlcGFyaW5nVGV4dE5vdGlmaWNhdGlvbiBwcm9qZWN0S2V5PXtwcm9qZWN0S2V5fSAvPixcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIGRpc21pc3NBZnRlcjogNTAwMCxcbiAgICAgICAgICAgIH1cbiAgICAgICAgICApXG4gICAgICAgICAgYXdhaXQgcHJvY2Vzc1VwbG9hZGVkRmlsZSh7XG4gICAgICAgICAgICBwcm9qZWN0S2V5LFxuICAgICAgICAgICAgaW1wb3J0Q29udGFpbmVyS2V5OiBzdGF0ZS5jb250YWluZXJLZXkhLFxuICAgICAgICAgICAgcmVzb3VyY2VUeXBlOiBzdGF0ZS5yZXNvdXJjZVR5cGUhLFxuICAgICAgICAgIH0pXG4gICAgICAgICAgb25TdGFydEltcG9ydFN1Y2Nlc3MoKVxuICAgICAgICAgIHNob3dOb3RpZmljYXRpb24oXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIGtpbmQ6ICdpbmZvJyxcbiAgICAgICAgICAgICAgZG9tYWluOiBET01BSU5TLlNJREUsXG4gICAgICAgICAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgICAgICAgICAgdGV4dDogPEltcG9ydFJ1bm5pbmdUZXh0Tm90aWZpY2F0aW9uIHByb2plY3RLZXk9e3Byb2plY3RLZXl9IC8+LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgZGlzbWlzc0FmdGVyOiA1MDAwLFxuICAgICAgICAgICAgfVxuICAgICAgICAgIClcbiAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICBvbkNsb3NlKHsgc2hvdWxkRGVsZXRlSW1wb3J0Q29udGFpbmVyOiB0cnVlIH0pXG4gICAgICAgICAgc2hvd05vdGlmaWNhdGlvbih7XG4gICAgICAgICAgICBraW5kOiAnZXJyb3InLFxuICAgICAgICAgICAgZG9tYWluOiBET01BSU5TLlBBR0UsXG4gICAgICAgICAgICB0ZXh0OiBpc0Vycm9yKGVycm9yKSA/IGVycm9yLnRvU3RyaW5nKCkgOiBTdHJpbmcoZXJyb3IpLFxuICAgICAgICAgIH0pXG4gICAgICAgIH1cbiAgICAgIH19XG4gICAgICBzaXplPXsxNn1cbiAgICA+XG4gICAgICA8RnVsbFN0b3J5TWFza2luZy5Vbm1hc2s+XG4gICAgICAgIDxTcGFjaW5ncy5TdGFjayBzY2FsZT1cInhsXCI+XG4gICAgICAgICAgPGRpdj5cbiAgICAgICAgICAgIDxUZXh0LkJvZHlcbiAgICAgICAgICAgICAgaW50bE1lc3NhZ2U9e3tcbiAgICAgICAgICAgICAgICAuLi5tZXNzYWdlcy5jb25maXJtYXRpb25Cb2R5VGV4dCxcbiAgICAgICAgICAgICAgICB2YWx1ZXM6IHtcbiAgICAgICAgICAgICAgICAgIHByb2plY3ROYW1lOiBwcm9qZWN0TmFtZSxcbiAgICAgICAgICAgICAgICAgIGNvdW50OiBpbnRsLmZvcm1hdE51bWJlcihcbiAgICAgICAgICAgICAgICAgICAgc3RhdGU/LnVwbG9hZEZpbGVSZXNwb25zZT8ucm93c0NvdW50IHx8IDBcbiAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgICBib2xkOiBnZXRCb2xkLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAvPlxuICAgICAgICAgICAgPFRleHQuQm9keSBpbnRsTWVzc2FnZT17bWVzc2FnZXMuY29uZmlybWF0aW9uQm9keU5vdGV9IC8+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPFRleHQuQm9keSBpbnRsTWVzc2FnZT17bWVzc2FnZXMuY29uZmlybWF0aW9uQm9keVF1ZXN0aW9ufSAvPlxuICAgICAgICA8L1NwYWNpbmdzLlN0YWNrPlxuICAgICAgPC9GdWxsU3RvcnlNYXNraW5nLlVubWFzaz5cbiAgICA8L0NvbmZpcm1hdGlvbkRpYWxvZz5cbiAgKVxufVxuXG5mdW5jdGlvbiBnZXRCb2xkKG1zZykge1xuICByZXR1cm4gKFxuICAgIDxUZXh0LkJvZHkgYXM9XCJzcGFuXCIgaXNCb2xkIGtleT17Y3J5cHRvLnJhbmRvbVVVSUQoKX0+XG4gICAgICB7bXNnfVxuICAgIDwvVGV4dC5Cb2R5PlxuICApXG59XG4iXX0= */",
1907
+ styles: "width:360px;label:ImportRunningTextNotification;/*# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImltcG9ydC1jb25maXJtYXRpb24tbW9kYWwudHN4Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQTBCWSIsImZpbGUiOiJpbXBvcnQtY29uZmlybWF0aW9uLW1vZGFsLnRzeCIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IHVzZUludGwgfSBmcm9tICdyZWFjdC1pbnRsJ1xuaW1wb3J0IHsgdXNlU2hvd05vdGlmaWNhdGlvbiB9IGZyb20gJ0Bjb21tZXJjZXRvb2xzLWZyb250ZW5kL2FjdGlvbnMtZ2xvYmFsJ1xuaW1wb3J0IHsgQ29uZmlybWF0aW9uRGlhbG9nIH0gZnJvbSAnQGNvbW1lcmNldG9vbHMtZnJvbnRlbmQvYXBwbGljYXRpb24tY29tcG9uZW50cydcbmltcG9ydCB7IHVzZUFwcGxpY2F0aW9uQ29udGV4dCB9IGZyb20gJ0Bjb21tZXJjZXRvb2xzLWZyb250ZW5kL2FwcGxpY2F0aW9uLXNoZWxsLWNvbm5lY3RvcnMnXG5pbXBvcnQgeyBET01BSU5TIH0gZnJvbSAnQGNvbW1lcmNldG9vbHMtZnJvbnRlbmQvY29uc3RhbnRzJ1xuaW1wb3J0IHsgTWFza2luZyBhcyBGdWxsU3RvcnlNYXNraW5nIH0gZnJvbSAnQGNvbW1lcmNldG9vbHMtZnJvbnRlbmQvZnVsbHN0b3J5J1xuaW1wb3J0IHsgTGluaywgU3BhY2luZ3MsIFRleHQgfSBmcm9tICdAY29tbWVyY2V0b29scy1mcm9udGVuZC91aS1raXQnXG5pbXBvcnQge1xuICBpc0Vycm9yLFxuICBwcm9jZXNzVXBsb2FkZWRGaWxlLFxuICBwcm9jZXNzRmlsZUltcG9ydEpvYixcbn0gZnJvbSAnQGNvbW1lcmNldG9vbHMtZnJvbnRlbmQtZXh0ZW5zaW9ucy9vcGVyYXRpb25zJ1xuaW1wb3J0IHsgY3NzIH0gZnJvbSAnQGVtb3Rpb24vcmVhY3QnXG5pbXBvcnQgbWVzc2FnZXMgZnJvbSAnLi9tZXNzYWdlcydcbmltcG9ydCB7IHVzZUltcG9ydFJlc291cmNlc0NvbnRleHQgfSBmcm9tICcuLi8uLi9AaG9va3MnXG5pbXBvcnQgc2hhcmVkTWVzc2FnZXMgZnJvbSAnLi4vLi4vbWVzc2FnZXMnXG5cbmNvbnN0IGdldE5ld0xpbmUgPSAoKSA9PiA8YnIga2V5PVwiYnJlYWtcIiAvPlxuY29uc3QgZ2V0SW1wb3J0TG9nc0xpbmsgPSAobXNnLCBwcm9qZWN0S2V5KSA9PiAoXG4gIDxMaW5rIHRvPXtgLyR7cHJvamVjdEtleX0vb3BlcmF0aW9ucy9pbXBvcnQvbG9nc2B9IGtleT1cImxpbmtcIj5cbiAgICB7bXNnfVxuICA8L0xpbms+XG4pXG5cbmNvbnN0IEltcG9ydFJ1bm5pbmdUZXh0Tm90aWZpY2F0aW9uID0gKHByb3BzOiB7IHByb2plY3RLZXk6IHN0cmluZyB9KSA9PiAoXG4gIDxkaXZcbiAgICBjc3M9e2Nzc2BcbiAgICAgIHdpZHRoOiAzNjBweDtcbiAgICBgfVxuICA+XG4gICAgPFRleHQuQm9keVxuICAgICAgaW50bE1lc3NhZ2U9e3tcbiAgICAgICAgLi4ubWVzc2FnZXMuaW1wb3J0Tm90aWZpY2F0aW9uU3VjY2Vzc01lc3NhZ2UsXG4gICAgICAgIHZhbHVlczoge1xuICAgICAgICAgIG5ld2xpbmU6IGdldE5ld0xpbmUsXG4gICAgICAgICAgbG9nc0xpbms6IChtc2cpID0+IGdldEltcG9ydExvZ3NMaW5rKG1zZywgcHJvcHMucHJvamVjdEtleSksXG4gICAgICAgICAgYjogZ2V0Qm9sZCxcbiAgICAgICAgfSxcbiAgICAgIH19XG4gICAgLz5cbiAgPC9kaXY+XG4pXG5cbmNvbnN0IEltcG9ydFByZXBhcmluZ1RleHROb3RpZmljYXRpb24gPSAocHJvcHM6IHsgcHJvamVjdEtleTogc3RyaW5nIH0pID0+IChcbiAgPGRpdlxuICAgIGNzcz17Y3NzYFxuICAgICAgd2lkdGg6IDM2MHB4O1xuICAgIGB9XG4gID5cbiAgICA8VGV4dC5Cb2R5XG4gICAgICBpbnRsTWVzc2FnZT17e1xuICAgICAgICAuLi5tZXNzYWdlcy5pbXBvcnROb3RpZmljYXRpb25QcmVwYXJlTWVzc2FnZSxcbiAgICAgICAgdmFsdWVzOiB7XG4gICAgICAgICAgbmV3bGluZTogZ2V0TmV3TGluZSxcbiAgICAgICAgICBsb2dzTGluazogKG1zZykgPT4gZ2V0SW1wb3J0TG9nc0xpbmsobXNnLCBwcm9wcy5wcm9qZWN0S2V5KSxcbiAgICAgICAgICBiOiBnZXRCb2xkLFxuICAgICAgICB9LFxuICAgICAgfX1cbiAgICAvPlxuICA8L2Rpdj5cbilcblxuZXhwb3J0IGNvbnN0IEltcG9ydENvbmZpcm1hdGlvbk1vZGFsID0gKCkgPT4ge1xuICBjb25zdCBpbnRsID0gdXNlSW50bCgpXG4gIGNvbnN0IHsgc3RhdGUsIG9uU3RhcnRJbXBvcnRTdWNjZXNzLCBvbkNsb3NlIH0gPSB1c2VJbXBvcnRSZXNvdXJjZXNDb250ZXh0KClcbiAgY29uc3QgeyBwcm9qZWN0S2V5LCBwcm9qZWN0TmFtZSB9ID0gdXNlQXBwbGljYXRpb25Db250ZXh0KChjb250ZXh0KSA9PiAoe1xuICAgIHByb2plY3RLZXk6IGNvbnRleHQucHJvamVjdD8ua2V5LFxuICAgIHByb2plY3ROYW1lOiBjb250ZXh0LnByb2plY3Q/Lm5hbWUsXG4gIH0pKVxuXG4gIGNvbnN0IHNob3dOb3RpZmljYXRpb24gPSB1c2VTaG93Tm90aWZpY2F0aW9uKClcblxuICByZXR1cm4gKFxuICAgIDxDb25maXJtYXRpb25EaWFsb2dcbiAgICAgIHRpdGxlPXtpbnRsLmZvcm1hdE1lc3NhZ2UoXG4gICAgICAgIHNoYXJlZE1lc3NhZ2VzW2Btb2RhbFRpdGxlLiR7c3RhdGUucmVzb3VyY2VUeXBlfWBdXG4gICAgICApfVxuICAgICAgbGFiZWxQcmltYXJ5PXtpbnRsLmZvcm1hdE1lc3NhZ2UobWVzc2FnZXMuc3RhcnRJbXBvcnRCdXR0b24pfVxuICAgICAgaXNPcGVuPXt0cnVlfVxuICAgICAgb25DbG9zZT17KCkgPT4gb25DbG9zZSh7IHNob3VsZERlbGV0ZUltcG9ydENvbnRhaW5lcjogdHJ1ZSB9KX1cbiAgICAgIG9uQ2FuY2VsPXsoKSA9PiBvbkNsb3NlKHsgc2hvdWxkRGVsZXRlSW1wb3J0Q29udGFpbmVyOiB0cnVlIH0pfVxuICAgICAgZGF0YUF0dHJpYnV0ZXNQcmltYXJ5QnV0dG9uPXt7XG4gICAgICAgICdkYXRhLXRlc3QtaWQnOiAnY29uZmlybWF0aW9uLWRpYWxvZy1jb25maXJtJyxcbiAgICAgIH19XG4gICAgICBkYXRhQXR0cmlidXRlc1NlY29uZGFyeUJ1dHRvbj17e1xuICAgICAgICAnZGF0YS10ZXN0LWlkJzogJ2NvbmZpcm1hdGlvbi1kaWFsb2ctY2FuY2VsJyxcbiAgICAgICAgJ2RhdGEtdHJhY2tpbmctdGFyZ2V0JzogYCR7c3RhdGUucmVzb3VyY2VUeXBlfV9pbXBvcnQtc3RhcnRfaW1wb3J0X2J1dHRvbmAsXG4gICAgICB9fVxuICAgICAgb25Db25maXJtPXthc3luYyAoKSA9PiB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgY29uc3QgY2FuQ29uZmlybSA9XG4gICAgICAgICAgICBwcm9qZWN0S2V5ICYmXG4gICAgICAgICAgICBzdGF0ZS5jb250YWluZXJLZXkgJiZcbiAgICAgICAgICAgIHN0YXRlLmRyb3BwZWRGaWxlPy5uYW1lICYmXG4gICAgICAgICAgICBzdGF0ZS5yZXNvdXJjZVR5cGVcbiAgICAgICAgICBpZiAoIWNhbkNvbmZpcm0pIHJldHVyblxuICAgICAgICAgIG9uQ2xvc2UoKVxuICAgICAgICAgIHNob3dOb3RpZmljYXRpb24oXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIGtpbmQ6ICdpbmZvJyxcbiAgICAgICAgICAgICAgZG9tYWluOiBET01BSU5TLlNJREUsXG4gICAgICAgICAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgICAgICAgICAgdGV4dDogPEltcG9ydFByZXBhcmluZ1RleHROb3RpZmljYXRpb24gcHJvamVjdEtleT17cHJvamVjdEtleX0gLz4sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBkaXNtaXNzQWZ0ZXI6IDUwMDAsXG4gICAgICAgICAgICB9XG4gICAgICAgICAgKVxuICAgICAgICAgIGNvbnN0IGlzSm9iQmFzZWRGbG93ID0gISFzdGF0ZS5qb2JJZFxuICAgICAgICAgIGlmIChpc0pvYkJhc2VkRmxvdykge1xuICAgICAgICAgICAgYXdhaXQgcHJvY2Vzc0ZpbGVJbXBvcnRKb2Ioe1xuICAgICAgICAgICAgICBwcm9qZWN0S2V5LFxuICAgICAgICAgICAgICByZXNvdXJjZVR5cGU6IHN0YXRlLnJlc291cmNlVHlwZSEsXG4gICAgICAgICAgICAgIGltcG9ydENvbnRhaW5lcktleTogc3RhdGUuY29udGFpbmVyS2V5ISxcbiAgICAgICAgICAgICAgam9iSWQ6IHN0YXRlLmpvYklkISxcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGF3YWl0IHByb2Nlc3NVcGxvYWRlZEZpbGUoe1xuICAgICAgICAgICAgICBwcm9qZWN0S2V5LFxuICAgICAgICAgICAgICBpbXBvcnRDb250YWluZXJLZXk6IHN0YXRlLmNvbnRhaW5lcktleSEsXG4gICAgICAgICAgICAgIHJlc291cmNlVHlwZTogc3RhdGUucmVzb3VyY2VUeXBlISxcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgfVxuICAgICAgICAgIG9uU3RhcnRJbXBvcnRTdWNjZXNzKClcbiAgICAgICAgICBzaG93Tm90aWZpY2F0aW9uKFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBraW5kOiAnaW5mbycsXG4gICAgICAgICAgICAgIGRvbWFpbjogRE9NQUlOUy5TSURFLFxuICAgICAgICAgICAgICAvLyBAdHMtaWdub3JlXG4gICAgICAgICAgICAgIHRleHQ6IDxJbXBvcnRSdW5uaW5nVGV4dE5vdGlmaWNhdGlvbiBwcm9qZWN0S2V5PXtwcm9qZWN0S2V5fSAvPixcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIGRpc21pc3NBZnRlcjogNTAwMCxcbiAgICAgICAgICAgIH1cbiAgICAgICAgICApXG4gICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgb25DbG9zZSh7IHNob3VsZERlbGV0ZUltcG9ydENvbnRhaW5lcjogdHJ1ZSB9KVxuICAgICAgICAgIHNob3dOb3RpZmljYXRpb24oe1xuICAgICAgICAgICAga2luZDogJ2Vycm9yJyxcbiAgICAgICAgICAgIGRvbWFpbjogRE9NQUlOUy5QQUdFLFxuICAgICAgICAgICAgdGV4dDogaXNFcnJvcihlcnJvcikgPyBlcnJvci50b1N0cmluZygpIDogU3RyaW5nKGVycm9yKSxcbiAgICAgICAgICB9KVxuICAgICAgICB9XG4gICAgICB9fVxuICAgICAgc2l6ZT17MTZ9XG4gICAgPlxuICAgICAgPEZ1bGxTdG9yeU1hc2tpbmcuVW5tYXNrPlxuICAgICAgICA8U3BhY2luZ3MuU3RhY2sgc2NhbGU9XCJ4bFwiPlxuICAgICAgICAgIDxkaXY+XG4gICAgICAgICAgICA8VGV4dC5Cb2R5XG4gICAgICAgICAgICAgIGludGxNZXNzYWdlPXt7XG4gICAgICAgICAgICAgICAgLi4ubWVzc2FnZXMuY29uZmlybWF0aW9uQm9keVRleHQsXG4gICAgICAgICAgICAgICAgdmFsdWVzOiB7XG4gICAgICAgICAgICAgICAgICBwcm9qZWN0TmFtZTogcHJvamVjdE5hbWUsXG4gICAgICAgICAgICAgICAgICBjb3VudDogaW50bC5mb3JtYXROdW1iZXIoXG4gICAgICAgICAgICAgICAgICAgIHN0YXRlPy51cGxvYWRGaWxlUmVzcG9uc2U/LnJvd3NDb3VudCB8fCAwXG4gICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgICAgYm9sZDogZ2V0Qm9sZCxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgLz5cbiAgICAgICAgICAgIDxUZXh0LkJvZHkgaW50bE1lc3NhZ2U9e21lc3NhZ2VzLmNvbmZpcm1hdGlvbkJvZHlOb3RlfSAvPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxUZXh0LkJvZHkgaW50bE1lc3NhZ2U9e21lc3NhZ2VzLmNvbmZpcm1hdGlvbkJvZHlRdWVzdGlvbn0gLz5cbiAgICAgICAgPC9TcGFjaW5ncy5TdGFjaz5cbiAgICAgIDwvRnVsbFN0b3J5TWFza2luZy5Vbm1hc2s+XG4gICAgPC9Db25maXJtYXRpb25EaWFsb2c+XG4gIClcbn1cblxuZnVuY3Rpb24gZ2V0Qm9sZChtc2cpIHtcbiAgcmV0dXJuIChcbiAgICA8VGV4dC5Cb2R5IGFzPVwic3BhblwiIGlzQm9sZCBrZXk9e2NyeXB0by5yYW5kb21VVUlEKCl9PlxuICAgICAge21zZ31cbiAgICA8L1RleHQuQm9keT5cbiAgKVxufVxuIl19 */",
1727
1908
  toString: _EMOTION_STRINGIFIED_CSS_ERROR__
1728
1909
  };
1729
1910
  const ImportRunningTextNotification = props => jsxRuntime.jsx("div", {
1730
1911
  css: _ref2,
1731
1912
  children: jsxRuntime.jsx(uiKit.Text.Body, {
1732
- intlMessage: _objectSpread$2(_objectSpread$2({}, messages$2.importNotificationSuccessMessage), {}, {
1913
+ intlMessage: _objectSpread$2(_objectSpread$2({}, messages$3.importNotificationSuccessMessage), {}, {
1733
1914
  values: {
1734
1915
  newline: getNewLine,
1735
1916
  logsLink: msg => getImportLogsLink(msg, props.projectKey),
@@ -1743,13 +1924,13 @@ var _ref = process.env.NODE_ENV === "production" ? {
1743
1924
  styles: "width:360px"
1744
1925
  } : {
1745
1926
  name: "mjwslu-ImportPreparingTextNotification",
1746
- styles: "width:360px;label:ImportPreparingTextNotification;/*# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImltcG9ydC1jb25maXJtYXRpb24tbW9kYWwudHN4Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQTRDWSIsImZpbGUiOiJpbXBvcnQtY29uZmlybWF0aW9uLW1vZGFsLnRzeCIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IHVzZUludGwgfSBmcm9tICdyZWFjdC1pbnRsJ1xuaW1wb3J0IHsgdXNlU2hvd05vdGlmaWNhdGlvbiB9IGZyb20gJ0Bjb21tZXJjZXRvb2xzLWZyb250ZW5kL2FjdGlvbnMtZ2xvYmFsJ1xuaW1wb3J0IHsgQ29uZmlybWF0aW9uRGlhbG9nIH0gZnJvbSAnQGNvbW1lcmNldG9vbHMtZnJvbnRlbmQvYXBwbGljYXRpb24tY29tcG9uZW50cydcbmltcG9ydCB7IHVzZUFwcGxpY2F0aW9uQ29udGV4dCB9IGZyb20gJ0Bjb21tZXJjZXRvb2xzLWZyb250ZW5kL2FwcGxpY2F0aW9uLXNoZWxsLWNvbm5lY3RvcnMnXG5pbXBvcnQgeyBET01BSU5TIH0gZnJvbSAnQGNvbW1lcmNldG9vbHMtZnJvbnRlbmQvY29uc3RhbnRzJ1xuaW1wb3J0IHsgTWFza2luZyBhcyBGdWxsU3RvcnlNYXNraW5nIH0gZnJvbSAnQGNvbW1lcmNldG9vbHMtZnJvbnRlbmQvZnVsbHN0b3J5J1xuaW1wb3J0IHsgTGluaywgU3BhY2luZ3MsIFRleHQgfSBmcm9tICdAY29tbWVyY2V0b29scy1mcm9udGVuZC91aS1raXQnXG5pbXBvcnQge1xuICBpc0Vycm9yLFxuICBwcm9jZXNzVXBsb2FkZWRGaWxlLFxufSBmcm9tICdAY29tbWVyY2V0b29scy1mcm9udGVuZC1leHRlbnNpb25zL29wZXJhdGlvbnMnXG5pbXBvcnQgeyBjc3MgfSBmcm9tICdAZW1vdGlvbi9yZWFjdCdcbmltcG9ydCBtZXNzYWdlcyBmcm9tICcuL21lc3NhZ2VzJ1xuaW1wb3J0IHsgdXNlSW1wb3J0UmVzb3VyY2VzQ29udGV4dCB9IGZyb20gJy4uLy4uL0Bob29rcydcbmltcG9ydCBzaGFyZWRNZXNzYWdlcyBmcm9tICcuLi8uLi9tZXNzYWdlcydcblxuY29uc3QgZ2V0TmV3TGluZSA9ICgpID0+IDxiciBrZXk9XCJicmVha1wiIC8+XG5jb25zdCBnZXRJbXBvcnRMb2dzTGluayA9IChtc2csIHByb2plY3RLZXkpID0+IChcbiAgPExpbmsgdG89e2AvJHtwcm9qZWN0S2V5fS9vcGVyYXRpb25zL2ltcG9ydC9sb2dzYH0ga2V5PVwibGlua1wiPlxuICAgIHttc2d9XG4gIDwvTGluaz5cbilcblxuY29uc3QgSW1wb3J0UnVubmluZ1RleHROb3RpZmljYXRpb24gPSAocHJvcHM6IHsgcHJvamVjdEtleTogc3RyaW5nIH0pID0+IChcbiAgPGRpdlxuICAgIGNzcz17Y3NzYFxuICAgICAgd2lkdGg6IDM2MHB4O1xuICAgIGB9XG4gID5cbiAgICA8VGV4dC5Cb2R5XG4gICAgICBpbnRsTWVzc2FnZT17e1xuICAgICAgICAuLi5tZXNzYWdlcy5pbXBvcnROb3RpZmljYXRpb25TdWNjZXNzTWVzc2FnZSxcbiAgICAgICAgdmFsdWVzOiB7XG4gICAgICAgICAgbmV3bGluZTogZ2V0TmV3TGluZSxcbiAgICAgICAgICBsb2dzTGluazogKG1zZykgPT4gZ2V0SW1wb3J0TG9nc0xpbmsobXNnLCBwcm9wcy5wcm9qZWN0S2V5KSxcbiAgICAgICAgICBiOiBnZXRCb2xkLFxuICAgICAgICB9LFxuICAgICAgfX1cbiAgICAvPlxuICA8L2Rpdj5cbilcblxuY29uc3QgSW1wb3J0UHJlcGFyaW5nVGV4dE5vdGlmaWNhdGlvbiA9IChwcm9wczogeyBwcm9qZWN0S2V5OiBzdHJpbmcgfSkgPT4gKFxuICA8ZGl2XG4gICAgY3NzPXtjc3NgXG4gICAgICB3aWR0aDogMzYwcHg7XG4gICAgYH1cbiAgPlxuICAgIDxUZXh0LkJvZHlcbiAgICAgIGludGxNZXNzYWdlPXt7XG4gICAgICAgIC4uLm1lc3NhZ2VzLmltcG9ydE5vdGlmaWNhdGlvblByZXBhcmVNZXNzYWdlLFxuICAgICAgICB2YWx1ZXM6IHtcbiAgICAgICAgICBuZXdsaW5lOiBnZXROZXdMaW5lLFxuICAgICAgICAgIGxvZ3NMaW5rOiAobXNnKSA9PiBnZXRJbXBvcnRMb2dzTGluayhtc2csIHByb3BzLnByb2plY3RLZXkpLFxuICAgICAgICAgIGI6IGdldEJvbGQsXG4gICAgICAgIH0sXG4gICAgICB9fVxuICAgIC8+XG4gIDwvZGl2PlxuKVxuXG5leHBvcnQgY29uc3QgSW1wb3J0Q29uZmlybWF0aW9uTW9kYWwgPSAoKSA9PiB7XG4gIGNvbnN0IGludGwgPSB1c2VJbnRsKClcbiAgY29uc3QgeyBzdGF0ZSwgb25TdGFydEltcG9ydFN1Y2Nlc3MsIG9uQ2xvc2UgfSA9IHVzZUltcG9ydFJlc291cmNlc0NvbnRleHQoKVxuICBjb25zdCB7IHByb2plY3RLZXksIHByb2plY3ROYW1lIH0gPSB1c2VBcHBsaWNhdGlvbkNvbnRleHQoKGNvbnRleHQpID0+ICh7XG4gICAgcHJvamVjdEtleTogY29udGV4dC5wcm9qZWN0Py5rZXksXG4gICAgcHJvamVjdE5hbWU6IGNvbnRleHQucHJvamVjdD8ubmFtZSxcbiAgfSkpXG5cbiAgY29uc3Qgc2hvd05vdGlmaWNhdGlvbiA9IHVzZVNob3dOb3RpZmljYXRpb24oKVxuXG4gIHJldHVybiAoXG4gICAgPENvbmZpcm1hdGlvbkRpYWxvZ1xuICAgICAgdGl0bGU9e2ludGwuZm9ybWF0TWVzc2FnZShcbiAgICAgICAgc2hhcmVkTWVzc2FnZXNbYG1vZGFsVGl0bGUuJHtzdGF0ZS5yZXNvdXJjZVR5cGV9YF1cbiAgICAgICl9XG4gICAgICBsYWJlbFByaW1hcnk9e2ludGwuZm9ybWF0TWVzc2FnZShtZXNzYWdlcy5zdGFydEltcG9ydEJ1dHRvbil9XG4gICAgICBpc09wZW49e3RydWV9XG4gICAgICBvbkNsb3NlPXsoKSA9PiBvbkNsb3NlKHsgc2hvdWxkRGVsZXRlSW1wb3J0Q29udGFpbmVyOiB0cnVlIH0pfVxuICAgICAgb25DYW5jZWw9eygpID0+IG9uQ2xvc2UoeyBzaG91bGREZWxldGVJbXBvcnRDb250YWluZXI6IHRydWUgfSl9XG4gICAgICBkYXRhQXR0cmlidXRlc1ByaW1hcnlCdXR0b249e3tcbiAgICAgICAgJ2RhdGEtdGVzdC1pZCc6ICdjb25maXJtYXRpb24tZGlhbG9nLWNvbmZpcm0nLFxuICAgICAgfX1cbiAgICAgIGRhdGFBdHRyaWJ1dGVzU2Vjb25kYXJ5QnV0dG9uPXt7XG4gICAgICAgICdkYXRhLXRlc3QtaWQnOiAnY29uZmlybWF0aW9uLWRpYWxvZy1jYW5jZWwnLFxuICAgICAgICAnZGF0YS10cmFja2luZy10YXJnZXQnOiBgJHtzdGF0ZS5yZXNvdXJjZVR5cGV9X2ltcG9ydC1zdGFydF9pbXBvcnRfYnV0dG9uYCxcbiAgICAgIH19XG4gICAgICBvbkNvbmZpcm09e2FzeW5jICgpID0+IHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBjb25zdCBjYW5Db25maXJtID1cbiAgICAgICAgICAgIHByb2plY3RLZXkgJiZcbiAgICAgICAgICAgIHN0YXRlLmNvbnRhaW5lcktleSAmJlxuICAgICAgICAgICAgc3RhdGUuZHJvcHBlZEZpbGU/Lm5hbWUgJiZcbiAgICAgICAgICAgIHN0YXRlLnJlc291cmNlVHlwZVxuICAgICAgICAgIGlmICghY2FuQ29uZmlybSkgcmV0dXJuXG4gICAgICAgICAgb25DbG9zZSgpXG4gICAgICAgICAgc2hvd05vdGlmaWNhdGlvbihcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAga2luZDogJ2luZm8nLFxuICAgICAgICAgICAgICBkb21haW46IERPTUFJTlMuU0lERSxcbiAgICAgICAgICAgICAgLy8gQHRzLWlnbm9yZVxuICAgICAgICAgICAgICB0ZXh0OiA8SW1wb3J0UHJlcGFyaW5nVGV4dE5vdGlmaWNhdGlvbiBwcm9qZWN0S2V5PXtwcm9qZWN0S2V5fSAvPixcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIGRpc21pc3NBZnRlcjogNTAwMCxcbiAgICAgICAgICAgIH1cbiAgICAgICAgICApXG4gICAgICAgICAgYXdhaXQgcHJvY2Vzc1VwbG9hZGVkRmlsZSh7XG4gICAgICAgICAgICBwcm9qZWN0S2V5LFxuICAgICAgICAgICAgaW1wb3J0Q29udGFpbmVyS2V5OiBzdGF0ZS5jb250YWluZXJLZXkhLFxuICAgICAgICAgICAgcmVzb3VyY2VUeXBlOiBzdGF0ZS5yZXNvdXJjZVR5cGUhLFxuICAgICAgICAgIH0pXG4gICAgICAgICAgb25TdGFydEltcG9ydFN1Y2Nlc3MoKVxuICAgICAgICAgIHNob3dOb3RpZmljYXRpb24oXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIGtpbmQ6ICdpbmZvJyxcbiAgICAgICAgICAgICAgZG9tYWluOiBET01BSU5TLlNJREUsXG4gICAgICAgICAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgICAgICAgICAgdGV4dDogPEltcG9ydFJ1bm5pbmdUZXh0Tm90aWZpY2F0aW9uIHByb2plY3RLZXk9e3Byb2plY3RLZXl9IC8+LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgZGlzbWlzc0FmdGVyOiA1MDAwLFxuICAgICAgICAgICAgfVxuICAgICAgICAgIClcbiAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICBvbkNsb3NlKHsgc2hvdWxkRGVsZXRlSW1wb3J0Q29udGFpbmVyOiB0cnVlIH0pXG4gICAgICAgICAgc2hvd05vdGlmaWNhdGlvbih7XG4gICAgICAgICAgICBraW5kOiAnZXJyb3InLFxuICAgICAgICAgICAgZG9tYWluOiBET01BSU5TLlBBR0UsXG4gICAgICAgICAgICB0ZXh0OiBpc0Vycm9yKGVycm9yKSA/IGVycm9yLnRvU3RyaW5nKCkgOiBTdHJpbmcoZXJyb3IpLFxuICAgICAgICAgIH0pXG4gICAgICAgIH1cbiAgICAgIH19XG4gICAgICBzaXplPXsxNn1cbiAgICA+XG4gICAgICA8RnVsbFN0b3J5TWFza2luZy5Vbm1hc2s+XG4gICAgICAgIDxTcGFjaW5ncy5TdGFjayBzY2FsZT1cInhsXCI+XG4gICAgICAgICAgPGRpdj5cbiAgICAgICAgICAgIDxUZXh0LkJvZHlcbiAgICAgICAgICAgICAgaW50bE1lc3NhZ2U9e3tcbiAgICAgICAgICAgICAgICAuLi5tZXNzYWdlcy5jb25maXJtYXRpb25Cb2R5VGV4dCxcbiAgICAgICAgICAgICAgICB2YWx1ZXM6IHtcbiAgICAgICAgICAgICAgICAgIHByb2plY3ROYW1lOiBwcm9qZWN0TmFtZSxcbiAgICAgICAgICAgICAgICAgIGNvdW50OiBpbnRsLmZvcm1hdE51bWJlcihcbiAgICAgICAgICAgICAgICAgICAgc3RhdGU/LnVwbG9hZEZpbGVSZXNwb25zZT8ucm93c0NvdW50IHx8IDBcbiAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgICBib2xkOiBnZXRCb2xkLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAvPlxuICAgICAgICAgICAgPFRleHQuQm9keSBpbnRsTWVzc2FnZT17bWVzc2FnZXMuY29uZmlybWF0aW9uQm9keU5vdGV9IC8+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPFRleHQuQm9keSBpbnRsTWVzc2FnZT17bWVzc2FnZXMuY29uZmlybWF0aW9uQm9keVF1ZXN0aW9ufSAvPlxuICAgICAgICA8L1NwYWNpbmdzLlN0YWNrPlxuICAgICAgPC9GdWxsU3RvcnlNYXNraW5nLlVubWFzaz5cbiAgICA8L0NvbmZpcm1hdGlvbkRpYWxvZz5cbiAgKVxufVxuXG5mdW5jdGlvbiBnZXRCb2xkKG1zZykge1xuICByZXR1cm4gKFxuICAgIDxUZXh0LkJvZHkgYXM9XCJzcGFuXCIgaXNCb2xkIGtleT17Y3J5cHRvLnJhbmRvbVVVSUQoKX0+XG4gICAgICB7bXNnfVxuICAgIDwvVGV4dC5Cb2R5PlxuICApXG59XG4iXX0= */",
1927
+ styles: "width:360px;label:ImportPreparingTextNotification;/*# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImltcG9ydC1jb25maXJtYXRpb24tbW9kYWwudHN4Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQTZDWSIsImZpbGUiOiJpbXBvcnQtY29uZmlybWF0aW9uLW1vZGFsLnRzeCIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IHVzZUludGwgfSBmcm9tICdyZWFjdC1pbnRsJ1xuaW1wb3J0IHsgdXNlU2hvd05vdGlmaWNhdGlvbiB9IGZyb20gJ0Bjb21tZXJjZXRvb2xzLWZyb250ZW5kL2FjdGlvbnMtZ2xvYmFsJ1xuaW1wb3J0IHsgQ29uZmlybWF0aW9uRGlhbG9nIH0gZnJvbSAnQGNvbW1lcmNldG9vbHMtZnJvbnRlbmQvYXBwbGljYXRpb24tY29tcG9uZW50cydcbmltcG9ydCB7IHVzZUFwcGxpY2F0aW9uQ29udGV4dCB9IGZyb20gJ0Bjb21tZXJjZXRvb2xzLWZyb250ZW5kL2FwcGxpY2F0aW9uLXNoZWxsLWNvbm5lY3RvcnMnXG5pbXBvcnQgeyBET01BSU5TIH0gZnJvbSAnQGNvbW1lcmNldG9vbHMtZnJvbnRlbmQvY29uc3RhbnRzJ1xuaW1wb3J0IHsgTWFza2luZyBhcyBGdWxsU3RvcnlNYXNraW5nIH0gZnJvbSAnQGNvbW1lcmNldG9vbHMtZnJvbnRlbmQvZnVsbHN0b3J5J1xuaW1wb3J0IHsgTGluaywgU3BhY2luZ3MsIFRleHQgfSBmcm9tICdAY29tbWVyY2V0b29scy1mcm9udGVuZC91aS1raXQnXG5pbXBvcnQge1xuICBpc0Vycm9yLFxuICBwcm9jZXNzVXBsb2FkZWRGaWxlLFxuICBwcm9jZXNzRmlsZUltcG9ydEpvYixcbn0gZnJvbSAnQGNvbW1lcmNldG9vbHMtZnJvbnRlbmQtZXh0ZW5zaW9ucy9vcGVyYXRpb25zJ1xuaW1wb3J0IHsgY3NzIH0gZnJvbSAnQGVtb3Rpb24vcmVhY3QnXG5pbXBvcnQgbWVzc2FnZXMgZnJvbSAnLi9tZXNzYWdlcydcbmltcG9ydCB7IHVzZUltcG9ydFJlc291cmNlc0NvbnRleHQgfSBmcm9tICcuLi8uLi9AaG9va3MnXG5pbXBvcnQgc2hhcmVkTWVzc2FnZXMgZnJvbSAnLi4vLi4vbWVzc2FnZXMnXG5cbmNvbnN0IGdldE5ld0xpbmUgPSAoKSA9PiA8YnIga2V5PVwiYnJlYWtcIiAvPlxuY29uc3QgZ2V0SW1wb3J0TG9nc0xpbmsgPSAobXNnLCBwcm9qZWN0S2V5KSA9PiAoXG4gIDxMaW5rIHRvPXtgLyR7cHJvamVjdEtleX0vb3BlcmF0aW9ucy9pbXBvcnQvbG9nc2B9IGtleT1cImxpbmtcIj5cbiAgICB7bXNnfVxuICA8L0xpbms+XG4pXG5cbmNvbnN0IEltcG9ydFJ1bm5pbmdUZXh0Tm90aWZpY2F0aW9uID0gKHByb3BzOiB7IHByb2plY3RLZXk6IHN0cmluZyB9KSA9PiAoXG4gIDxkaXZcbiAgICBjc3M9e2Nzc2BcbiAgICAgIHdpZHRoOiAzNjBweDtcbiAgICBgfVxuICA+XG4gICAgPFRleHQuQm9keVxuICAgICAgaW50bE1lc3NhZ2U9e3tcbiAgICAgICAgLi4ubWVzc2FnZXMuaW1wb3J0Tm90aWZpY2F0aW9uU3VjY2Vzc01lc3NhZ2UsXG4gICAgICAgIHZhbHVlczoge1xuICAgICAgICAgIG5ld2xpbmU6IGdldE5ld0xpbmUsXG4gICAgICAgICAgbG9nc0xpbms6IChtc2cpID0+IGdldEltcG9ydExvZ3NMaW5rKG1zZywgcHJvcHMucHJvamVjdEtleSksXG4gICAgICAgICAgYjogZ2V0Qm9sZCxcbiAgICAgICAgfSxcbiAgICAgIH19XG4gICAgLz5cbiAgPC9kaXY+XG4pXG5cbmNvbnN0IEltcG9ydFByZXBhcmluZ1RleHROb3RpZmljYXRpb24gPSAocHJvcHM6IHsgcHJvamVjdEtleTogc3RyaW5nIH0pID0+IChcbiAgPGRpdlxuICAgIGNzcz17Y3NzYFxuICAgICAgd2lkdGg6IDM2MHB4O1xuICAgIGB9XG4gID5cbiAgICA8VGV4dC5Cb2R5XG4gICAgICBpbnRsTWVzc2FnZT17e1xuICAgICAgICAuLi5tZXNzYWdlcy5pbXBvcnROb3RpZmljYXRpb25QcmVwYXJlTWVzc2FnZSxcbiAgICAgICAgdmFsdWVzOiB7XG4gICAgICAgICAgbmV3bGluZTogZ2V0TmV3TGluZSxcbiAgICAgICAgICBsb2dzTGluazogKG1zZykgPT4gZ2V0SW1wb3J0TG9nc0xpbmsobXNnLCBwcm9wcy5wcm9qZWN0S2V5KSxcbiAgICAgICAgICBiOiBnZXRCb2xkLFxuICAgICAgICB9LFxuICAgICAgfX1cbiAgICAvPlxuICA8L2Rpdj5cbilcblxuZXhwb3J0IGNvbnN0IEltcG9ydENvbmZpcm1hdGlvbk1vZGFsID0gKCkgPT4ge1xuICBjb25zdCBpbnRsID0gdXNlSW50bCgpXG4gIGNvbnN0IHsgc3RhdGUsIG9uU3RhcnRJbXBvcnRTdWNjZXNzLCBvbkNsb3NlIH0gPSB1c2VJbXBvcnRSZXNvdXJjZXNDb250ZXh0KClcbiAgY29uc3QgeyBwcm9qZWN0S2V5LCBwcm9qZWN0TmFtZSB9ID0gdXNlQXBwbGljYXRpb25Db250ZXh0KChjb250ZXh0KSA9PiAoe1xuICAgIHByb2plY3RLZXk6IGNvbnRleHQucHJvamVjdD8ua2V5LFxuICAgIHByb2plY3ROYW1lOiBjb250ZXh0LnByb2plY3Q/Lm5hbWUsXG4gIH0pKVxuXG4gIGNvbnN0IHNob3dOb3RpZmljYXRpb24gPSB1c2VTaG93Tm90aWZpY2F0aW9uKClcblxuICByZXR1cm4gKFxuICAgIDxDb25maXJtYXRpb25EaWFsb2dcbiAgICAgIHRpdGxlPXtpbnRsLmZvcm1hdE1lc3NhZ2UoXG4gICAgICAgIHNoYXJlZE1lc3NhZ2VzW2Btb2RhbFRpdGxlLiR7c3RhdGUucmVzb3VyY2VUeXBlfWBdXG4gICAgICApfVxuICAgICAgbGFiZWxQcmltYXJ5PXtpbnRsLmZvcm1hdE1lc3NhZ2UobWVzc2FnZXMuc3RhcnRJbXBvcnRCdXR0b24pfVxuICAgICAgaXNPcGVuPXt0cnVlfVxuICAgICAgb25DbG9zZT17KCkgPT4gb25DbG9zZSh7IHNob3VsZERlbGV0ZUltcG9ydENvbnRhaW5lcjogdHJ1ZSB9KX1cbiAgICAgIG9uQ2FuY2VsPXsoKSA9PiBvbkNsb3NlKHsgc2hvdWxkRGVsZXRlSW1wb3J0Q29udGFpbmVyOiB0cnVlIH0pfVxuICAgICAgZGF0YUF0dHJpYnV0ZXNQcmltYXJ5QnV0dG9uPXt7XG4gICAgICAgICdkYXRhLXRlc3QtaWQnOiAnY29uZmlybWF0aW9uLWRpYWxvZy1jb25maXJtJyxcbiAgICAgIH19XG4gICAgICBkYXRhQXR0cmlidXRlc1NlY29uZGFyeUJ1dHRvbj17e1xuICAgICAgICAnZGF0YS10ZXN0LWlkJzogJ2NvbmZpcm1hdGlvbi1kaWFsb2ctY2FuY2VsJyxcbiAgICAgICAgJ2RhdGEtdHJhY2tpbmctdGFyZ2V0JzogYCR7c3RhdGUucmVzb3VyY2VUeXBlfV9pbXBvcnQtc3RhcnRfaW1wb3J0X2J1dHRvbmAsXG4gICAgICB9fVxuICAgICAgb25Db25maXJtPXthc3luYyAoKSA9PiB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgY29uc3QgY2FuQ29uZmlybSA9XG4gICAgICAgICAgICBwcm9qZWN0S2V5ICYmXG4gICAgICAgICAgICBzdGF0ZS5jb250YWluZXJLZXkgJiZcbiAgICAgICAgICAgIHN0YXRlLmRyb3BwZWRGaWxlPy5uYW1lICYmXG4gICAgICAgICAgICBzdGF0ZS5yZXNvdXJjZVR5cGVcbiAgICAgICAgICBpZiAoIWNhbkNvbmZpcm0pIHJldHVyblxuICAgICAgICAgIG9uQ2xvc2UoKVxuICAgICAgICAgIHNob3dOb3RpZmljYXRpb24oXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIGtpbmQ6ICdpbmZvJyxcbiAgICAgICAgICAgICAgZG9tYWluOiBET01BSU5TLlNJREUsXG4gICAgICAgICAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgICAgICAgICAgdGV4dDogPEltcG9ydFByZXBhcmluZ1RleHROb3RpZmljYXRpb24gcHJvamVjdEtleT17cHJvamVjdEtleX0gLz4sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBkaXNtaXNzQWZ0ZXI6IDUwMDAsXG4gICAgICAgICAgICB9XG4gICAgICAgICAgKVxuICAgICAgICAgIGNvbnN0IGlzSm9iQmFzZWRGbG93ID0gISFzdGF0ZS5qb2JJZFxuICAgICAgICAgIGlmIChpc0pvYkJhc2VkRmxvdykge1xuICAgICAgICAgICAgYXdhaXQgcHJvY2Vzc0ZpbGVJbXBvcnRKb2Ioe1xuICAgICAgICAgICAgICBwcm9qZWN0S2V5LFxuICAgICAgICAgICAgICByZXNvdXJjZVR5cGU6IHN0YXRlLnJlc291cmNlVHlwZSEsXG4gICAgICAgICAgICAgIGltcG9ydENvbnRhaW5lcktleTogc3RhdGUuY29udGFpbmVyS2V5ISxcbiAgICAgICAgICAgICAgam9iSWQ6IHN0YXRlLmpvYklkISxcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGF3YWl0IHByb2Nlc3NVcGxvYWRlZEZpbGUoe1xuICAgICAgICAgICAgICBwcm9qZWN0S2V5LFxuICAgICAgICAgICAgICBpbXBvcnRDb250YWluZXJLZXk6IHN0YXRlLmNvbnRhaW5lcktleSEsXG4gICAgICAgICAgICAgIHJlc291cmNlVHlwZTogc3RhdGUucmVzb3VyY2VUeXBlISxcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgfVxuICAgICAgICAgIG9uU3RhcnRJbXBvcnRTdWNjZXNzKClcbiAgICAgICAgICBzaG93Tm90aWZpY2F0aW9uKFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBraW5kOiAnaW5mbycsXG4gICAgICAgICAgICAgIGRvbWFpbjogRE9NQUlOUy5TSURFLFxuICAgICAgICAgICAgICAvLyBAdHMtaWdub3JlXG4gICAgICAgICAgICAgIHRleHQ6IDxJbXBvcnRSdW5uaW5nVGV4dE5vdGlmaWNhdGlvbiBwcm9qZWN0S2V5PXtwcm9qZWN0S2V5fSAvPixcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIGRpc21pc3NBZnRlcjogNTAwMCxcbiAgICAgICAgICAgIH1cbiAgICAgICAgICApXG4gICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgb25DbG9zZSh7IHNob3VsZERlbGV0ZUltcG9ydENvbnRhaW5lcjogdHJ1ZSB9KVxuICAgICAgICAgIHNob3dOb3RpZmljYXRpb24oe1xuICAgICAgICAgICAga2luZDogJ2Vycm9yJyxcbiAgICAgICAgICAgIGRvbWFpbjogRE9NQUlOUy5QQUdFLFxuICAgICAgICAgICAgdGV4dDogaXNFcnJvcihlcnJvcikgPyBlcnJvci50b1N0cmluZygpIDogU3RyaW5nKGVycm9yKSxcbiAgICAgICAgICB9KVxuICAgICAgICB9XG4gICAgICB9fVxuICAgICAgc2l6ZT17MTZ9XG4gICAgPlxuICAgICAgPEZ1bGxTdG9yeU1hc2tpbmcuVW5tYXNrPlxuICAgICAgICA8U3BhY2luZ3MuU3RhY2sgc2NhbGU9XCJ4bFwiPlxuICAgICAgICAgIDxkaXY+XG4gICAgICAgICAgICA8VGV4dC5Cb2R5XG4gICAgICAgICAgICAgIGludGxNZXNzYWdlPXt7XG4gICAgICAgICAgICAgICAgLi4ubWVzc2FnZXMuY29uZmlybWF0aW9uQm9keVRleHQsXG4gICAgICAgICAgICAgICAgdmFsdWVzOiB7XG4gICAgICAgICAgICAgICAgICBwcm9qZWN0TmFtZTogcHJvamVjdE5hbWUsXG4gICAgICAgICAgICAgICAgICBjb3VudDogaW50bC5mb3JtYXROdW1iZXIoXG4gICAgICAgICAgICAgICAgICAgIHN0YXRlPy51cGxvYWRGaWxlUmVzcG9uc2U/LnJvd3NDb3VudCB8fCAwXG4gICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgICAgYm9sZDogZ2V0Qm9sZCxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgLz5cbiAgICAgICAgICAgIDxUZXh0LkJvZHkgaW50bE1lc3NhZ2U9e21lc3NhZ2VzLmNvbmZpcm1hdGlvbkJvZHlOb3RlfSAvPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxUZXh0LkJvZHkgaW50bE1lc3NhZ2U9e21lc3NhZ2VzLmNvbmZpcm1hdGlvbkJvZHlRdWVzdGlvbn0gLz5cbiAgICAgICAgPC9TcGFjaW5ncy5TdGFjaz5cbiAgICAgIDwvRnVsbFN0b3J5TWFza2luZy5Vbm1hc2s+XG4gICAgPC9Db25maXJtYXRpb25EaWFsb2c+XG4gIClcbn1cblxuZnVuY3Rpb24gZ2V0Qm9sZChtc2cpIHtcbiAgcmV0dXJuIChcbiAgICA8VGV4dC5Cb2R5IGFzPVwic3BhblwiIGlzQm9sZCBrZXk9e2NyeXB0by5yYW5kb21VVUlEKCl9PlxuICAgICAge21zZ31cbiAgICA8L1RleHQuQm9keT5cbiAgKVxufVxuIl19 */",
1747
1928
  toString: _EMOTION_STRINGIFIED_CSS_ERROR__
1748
1929
  };
1749
1930
  const ImportPreparingTextNotification = props => jsxRuntime.jsx("div", {
1750
1931
  css: _ref,
1751
1932
  children: jsxRuntime.jsx(uiKit.Text.Body, {
1752
- intlMessage: _objectSpread$2(_objectSpread$2({}, messages$2.importNotificationPrepareMessage), {}, {
1933
+ intlMessage: _objectSpread$2(_objectSpread$2({}, messages$3.importNotificationPrepareMessage), {}, {
1753
1934
  values: {
1754
1935
  newline: getNewLine,
1755
1936
  logsLink: msg => getImportLogsLink(msg, props.projectKey),
@@ -1773,7 +1954,7 @@ const ImportConfirmationModal = () => {
1773
1954
  const showNotification = actionsGlobal.useShowNotification();
1774
1955
  return jsxRuntime.jsx(applicationComponents.ConfirmationDialog, {
1775
1956
  title: intl.formatMessage(sharedMessages[`modalTitle.${state.resourceType}`]),
1776
- labelPrimary: intl.formatMessage(messages$2.startImportButton),
1957
+ labelPrimary: intl.formatMessage(messages$3.startImportButton),
1777
1958
  isOpen: true,
1778
1959
  onClose: () => onClose({
1779
1960
  shouldDeleteImportContainer: true
@@ -1803,11 +1984,21 @@ const ImportConfirmationModal = () => {
1803
1984
  }, {
1804
1985
  dismissAfter: 5000
1805
1986
  });
1806
- await operations.processUploadedFile({
1807
- projectKey,
1808
- importContainerKey: state.containerKey,
1809
- resourceType: state.resourceType
1810
- });
1987
+ const isJobBasedFlow = !!state.jobId;
1988
+ if (isJobBasedFlow) {
1989
+ await operations.processFileImportJob({
1990
+ projectKey,
1991
+ resourceType: state.resourceType,
1992
+ importContainerKey: state.containerKey,
1993
+ jobId: state.jobId
1994
+ });
1995
+ } else {
1996
+ await operations.processUploadedFile({
1997
+ projectKey,
1998
+ importContainerKey: state.containerKey,
1999
+ resourceType: state.resourceType
2000
+ });
2001
+ }
1811
2002
  onStartImportSuccess();
1812
2003
  showNotification({
1813
2004
  kind: 'info',
@@ -1836,7 +2027,7 @@ const ImportConfirmationModal = () => {
1836
2027
  scale: "xl",
1837
2028
  children: [jsxRuntime.jsxs("div", {
1838
2029
  children: [jsxRuntime.jsx(uiKit.Text.Body, {
1839
- intlMessage: _objectSpread$2(_objectSpread$2({}, messages$2.confirmationBodyText), {}, {
2030
+ intlMessage: _objectSpread$2(_objectSpread$2({}, messages$3.confirmationBodyText), {}, {
1840
2031
  values: {
1841
2032
  projectName: projectName,
1842
2033
  count: intl.formatNumber(state?.uploadFileResponse?.rowsCount || 0),
@@ -1844,10 +2035,10 @@ const ImportConfirmationModal = () => {
1844
2035
  }
1845
2036
  })
1846
2037
  }), jsxRuntime.jsx(uiKit.Text.Body, {
1847
- intlMessage: messages$2.confirmationBodyNote
2038
+ intlMessage: messages$3.confirmationBodyNote
1848
2039
  })]
1849
2040
  }), jsxRuntime.jsx(uiKit.Text.Body, {
1850
- intlMessage: messages$2.confirmationBodyQuestion
2041
+ intlMessage: messages$3.confirmationBodyQuestion
1851
2042
  })]
1852
2043
  })
1853
2044
  })
@@ -1864,11 +2055,21 @@ function getBold(msg) {
1864
2055
  const UploadResult = () => {
1865
2056
  const _useImportResourcesCo = useImportResourcesContext(),
1866
2057
  state = _useImportResourcesCo.state;
1867
- if (state.fileUploadErrors.length > 0) return jsxRuntime.jsx(UploadErrorsModal, {});
1868
- if (state.uploadFileResponse?.invalid > 0) return jsxRuntime.jsx(UploadRowErrorsModal, {});
2058
+ const hasFileLevelErrors = state.fileUploadErrors.length > 0;
2059
+ const hasRowLevelErrors = (state.uploadFileResponse?.invalid ?? 0) > 0;
2060
+ if (hasFileLevelErrors || hasRowLevelErrors) {
2061
+ return jsxRuntime.jsx(UploadErrorsModal, {});
2062
+ }
1869
2063
  return jsxRuntime.jsx(UploadPreviewModal, {});
1870
2064
  };
1871
2065
 
2066
+ var messages$2 = reactIntl.defineMessages({
2067
+ validatingResources: {
2068
+ id: 'ImportResourcesModal.Uploading.validatingResources',
2069
+ defaultMessage: 'Validating {processed} / {total} {resourceType}'
2070
+ }
2071
+ });
2072
+
1872
2073
  const Uploading = () => {
1873
2074
  const intl = reactIntl.useIntl();
1874
2075
  const _useImportResourcesCo = useImportResourcesContext(),
@@ -1876,6 +2077,12 @@ const Uploading = () => {
1876
2077
  actions = _useImportResourcesCo.actions,
1877
2078
  onClose = _useImportResourcesCo.onClose;
1878
2079
  if (!state.droppedFile?.name) return null;
2080
+ const showValidationProgress = state.isValidating && state.validationProcessed && state.validationProcessed > 0 && state.totalResourceCount && state.resourceType;
2081
+ const statusMessage = showValidationProgress ? intl.formatMessage(messages$2.validatingResources, {
2082
+ processed: intl.formatNumber(state.validationProcessed),
2083
+ total: intl.formatNumber(state.totalResourceCount),
2084
+ resourceType: intl.formatMessage(resourceTypeToPluralMessage(state.resourceType))
2085
+ }) : undefined;
1879
2086
  return jsxRuntime.jsx(operations.UploadingModal, {
1880
2087
  isOpen: true,
1881
2088
  title: intl.formatMessage(sharedMessages[`modalTitle.${state.resourceType}`]),
@@ -1889,7 +2096,8 @@ const Uploading = () => {
1889
2096
  },
1890
2097
  onClose: () => onClose({
1891
2098
  shouldDeleteImportContainer: true
1892
- })
2099
+ }),
2100
+ statusMessage: statusMessage
1893
2101
  });
1894
2102
  };
1895
2103
 
@@ -1932,7 +2140,7 @@ const resourceTypeToDisplayName = resourceType => {
1932
2140
  case IMPORTABLE_RESOURCES.CATEGORY:
1933
2141
  return messages$1.categories;
1934
2142
  default:
1935
- throw new Error(`Unknown resource type: ${resourceType}`);
2143
+ throw new operations.UnexpectedResourceTypeError(resourceType);
1936
2144
  }
1937
2145
  };
1938
2146
  const ResourceTypeSelection = () => {
@@ -1972,13 +2180,16 @@ const Instructions = () => {
1972
2180
  const intl = reactIntl.useIntl();
1973
2181
  const _useImportResourcesCo = useImportResourcesContext(),
1974
2182
  state = _useImportResourcesCo.state;
2183
+ const isFileImportJobFlowEnabled = applicationShell.useFeatureToggle(FILE_IMPORT_JOB_FLOW);
1975
2184
  const templateLink = operations.RESOURCE_TYPE_TEMPLATE_DOWNLOAD_LINKS[state.resourceType];
1976
2185
  const documentationLink = operations.RESOURCE_TYPE_DOCUMENTATION_LINKS[state.resourceType];
2186
+ const maxFileSize = isFileImportJobFlowEnabled ? operations.IMPORT_MAX_FILE_SIZE_MB : operations.IMPORT_LEGACY_MAX_FILE_SIZE_MB;
2187
+ const maxItemCount = isFileImportJobFlowEnabled ? operations.IMPORT_MAX_ITEM_COUNT : operations.IMPORT_LEGACY_MAX_ROW_COUNT;
1977
2188
  return jsxRuntime.jsx(uiKit.Text.Body, {
1978
2189
  intlMessage: _objectSpread$1(_objectSpread$1({}, messages.fileUploadInstructions), {}, {
1979
2190
  values: {
1980
- fileSize: intl.formatNumber(operations.MAX_FILE_SIZE_MB),
1981
- rowLimit: intl.formatNumber(operations.MAX_ROW_COUNT),
2191
+ fileSize: intl.formatNumber(maxFileSize),
2192
+ rowLimit: intl.formatNumber(maxItemCount),
1982
2193
  csvTemplateLink: msg => jsxRuntime.jsx(uiKit.Link, {
1983
2194
  tone: "secondary",
1984
2195
  isExternal: true,