@commercetools-frontend-extensions/export-resources-modal 5.0.3 → 5.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (24) hide show
  1. package/dist/{active-drag-drop-area-90d26dc9.cjs.prod.js → active-drag-drop-area-56db6919.cjs.dev.js} +4 -3
  2. package/dist/{active-drag-drop-area-ab9704b7.esm.js → active-drag-drop-area-69b691d5.esm.js} +2 -1
  3. package/dist/{active-drag-drop-area-b1213fdd.cjs.dev.js → active-drag-drop-area-7fd53916.cjs.prod.js} +4 -3
  4. package/dist/commercetools-frontend-extensions-export-resources-modal.cjs.dev.js +4 -3
  5. package/dist/commercetools-frontend-extensions-export-resources-modal.cjs.prod.js +4 -3
  6. package/dist/commercetools-frontend-extensions-export-resources-modal.esm.js +4 -3
  7. package/dist/declarations/src/@constants/export-types.d.ts +4 -3
  8. package/dist/declarations/src/@hooks/index.d.ts +1 -1
  9. package/dist/declarations/src/@hooks/use-validate-export-operation.d.ts +33 -0
  10. package/dist/declarations/src/@types/export-api.d.ts +5 -1
  11. package/dist/declarations/src/@types/export-resources-modal-context.d.ts +1 -0
  12. package/dist/declarations/src/@types/export-resources-modal-types.d.ts +2 -1
  13. package/dist/declarations/src/@types/form.d.ts +5 -0
  14. package/dist/{enabled-drop-area-cd527058.esm.js → enabled-drop-area-48a953a6.esm.js} +2 -1
  15. package/dist/{enabled-drop-area-f4b604d3.cjs.prod.js → enabled-drop-area-4c8d613f.cjs.prod.js} +2 -1
  16. package/dist/{enabled-drop-area-0453fd0d.cjs.dev.js → enabled-drop-area-a5fe741d.cjs.dev.js} +2 -1
  17. package/dist/{file-dropped-area-2e6723f0.cjs.dev.js → file-dropped-area-5979698c.cjs.dev.js} +2 -1
  18. package/dist/{file-dropped-area-38e2f1eb.cjs.prod.js → file-dropped-area-b685a683.cjs.prod.js} +2 -1
  19. package/dist/{file-dropped-area-d44a1e01.esm.js → file-dropped-area-c8a5f539.esm.js} +2 -1
  20. package/dist/{index-44d6c0b4.cjs.dev.js → index-32b358db.cjs.dev.js} +391 -273
  21. package/dist/{index-6820b049.cjs.prod.js → index-bcefd2cf.cjs.prod.js} +391 -273
  22. package/dist/{index-f05f7a63.esm.js → index-f7e098bb.esm.js} +391 -274
  23. package/package.json +5 -5
  24. package/dist/declarations/src/@hooks/use-validate-imported-headers.d.ts +0 -15
@@ -43,6 +43,7 @@ var _Set = require('@babel/runtime-corejs3/core-js-stable/set');
43
43
  var _sortInstanceProperty = require('@babel/runtime-corejs3/core-js-stable/instance/sort');
44
44
  var _indexOfInstanceProperty = require('@babel/runtime-corejs3/core-js-stable/instance/index-of');
45
45
  var _trimInstanceProperty = require('@babel/runtime-corejs3/core-js-stable/instance/trim');
46
+ var _bindInstanceProperty = require('@babel/runtime-corejs3/core-js-stable/instance/bind');
46
47
  var _Promise = require('@babel/runtime-corejs3/core-js-stable/promise');
47
48
  var _sliceInstanceProperty = require('@babel/runtime-corejs3/core-js-stable/instance/slice');
48
49
  var _Object$values = require('@babel/runtime-corejs3/core-js-stable/object/values');
@@ -91,6 +92,7 @@ var _Set__default = /*#__PURE__*/_interopDefault(_Set);
91
92
  var _sortInstanceProperty__default = /*#__PURE__*/_interopDefault(_sortInstanceProperty);
92
93
  var _indexOfInstanceProperty__default = /*#__PURE__*/_interopDefault(_indexOfInstanceProperty);
93
94
  var _trimInstanceProperty__default = /*#__PURE__*/_interopDefault(_trimInstanceProperty);
95
+ var _bindInstanceProperty__default = /*#__PURE__*/_interopDefault(_bindInstanceProperty);
94
96
  var _Promise__default = /*#__PURE__*/_interopDefault(_Promise);
95
97
  var _sliceInstanceProperty__default = /*#__PURE__*/_interopDefault(_sliceInstanceProperty);
96
98
  var _Object$values__default = /*#__PURE__*/_interopDefault(_Object$values);
@@ -620,6 +622,26 @@ var messages = reactIntl.defineMessages({
620
622
  id: 'ExportResourcesModal.uploadErrorsDetected',
621
623
  description: 'Message shown when errors are detected during file upload',
622
624
  defaultMessage: 'There are <b>{total}</b> errors detected while uploading the file <b>{fileName}</b>. Use <templateLink>our template</templateLink> to review the right formatting and supported values, try exporting using our field selection first or visit <documentationLink>our documentation</documentationLink> for further information.'
625
+ },
626
+ queryPredicate: {
627
+ id: 'ExportResourcesModal.queryPredicate',
628
+ description: 'Label for query predicate option',
629
+ defaultMessage: 'Query predicate'
630
+ },
631
+ invalidQueryPredicate: {
632
+ id: 'ExportResourcesModal.invalidQueryPredicate',
633
+ description: 'Error when query predicate field is not valid',
634
+ defaultMessage: 'There is an error with the query predicate. Make sure the syntax is correct.'
635
+ },
636
+ missingQueryPredicateError: {
637
+ id: 'ExportResourcesModal.missingQueryPredicateError',
638
+ description: 'Error when query predicate field is missing',
639
+ defaultMessage: 'Please enter a query predicate'
640
+ },
641
+ noResourcesToExport: {
642
+ id: 'ExportResourcesModal.noResourcesToExport',
643
+ description: 'Error message when there are no resources to export',
644
+ defaultMessage: 'No resources match your query predicate. Please check your query predicate and try again.'
623
645
  }
624
646
  });
625
647
 
@@ -643,6 +665,16 @@ function renderLocaleError(key) {
643
665
  return null;
644
666
  }
645
667
  }
668
+ const renderQueryPredicateError = key => {
669
+ switch (key) {
670
+ case 'missing':
671
+ return jsxRuntime.jsx(reactIntl.FormattedMessage, _objectSpread$h({}, messages.missingQueryPredicateError));
672
+ case 'invalidInput':
673
+ return jsxRuntime.jsx(reactIntl.FormattedMessage, _objectSpread$h({}, messages.invalidQueryPredicate));
674
+ default:
675
+ return null;
676
+ }
677
+ };
646
678
 
647
679
  function _callSuper$3(t, o, e) { return o = _getPrototypeOf(o), _possibleConstructorReturn(t, _isNativeReflectConstruct$3() ? _Reflect$construct__default["default"](o, e || [], _getPrototypeOf(t).constructor) : o.apply(t, e)); }
648
680
  function _isNativeReflectConstruct$3() { try { var t = !Boolean.prototype.valueOf.call(_Reflect$construct__default["default"](Boolean, [], function () {})); } catch (t) {} return (_isNativeReflectConstruct$3 = function () { return !!t; })(); }
@@ -787,7 +819,8 @@ const EXPORT_OPERATION_STATES = {
787
819
  const EXPORT_TYPES = {
788
820
  ALL: 'all',
789
821
  FILTERED: 'filtered',
790
- SELECTED: 'selected'
822
+ SELECTED: 'selected',
823
+ QUERY_PREDICATE: 'query-predicate'
791
824
  };
792
825
 
793
826
  const EXPORTABLE_RESOURCES = {
@@ -864,6 +897,140 @@ const DEFAULT_SHORT_LIVED_FLAGS = {};
864
897
  const DEFAULT_LONG_LIVED_FLAGS = {};
865
898
  _objectSpread$f(_objectSpread$f({}, DEFAULT_SHORT_LIVED_FLAGS), DEFAULT_LONG_LIVED_FLAGS);
866
899
 
900
+ function resourceTypeToFileName(resourceType, locale) {
901
+ var _context;
902
+ const date = new Date();
903
+ const dateFormatter = new Intl.DateTimeFormat(locale, {
904
+ year: '2-digit',
905
+ month: '2-digit',
906
+ day: '2-digit',
907
+ hour: '2-digit',
908
+ minute: '2-digit',
909
+ hour12: false
910
+ });
911
+ const parts = dateFormatter.formatToParts(date);
912
+ const dateParts = _reduceInstanceProperty__default["default"](parts).call(parts, (acc, part) => {
913
+ if (part.type !== 'literal') {
914
+ acc[part.type] = part.value;
915
+ }
916
+ return acc;
917
+ }, {});
918
+ const orderedDateParts = _mapInstanceProperty__default["default"](_context = _filterInstanceProperty__default["default"](parts).call(parts, part => part.type === 'day' || part.type === 'month' || part.type === 'year')).call(_context, part => dateParts[part.type]).join('-');
919
+ const formattedDate = `${orderedDateParts}_${dateParts.hour}-${dateParts.minute}`;
920
+ const resourceTypeMap = {
921
+ [EXPORTABLE_RESOURCES.CATEGORY]: 'Categories',
922
+ [EXPORTABLE_RESOURCES.PRODUCT]: 'Products',
923
+ [EXPORTABLE_RESOURCES.PRODUCT_TYPE]: 'Product_Types',
924
+ [EXPORTABLE_RESOURCES.DISCOUNT_CODE]: 'Discount_Codes',
925
+ [EXPORTABLE_RESOURCES.INVENTORY_ENTRY]: 'Inventories',
926
+ [EXPORTABLE_RESOURCES.CUSTOMER]: 'Customers',
927
+ [EXPORTABLE_RESOURCES.ORDER]: 'Orders'
928
+ };
929
+ const displayName = resourceTypeMap[resourceType];
930
+ if (!displayName) {
931
+ throw new UnexpectedResourceTypeError(resourceType);
932
+ }
933
+ return `${displayName}_Export_${formattedDate}`;
934
+ }
935
+ function mapLocalesToOptions(locales) {
936
+ return _mapInstanceProperty__default["default"](locales).call(locales, locale => ({
937
+ value: locale,
938
+ label: locale
939
+ }));
940
+ }
941
+ function isFilledArray(maybeArray) {
942
+ return _Array$isArray__default["default"](maybeArray) && maybeArray.length > 0;
943
+ }
944
+ function appendCsvOrJsonExtensionIfAbsent(fileName, fileFormat) {
945
+ const extensionRegex = /\.(csv|json)$/i;
946
+ if (!extensionRegex.test(fileName)) return `${fileName}.${fileFormat}`;
947
+ return fileName;
948
+ }
949
+ function getExportLogsLink(projectKey, msg) {
950
+ return jsxRuntime.jsx(uiKit.Link, {
951
+ to: `/${projectKey}/operations/export/logs`,
952
+ children: msg
953
+ }, "link");
954
+ }
955
+ const extractFieldNamesAndAdditionalFieldExtensions = fields => {
956
+ const result = _reduceInstanceProperty__default["default"](fields).call(fields, (acc, field) => {
957
+ if (field.extendedFieldNames) {
958
+ return [...acc, field.name, ...field.extendedFieldNames];
959
+ }
960
+ return [...acc, field.name];
961
+ }, []);
962
+ return [...new _Set__default["default"](result)];
963
+ };
964
+ function sortFieldsByFieldOrder(_ref) {
965
+ let fieldNames = _ref.fieldNames,
966
+ fieldOrder = _ref.fieldOrder;
967
+ if (isFilledArray(fieldOrder)) {
968
+ return _sortInstanceProperty__default["default"](fieldNames).call(fieldNames, (a, b) => {
969
+ let orderA = _indexOfInstanceProperty__default["default"](fieldOrder).call(fieldOrder, a) !== -1 ? _indexOfInstanceProperty__default["default"](fieldOrder).call(fieldOrder, a) : _indexOfInstanceProperty__default["default"](fieldOrder).call(fieldOrder, a.split('.')[0]);
970
+ let orderB = _indexOfInstanceProperty__default["default"](fieldOrder).call(fieldOrder, b) !== -1 ? _indexOfInstanceProperty__default["default"](fieldOrder).call(fieldOrder, b) : _indexOfInstanceProperty__default["default"](fieldOrder).call(fieldOrder, b.split('.')[0]);
971
+
972
+ // If a field is not 'custom',then consider it as '*'
973
+ orderA = orderA === -1 ? _indexOfInstanceProperty__default["default"](fieldOrder).call(fieldOrder, '*') : orderA;
974
+ orderB = orderB === -1 ? _indexOfInstanceProperty__default["default"](fieldOrder).call(fieldOrder, '*') : orderB;
975
+ return orderA - orderB;
976
+ });
977
+ }
978
+ return fieldNames;
979
+ }
980
+ function buildSelectedExportFilters(selectedResourceIds) {
981
+ if (!selectedResourceIds || selectedResourceIds?.length === 0) return undefined;
982
+ const formattedIds = _mapInstanceProperty__default["default"](selectedResourceIds).call(selectedResourceIds, id => `"${id}"`).join(', ');
983
+ return `id in (${formattedIds})`;
984
+ }
985
+ function isQueryFilter(filters) {
986
+ if (!filters) return false;
987
+ return 'query' in filters;
988
+ }
989
+ function isSearchFilter(filters) {
990
+ if (!filters) return false;
991
+ return 'filters' in filters || 'fullText' in filters;
992
+ }
993
+ function isPredicateFilter(filters) {
994
+ if (!filters) return false;
995
+ return 'where' in filters;
996
+ }
997
+ function validateFilters(filtersObject) {
998
+ if (filtersObject.where && filtersObject.filters) {
999
+ return false;
1000
+ }
1001
+ return Boolean(isQueryFilter(filtersObject.filters) || isSearchFilter(filtersObject.filters) || isPredicateFilter(filtersObject));
1002
+ }
1003
+ function areFiltersApplied(filtersObject) {
1004
+ var _context2;
1005
+ if (!filtersObject) {
1006
+ return false;
1007
+ }
1008
+ if (filtersObject.where && _trimInstanceProperty__default["default"](_context2 = filtersObject.where).call(_context2) !== '') {
1009
+ return true;
1010
+ }
1011
+ if (isQueryFilter(filtersObject.filters)) {
1012
+ return Boolean(filtersObject.filters.query);
1013
+ }
1014
+ if (isSearchFilter(filtersObject.filters)) {
1015
+ var _context3, _context4;
1016
+ const _filters = filtersObject.filters;
1017
+ return Boolean(_filters.filters?.length || ((_context3 = _filters.fullText?.text) == null ? void 0 : _bindInstanceProperty__default["default"](_context4 = Function.call).call(_context4, _trimInstanceProperty__default["default"](_context3), _context3))?.());
1018
+ }
1019
+ return false;
1020
+ }
1021
+ function getInitialExportType(args) {
1022
+ if (args.selectedResourceIds?.length) {
1023
+ return EXPORT_TYPES.SELECTED;
1024
+ }
1025
+ if (args.filters?.total && areFiltersApplied(args.filters)) {
1026
+ return EXPORT_TYPES.FILTERED;
1027
+ }
1028
+ return EXPORT_TYPES.ALL;
1029
+ }
1030
+ function removeEmptyGroups(groups) {
1031
+ return _filterInstanceProperty__default["default"](groups).call(groups, group => group.fields && group.fields.length > 0);
1032
+ }
1033
+
867
1034
  const isAnyFieldChecked = fields => {
868
1035
  return _someInstanceProperty__default["default"](fields).call(fields, field => field.isChecked || field.fields && isAnyFieldChecked(field.fields));
869
1036
  };
@@ -977,6 +1144,25 @@ const getSelectedFieldLabels = group => {
977
1144
  findSelectedFieldLabels(group.fields);
978
1145
  return selectedLabels;
979
1146
  };
1147
+ const extractFieldNamesFromGroups = (groups, fieldOrder) => {
1148
+ let checkedFields = [];
1149
+ const getCheckedFields = fields => {
1150
+ return _filterInstanceProperty__default["default"](fields).call(fields, field => {
1151
+ if (field.fields) {
1152
+ return getCheckedFields(field.fields);
1153
+ }
1154
+ if (field.isChecked) checkedFields.push(field);
1155
+ return field.isChecked ?? false;
1156
+ });
1157
+ };
1158
+ _forEachInstanceProperty__default["default"](groups).call(groups, group => {
1159
+ getCheckedFields(group.fields);
1160
+ });
1161
+ return sortFieldsByFieldOrder({
1162
+ fieldNames: extractFieldNamesAndAdditionalFieldExtensions(checkedFields),
1163
+ fieldOrder
1164
+ });
1165
+ };
980
1166
 
981
1167
  let Step = /*#__PURE__*/function (Step) {
982
1168
  Step["FileSettings"] = "file-settings";
@@ -997,21 +1183,27 @@ function validate(_ref) {
997
1183
  let values = _valuesInstanceProperty__default["default"](_ref),
998
1184
  step = _ref.step,
999
1185
  fieldSelectionMode = _ref.fieldSelectionMode,
1000
- importedHeaders = _ref.importedHeaders;
1186
+ importedHeaders = _ref.importedHeaders,
1187
+ exportType = _ref.exportType;
1001
1188
  const fileName = values.fileName,
1189
+ queryPredicate = values.queryPredicate,
1002
1190
  locales = values.locales,
1003
1191
  groups = values.groups;
1004
1192
  const errors = {
1005
1193
  fileName: {},
1006
1194
  locales: {},
1007
1195
  fields: {},
1008
- importedCsvTemplateFile: {}
1196
+ importedCsvTemplateFile: {},
1197
+ queryPredicate: {}
1009
1198
  };
1010
1199
  if (uiKit.TextInput.isEmpty(fileName)) {
1011
1200
  errors.fileName.missing = true;
1012
1201
  } else if (!/^[a-zA-Z0-9-_.]+$/.test(fileName)) {
1013
1202
  errors.fileName.invalidInput = true;
1014
1203
  }
1204
+ if (exportType === 'query-predicate' && uiKit.TextInput.isEmpty(queryPredicate)) {
1205
+ errors.queryPredicate.missing = true;
1206
+ }
1015
1207
  if (step === Step.FieldsSelection) {
1016
1208
  if (fieldSelectionMode === 'selected-fields') {
1017
1209
  const allFields = _reduceInstanceProperty__default["default"](groups).call(groups, (acc, group) => _concatInstanceProperty__default["default"](acc).call(acc, group.fields), []);
@@ -1041,139 +1233,6 @@ function isFieldNameValid(header) {
1041
1233
  return /^[a-zA-Z0-9._-]+$/.test(processedHeader);
1042
1234
  }
1043
1235
 
1044
- function resourceTypeToFileName(resourceType, locale) {
1045
- var _context;
1046
- const date = new Date();
1047
- const dateFormatter = new Intl.DateTimeFormat(locale, {
1048
- year: '2-digit',
1049
- month: '2-digit',
1050
- day: '2-digit',
1051
- hour: '2-digit',
1052
- minute: '2-digit',
1053
- hour12: false
1054
- });
1055
- const parts = dateFormatter.formatToParts(date);
1056
- const dateParts = _reduceInstanceProperty__default["default"](parts).call(parts, (acc, part) => {
1057
- if (part.type !== 'literal') {
1058
- acc[part.type] = part.value;
1059
- }
1060
- return acc;
1061
- }, {});
1062
- const orderedDateParts = _mapInstanceProperty__default["default"](_context = _filterInstanceProperty__default["default"](parts).call(parts, part => part.type === 'day' || part.type === 'month' || part.type === 'year')).call(_context, part => dateParts[part.type]).join('-');
1063
- const formattedDate = `${orderedDateParts}_${dateParts.hour}-${dateParts.minute}`;
1064
- const resourceTypeMap = {
1065
- [EXPORTABLE_RESOURCES.CATEGORY]: 'Categories',
1066
- [EXPORTABLE_RESOURCES.PRODUCT]: 'Products',
1067
- [EXPORTABLE_RESOURCES.PRODUCT_TYPE]: 'Product_Types',
1068
- [EXPORTABLE_RESOURCES.DISCOUNT_CODE]: 'Discount_Codes',
1069
- [EXPORTABLE_RESOURCES.INVENTORY_ENTRY]: 'Inventories',
1070
- [EXPORTABLE_RESOURCES.CUSTOMER]: 'Customers',
1071
- [EXPORTABLE_RESOURCES.ORDER]: 'Orders'
1072
- };
1073
- const displayName = resourceTypeMap[resourceType];
1074
- if (!displayName) {
1075
- throw new UnexpectedResourceTypeError(resourceType);
1076
- }
1077
- return `${displayName}_Export_${formattedDate}`;
1078
- }
1079
- function mapLocalesToOptions(locales) {
1080
- return _mapInstanceProperty__default["default"](locales).call(locales, locale => ({
1081
- value: locale,
1082
- label: locale
1083
- }));
1084
- }
1085
- function isFilledArray(maybeArray) {
1086
- return _Array$isArray__default["default"](maybeArray) && maybeArray.length > 0;
1087
- }
1088
- function appendCsvOrJsonExtensionIfAbsent(fileName, fileFormat) {
1089
- const extensionRegex = /\.(csv|json)$/i;
1090
- if (!extensionRegex.test(fileName)) return `${fileName}.${fileFormat}`;
1091
- return fileName;
1092
- }
1093
- function getExportLogsLink(projectKey, msg) {
1094
- return jsxRuntime.jsx(uiKit.Link, {
1095
- to: `/${projectKey}/operations/export/logs`,
1096
- children: msg
1097
- }, "link");
1098
- }
1099
- const extractFieldNamesAndAdditionalFieldExtensions = fields => {
1100
- const result = _reduceInstanceProperty__default["default"](fields).call(fields, (acc, field) => {
1101
- if (field.extendedFieldNames) {
1102
- return [...acc, field.name, ...field.extendedFieldNames];
1103
- }
1104
- return [...acc, field.name];
1105
- }, []);
1106
- return [...new _Set__default["default"](result)];
1107
- };
1108
- function sortFieldsByFieldOrder(_ref) {
1109
- let fieldNames = _ref.fieldNames,
1110
- fieldOrder = _ref.fieldOrder;
1111
- if (isFilledArray(fieldOrder)) {
1112
- return _sortInstanceProperty__default["default"](fieldNames).call(fieldNames, (a, b) => {
1113
- let orderA = _indexOfInstanceProperty__default["default"](fieldOrder).call(fieldOrder, a) !== -1 ? _indexOfInstanceProperty__default["default"](fieldOrder).call(fieldOrder, a) : _indexOfInstanceProperty__default["default"](fieldOrder).call(fieldOrder, a.split('.')[0]);
1114
- let orderB = _indexOfInstanceProperty__default["default"](fieldOrder).call(fieldOrder, b) !== -1 ? _indexOfInstanceProperty__default["default"](fieldOrder).call(fieldOrder, b) : _indexOfInstanceProperty__default["default"](fieldOrder).call(fieldOrder, b.split('.')[0]);
1115
-
1116
- // If a field is not 'custom',then consider it as '*'
1117
- orderA = orderA === -1 ? _indexOfInstanceProperty__default["default"](fieldOrder).call(fieldOrder, '*') : orderA;
1118
- orderB = orderB === -1 ? _indexOfInstanceProperty__default["default"](fieldOrder).call(fieldOrder, '*') : orderB;
1119
- return orderA - orderB;
1120
- });
1121
- }
1122
- return fieldNames;
1123
- }
1124
- function buildSelectedExportFilters(selectedResourceIds) {
1125
- if (!selectedResourceIds || selectedResourceIds?.length === 0) return undefined;
1126
- const formattedIds = _mapInstanceProperty__default["default"](selectedResourceIds).call(selectedResourceIds, id => `"${id}"`).join(', ');
1127
- return `id in (${formattedIds})`;
1128
- }
1129
- function isQueryFilter(filters) {
1130
- if (!filters) return false;
1131
- return 'query' in filters;
1132
- }
1133
- function isSearchFilter(filters) {
1134
- if (!filters) return false;
1135
- return 'filters' in filters || 'fullText' in filters;
1136
- }
1137
- function isPredicateFilter(filters) {
1138
- if (!filters) return false;
1139
- return 'where' in filters;
1140
- }
1141
- function validateFilters(filtersObject) {
1142
- if (filtersObject.where && filtersObject.filters) {
1143
- return false;
1144
- }
1145
- return Boolean(isQueryFilter(filtersObject.filters) || isSearchFilter(filtersObject.filters) || isPredicateFilter(filtersObject));
1146
- }
1147
- function areFiltersApplied(filtersObject) {
1148
- var _context2;
1149
- if (!filtersObject) {
1150
- return false;
1151
- }
1152
- if (filtersObject.where && _trimInstanceProperty__default["default"](_context2 = filtersObject.where).call(_context2) !== '') {
1153
- return true;
1154
- }
1155
- if (isQueryFilter(filtersObject.filters)) {
1156
- return Boolean(filtersObject.filters.query);
1157
- }
1158
- if (isSearchFilter(filtersObject.filters)) {
1159
- const _filters = filtersObject.filters;
1160
- return Boolean(_filters.filters?.length || _filters.fullText?.text?.trim());
1161
- }
1162
- return false;
1163
- }
1164
- function getInitialExportType(args) {
1165
- if (args.selectedResourceIds?.length) {
1166
- return EXPORT_TYPES.SELECTED;
1167
- }
1168
- if (args.filters?.total && areFiltersApplied(args.filters)) {
1169
- return EXPORT_TYPES.FILTERED;
1170
- }
1171
- return EXPORT_TYPES.ALL;
1172
- }
1173
- function removeEmptyGroups(groups) {
1174
- return _filterInstanceProperty__default["default"](groups).call(groups, group => group.fields && group.fields.length > 0);
1175
- }
1176
-
1177
1236
  function ownKeys$e(e, r) { var t = _Object$keys__default["default"](e); if (_Object$getOwnPropertySymbols__default["default"]) { var o = _Object$getOwnPropertySymbols__default["default"](e); r && (o = _filterInstanceProperty__default["default"](o).call(o, function (r) { return _Object$getOwnPropertyDescriptor__default["default"](e, r).enumerable; })), t.push.apply(t, o); } return t; }
1178
1237
  function _objectSpread$e(e) { for (var r = 1; r < arguments.length; r++) { var _context2, _context3; var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? _forEachInstanceProperty__default["default"](_context2 = ownKeys$e(Object(t), !0)).call(_context2, function (r) { _defineProperty(e, r, t[r]); }) : _Object$getOwnPropertyDescriptors__default["default"] ? _Object$defineProperties__default["default"](e, _Object$getOwnPropertyDescriptors__default["default"](t)) : _forEachInstanceProperty__default["default"](_context3 = ownKeys$e(Object(t))).call(_context3, function (r) { _Object$defineProperty__default["default"](e, r, _Object$getOwnPropertyDescriptor__default["default"](t, r)); }); } return e; }
1179
1238
  const updateFieldGroupsWithIsCheckedValue = (groups, cachedSelectedGroups) => {
@@ -1398,6 +1457,13 @@ function groupFieldValidationErrors(errors, intl) {
1398
1457
  });
1399
1458
  }
1400
1459
 
1460
+ function isExportApiSuccessResponse(response) {
1461
+ return 'id' in response && 'state' in response && 'resourceType' in response && 'resourceCount' in response;
1462
+ }
1463
+ function isExportApiErrorResponse(error) {
1464
+ return Boolean(error && typeof error === 'object' && 'body' in error && error.body && typeof error.body === 'object' && ('validationErrors' in error.body || 'errors' in error.body) && 'message' in error.body && 'statusCode' in error.body && 'error' in error.body);
1465
+ }
1466
+
1401
1467
  const useInitialValues = props => {
1402
1468
  var _context;
1403
1469
  const _useApplicationContex = applicationShellConnectors.useApplicationContext(applicationContext => ({
@@ -1430,6 +1496,7 @@ const useInitialValues = props => {
1430
1496
  fileName: `${resourceTypeToFileName(props.resourceType, userLocale)}`,
1431
1497
  locales: [locale],
1432
1498
  groups: updateFieldGroupWithAdditionalFieldExtensions(groups),
1499
+ queryPredicate: '',
1433
1500
  // Preferences
1434
1501
  fillRows: false,
1435
1502
  importedCsvTemplateFile: null
@@ -1441,37 +1508,30 @@ const _excluded$3 = ["projectKey"];
1441
1508
  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; }
1442
1509
  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; }
1443
1510
  async function makeExportRequest(params, asyncDispatchFn) {
1444
- try {
1445
- const projectKey = params.projectKey,
1446
- requestData = _objectWithoutProperties(params, _excluded$3);
1447
- const uri = `/${projectKey}/export-operations`;
1448
- const requestAction = sdk.actions.post({
1449
- mcApiProxyTarget: constants.MC_API_PROXY_TARGETS.EXPORT,
1450
- uri,
1451
- headers: {
1452
- accept: 'application/json'
1453
- },
1454
- payload: requestData
1455
- });
1456
- const response = await asyncDispatchFn(requestAction);
1457
- if (!response || typeof response !== 'object') {
1458
- throw new InvalidResponseError();
1459
- }
1460
- if (!('state' in response)) {
1461
- throw new InvalidResponseError('Response missing state field');
1462
- }
1463
- return response;
1464
- } catch (responseError) {
1465
- if (responseError && typeof responseError === 'object' && 'body' in responseError && responseError.body && typeof responseError.body === 'object' && 'validationErrors' in responseError.body) {
1466
- throw responseError.body;
1467
- }
1468
- throw responseError;
1511
+ const projectKey = params.projectKey,
1512
+ requestData = _objectWithoutProperties(params, _excluded$3);
1513
+ const uri = `/${projectKey}/export-operations`;
1514
+ const requestAction = sdk.actions.post({
1515
+ mcApiProxyTarget: constants.MC_API_PROXY_TARGETS.EXPORT,
1516
+ uri,
1517
+ headers: {
1518
+ accept: 'application/json'
1519
+ },
1520
+ payload: requestData
1521
+ });
1522
+ const response = await asyncDispatchFn(requestAction);
1523
+ if (!response || typeof response !== 'object') {
1524
+ throw new InvalidResponseError();
1525
+ }
1526
+ if (!('state' in response)) {
1527
+ throw new InvalidResponseError('Response missing state field');
1469
1528
  }
1529
+ return response;
1470
1530
  }
1471
1531
  function createExportOperation(params, asyncDispatchFn) {
1472
1532
  return makeExportRequest(params, asyncDispatchFn);
1473
1533
  }
1474
- function validateImportedHeaders(params, asyncDispatchFn) {
1534
+ function validateExportOperation(params, asyncDispatchFn) {
1475
1535
  return makeExportRequest(_objectSpread$c(_objectSpread$c({}, params), {}, {
1476
1536
  dryRun: true
1477
1537
  }), asyncDispatchFn);
@@ -1486,25 +1546,6 @@ const useStartExportOperation = props => {
1486
1546
  projectKey: applicationContext.project?.key
1487
1547
  })),
1488
1548
  projectKey = _useApplicationContex.projectKey;
1489
- const extractFieldNamesFromGroups = groups => {
1490
- let checkedFields = [];
1491
- const getCheckedFields = fields => {
1492
- return _filterInstanceProperty__default["default"](fields).call(fields, field => {
1493
- if (field.fields) {
1494
- return getCheckedFields(field.fields);
1495
- }
1496
- if (field.isChecked) checkedFields.push(field);
1497
- return field.isChecked ?? false;
1498
- });
1499
- };
1500
- _forEachInstanceProperty__default["default"](groups).call(groups, group => {
1501
- getCheckedFields(group.fields);
1502
- });
1503
- return sortFieldsByFieldOrder({
1504
- fieldNames: extractFieldNamesAndAdditionalFieldExtensions(checkedFields),
1505
- fieldOrder: props.fieldOrder
1506
- });
1507
- };
1508
1549
  const startExportOperation = async (values, exportType, fieldSelectionMode, localeOption, importedHeaders) => {
1509
1550
  try {
1510
1551
  if (!projectKey) throw new Error('Project key is missing');
@@ -1512,7 +1553,7 @@ const useStartExportOperation = props => {
1512
1553
  if (fieldSelectionMode === 'imported-csv-template' && values.importedCsvTemplateFile) {
1513
1554
  fields = importedHeaders;
1514
1555
  } else {
1515
- fields = extractFieldNamesFromGroups(values.groups);
1556
+ fields = extractFieldNamesFromGroups(values.groups, props.fieldOrder);
1516
1557
  }
1517
1558
  let where = undefined;
1518
1559
  let filters = undefined;
@@ -1525,6 +1566,9 @@ const useStartExportOperation = props => {
1525
1566
  } else if (isSearchFilter(props.filters.filters)) {
1526
1567
  filters = props.filters.filters;
1527
1568
  }
1569
+ } else if (exportType === EXPORT_TYPES.QUERY_PREDICATE) {
1570
+ var _context;
1571
+ where = _trimInstanceProperty__default["default"](_context = values.queryPredicate).call(_context);
1528
1572
  }
1529
1573
  let locales = undefined;
1530
1574
  if (localeOption !== 'onlyLocalesFoundInCsvFile') {
@@ -1541,29 +1585,32 @@ const useStartExportOperation = props => {
1541
1585
  where,
1542
1586
  filters
1543
1587
  }, asyncDispatch);
1544
- switch (response.state) {
1545
- case EXPORT_OPERATION_STATES.QUEUED:
1546
- case EXPORT_OPERATION_STATES.PROCESSING:
1547
- case EXPORT_OPERATION_STATES.COMPLETED:
1548
- showNotification({
1549
- kind: 'info',
1550
- domain: constants.DOMAINS.SIDE,
1551
- // @ts-ignore
1552
- text: intl.formatMessage(messages.exportOperationSuccessMessage, {
1553
- newline: getNewLine,
1554
- logsLink: msg => getExportLogsLink(projectKey, msg),
1555
- b: getBold
1556
- })
1557
- }, {
1558
- dismissAfter: 5000
1559
- });
1560
- if (typeof props.onExportSuccess === 'function') props.onExportSuccess();
1561
- break;
1562
- default:
1563
- throw new UnexpectedExportOperationStateError(response.state);
1588
+ if (isExportApiSuccessResponse(response)) {
1589
+ switch (response.state) {
1590
+ case EXPORT_OPERATION_STATES.QUEUED:
1591
+ case EXPORT_OPERATION_STATES.PROCESSING:
1592
+ case EXPORT_OPERATION_STATES.COMPLETED:
1593
+ showNotification({
1594
+ kind: 'info',
1595
+ domain: constants.DOMAINS.SIDE,
1596
+ // @ts-ignore
1597
+ text: intl.formatMessage(messages.exportOperationSuccessMessage, {
1598
+ newline: getNewLine,
1599
+ logsLink: msg => getExportLogsLink(projectKey, msg),
1600
+ b: getBold
1601
+ })
1602
+ }, {
1603
+ dismissAfter: 5000
1604
+ });
1605
+ if (typeof props.onExportSuccess === 'function') props.onExportSuccess();
1606
+ break;
1607
+ default:
1608
+ throw new UnexpectedExportOperationStateError(response.state);
1609
+ }
1610
+ } else {
1611
+ throw new Error(response.message || 'Unknown error occurred during export operation');
1564
1612
  }
1565
1613
  } catch (error) {
1566
- // TODO: custom error messages for each error type
1567
1614
  showNotification({
1568
1615
  text: intl.formatMessage(messages.unexpectedError),
1569
1616
  kind: 'error',
@@ -1580,7 +1627,7 @@ const useStartExportOperation = props => {
1580
1627
 
1581
1628
  const _excluded$2 = ["fields"];
1582
1629
  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; }
1583
- function _objectSpread$b(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$b(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$b(Object(t))).call(_context3, function (r) { _Object$defineProperty__default["default"](e, r, _Object$getOwnPropertyDescriptor__default["default"](t, r)); }); } return e; }
1630
+ function _objectSpread$b(e) { for (var r = 1; r < arguments.length; r++) { var _context6, _context7; var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? _forEachInstanceProperty__default["default"](_context6 = ownKeys$b(Object(t), !0)).call(_context6, function (r) { _defineProperty(e, r, t[r]); }) : _Object$getOwnPropertyDescriptors__default["default"] ? _Object$defineProperties__default["default"](e, _Object$getOwnPropertyDescriptors__default["default"](t)) : _forEachInstanceProperty__default["default"](_context7 = ownKeys$b(Object(t))).call(_context7, function (r) { _Object$defineProperty__default["default"](e, r, _Object$getOwnPropertyDescriptor__default["default"](t, r)); }); } return e; }
1584
1631
  const getFieldFullName = _ref => {
1585
1632
  var _context;
1586
1633
  let fieldPrefix = _ref.fieldPrefix,
@@ -1590,6 +1637,7 @@ const getFieldFullName = _ref => {
1590
1637
  const localizeTypeDefinitionLabels = function () {
1591
1638
  let fieldDefinitions = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [];
1592
1639
  return _mapInstanceProperty__default["default"](fieldDefinitions).call(fieldDefinitions, _ref2 => {
1640
+ var _context2, _context3;
1593
1641
  let fields = _ref2.fields,
1594
1642
  fieldsType = _objectWithoutProperties(_ref2, _excluded$2);
1595
1643
  const isFieldTypeLabelLocalized = _Array$isArray__default["default"](fieldsType.label);
@@ -1599,7 +1647,7 @@ const localizeTypeDefinitionLabels = function () {
1599
1647
  from: 'label',
1600
1648
  to: 'label'
1601
1649
  }]).label : fieldsType.label,
1602
- fields: fields?.map(field => {
1650
+ fields: ((_context2 = fields) == null ? void 0 : _bindInstanceProperty__default["default"](_context3 = Function.call).call(_context3, _mapInstanceProperty__default["default"](_context2), _context2))?.(field => {
1603
1651
  const isFieldLabelLocalized = _Array$isArray__default["default"](field.label);
1604
1652
  if (!isFieldLabelLocalized) {
1605
1653
  return field;
@@ -1637,6 +1685,7 @@ const useConvertFieldDefinitionsForExport = () => {
1637
1685
  if (!fieldDefinitions) return [];
1638
1686
  const localizedTypeDefinitions = localizeTypeDefinitionLabels(fieldDefinitions);
1639
1687
  const results = _mapInstanceProperty__default["default"](localizedTypeDefinitions).call(localizedTypeDefinitions, transformedType => {
1688
+ var _context4, _context5;
1640
1689
  const isTypeLabelLocalized = typeof transformedType.label !== 'string';
1641
1690
  return {
1642
1691
  isExpandable: true,
@@ -1650,7 +1699,7 @@ const useConvertFieldDefinitionsForExport = () => {
1650
1699
  fallbackOrder: languages,
1651
1700
  fallback: transformedType.name
1652
1701
  }) : transformedType.label,
1653
- fields: sortByField(transformedType.fields?.map(fieldDefinition => {
1702
+ fields: sortByField(((_context4 = transformedType.fields) == null ? void 0 : _bindInstanceProperty__default["default"](_context5 = Function.call).call(_context5, _mapInstanceProperty__default["default"](_context4), _context4))?.(fieldDefinition => {
1654
1703
  const isFieldLabelLocalized = typeof fieldDefinition.label !== 'string';
1655
1704
  return {
1656
1705
  name: getFieldFullName({
@@ -1677,7 +1726,7 @@ const useConvertFieldDefinitionsForExport = () => {
1677
1726
  };
1678
1727
  };
1679
1728
 
1680
- const useValidateImportedHeaders = () => {
1729
+ const useValidateExportOperation = () => {
1681
1730
  const intl = reactIntl.useIntl();
1682
1731
  const asyncDispatch = sdk.useAsyncDispatch();
1683
1732
  const showNotification = actionsGlobal.useShowNotification();
@@ -1685,9 +1734,9 @@ const useValidateImportedHeaders = () => {
1685
1734
  projectKey: context.project?.key
1686
1735
  })),
1687
1736
  projectKey = _useApplicationContex.projectKey;
1688
- const validateHeaders = async params => {
1737
+ const validateExport = async params => {
1689
1738
  try {
1690
- var _context;
1739
+ var _context, _context2, _context3;
1691
1740
  if (!projectKey) return;
1692
1741
  const invalidFields = _filterInstanceProperty__default["default"](_context = params.fields).call(_context, field => !isFieldNameValid(field));
1693
1742
  if (invalidFields.length > 0) {
@@ -1699,25 +1748,46 @@ const useValidateImportedHeaders = () => {
1699
1748
  }))
1700
1749
  };
1701
1750
  }
1702
- await validateImportedHeaders({
1751
+ const response = await validateExportOperation({
1703
1752
  projectKey,
1704
1753
  resourceType: params.resourceType,
1705
1754
  fileName: params.fileName,
1706
1755
  fileFormat: params.outputFormat,
1707
1756
  fields: params.fields,
1708
- locales: params.locales
1757
+ locales: params.locales,
1758
+ where: ((_context2 = params.queryPredicate) == null ? void 0 : _bindInstanceProperty__default["default"](_context3 = Function.call).call(_context3, _trimInstanceProperty__default["default"](_context2), _context2))?.() || undefined
1709
1759
  }, asyncDispatch);
1710
- return {
1711
- success: true,
1712
- validationErrors: []
1713
- };
1714
- } catch (error) {
1715
- if (typeof error === 'object' && error && 'validationErrors' in error && _Array$isArray__default["default"](error.validationErrors)) {
1760
+ if (isExportApiSuccessResponse(response) && response.resourceCount === 0) {
1716
1761
  return {
1717
1762
  success: false,
1718
- validationErrors: error.validationErrors
1763
+ noResourcesToExport: true
1719
1764
  };
1720
1765
  }
1766
+ return {
1767
+ success: true
1768
+ };
1769
+ } catch (error) {
1770
+ if (isExportApiErrorResponse(error)) {
1771
+ if (error.body.errors?.length) {
1772
+ var _context4;
1773
+ const whereError = _findInstanceProperty__default["default"](_context4 = error.body.errors).call(_context4, error => {
1774
+ var _context5;
1775
+ return error.message && _includesInstanceProperty__default["default"](_context5 = error.message).call(_context5, 'Malformed parameter: where');
1776
+ });
1777
+ if (whereError) {
1778
+ return {
1779
+ success: false,
1780
+ invalidQueryPredicate: true
1781
+ };
1782
+ }
1783
+ }
1784
+ if (error.body.validationErrors?.length) {
1785
+ return {
1786
+ success: false,
1787
+ validationErrors: error.body.validationErrors
1788
+ };
1789
+ }
1790
+ }
1721
1791
  showNotification({
1722
1792
  text: intl.formatMessage(messages.unexpectedError),
1723
1793
  kind: 'error',
@@ -1730,7 +1800,7 @@ const useValidateImportedHeaders = () => {
1730
1800
  }
1731
1801
  };
1732
1802
  return {
1733
- validateHeaders
1803
+ validateExport
1734
1804
  };
1735
1805
  };
1736
1806
 
@@ -1778,6 +1848,7 @@ function ownKeys$9(e, r) { var t = _Object$keys__default["default"](e); if (_Obj
1778
1848
  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; }
1779
1849
  function ExportScopeSection() {
1780
1850
  const _useExportResourcesMo = useExportResourcesModalContext(),
1851
+ formik = _useExportResourcesMo.formik,
1781
1852
  exportType = _useExportResourcesMo.exportType,
1782
1853
  totalResourcesCount = _useExportResourcesMo.totalResourcesCount,
1783
1854
  filters = _useExportResourcesMo.filters,
@@ -1785,10 +1856,11 @@ function ExportScopeSection() {
1785
1856
  selectedResourceIds = _useExportResourcesMo.selectedResourceIds,
1786
1857
  setExportType = _useExportResourcesMo.setExportType,
1787
1858
  resourceType = _useExportResourcesMo.resourceType,
1788
- hideExportSelectedResourcesOption = _useExportResourcesMo.hideExportSelectedResourcesOption;
1789
- return jsxRuntime.jsx(uiKit.Spacings.Stack, {
1790
- scale: "m",
1791
- children: jsxRuntime.jsxs(uiKit.RadioInput.Group, {
1859
+ hideExportSelectedResourcesOption = _useExportResourcesMo.hideExportSelectedResourcesOption,
1860
+ showQueryPredicateOption = _useExportResourcesMo.showQueryPredicateOption;
1861
+ const shouldShowQueryPredicateField = exportType === EXPORT_TYPES.QUERY_PREDICATE;
1862
+ return jsxRuntime.jsxs(jsxRuntime.Fragment, {
1863
+ children: [jsxRuntime.jsxs(uiKit.RadioInput.Group, {
1792
1864
  value: exportType,
1793
1865
  onChange: e => {
1794
1866
  setExportType(e.target.value);
@@ -1828,8 +1900,23 @@ function ExportScopeSection() {
1828
1900
  }
1829
1901
  }) : messages.exportScopeSelectedWithoutCount
1830
1902
  })
1903
+ }), showQueryPredicateOption && jsxRuntime.jsx(uiKit.RadioInput.Option, {
1904
+ value: EXPORT_TYPES.QUERY_PREDICATE,
1905
+ children: jsxRuntime.jsx(uiKit.Text.Body, {
1906
+ intlMessage: messages.queryPredicate
1907
+ })
1831
1908
  })]
1832
- })
1909
+ }), shouldShowQueryPredicateField && jsxRuntime.jsx(uiKit.TextField, {
1910
+ name: "queryPredicate",
1911
+ "data-testid": "query-predicate-field",
1912
+ title: "",
1913
+ onChange: formik.handleChange,
1914
+ onBlur: formik.handleBlur,
1915
+ value: _valuesInstanceProperty__default["default"](formik).queryPredicate,
1916
+ touched: formik.touched.queryPredicate,
1917
+ errors: mapFormikErrors(formik.errors.queryPredicate),
1918
+ renderError: renderQueryPredicateError
1919
+ })]
1833
1920
  });
1834
1921
  }
1835
1922
 
@@ -2117,6 +2204,7 @@ const CollapsibleFieldWrapper = _ref => {
2117
2204
  });
2118
2205
  };
2119
2206
  const FieldSection = _ref3 => {
2207
+ var _context, _context2, _context7, _context8;
2120
2208
  let fields = _ref3.fields,
2121
2209
  parentKeys = _ref3.parentKeys,
2122
2210
  formik = _ref3.formik,
@@ -2126,9 +2214,12 @@ const FieldSection = _ref3 => {
2126
2214
  maxVisibleChildren = _ref3.maxVisibleChildren;
2127
2215
  const _useExportFieldSelect = useExportFieldSelectionContext(),
2128
2216
  updateExpandedGroups = _useExportFieldSelect.updateExpandedGroups;
2129
- const visibleFields = isSearchActive || !maxVisibleChildren ? fields : fields?.slice(0, maxVisibleChildren);
2217
+ const visibleFields = isSearchActive || !maxVisibleChildren ? fields : ((_context = fields) == null ? void 0 : _bindInstanceProperty__default["default"](_context2 = Function.call).call(_context2, _sliceInstanceProperty__default["default"](_context), _context))?.(0, maxVisibleChildren);
2130
2218
  const hasMoreFields = maxVisibleChildren && !isSearchActive && fields && fields.length > maxVisibleChildren;
2131
- const visibleIndex = field => fields?.filter(f => !f.isHidden).indexOf(field) || -1;
2219
+ const visibleIndex = field => {
2220
+ var _context3, _context4, _context5, _context6;
2221
+ return ((_context3 = ((_context4 = fields) == null ? void 0 : _bindInstanceProperty__default["default"](_context5 = Function.call).call(_context5, _filterInstanceProperty__default["default"](_context4), _context4))?.(f => !f.isHidden)) == null ? void 0 : _bindInstanceProperty__default["default"](_context6 = Function.call).call(_context6, _indexOfInstanceProperty__default["default"](_context3), _context3))?.(field) || -1;
2222
+ };
2132
2223
  const shouldDisplayField = field => {
2133
2224
  if (field.isHidden) return false;
2134
2225
  if (!maxVisibleChildren) return true;
@@ -2139,7 +2230,7 @@ const FieldSection = _ref3 => {
2139
2230
  };
2140
2231
  return jsxRuntime.jsxs(uiKit.Spacings.Stack, {
2141
2232
  scale: "s",
2142
- children: [visibleFields?.map((field, index) => {
2233
+ children: [((_context7 = visibleFields) == null ? void 0 : _bindInstanceProperty__default["default"](_context8 = Function.call).call(_context8, _mapInstanceProperty__default["default"](_context7), _context7))?.((field, index) => {
2143
2234
  const isChildrenCountDisplayed = shouldDisplayChildrenCount(field);
2144
2235
  const hasDependents = Boolean(field.dependentGroupNames?.length || field.dependentFieldNames?.length);
2145
2236
  const isAnyOfTheChildFieldsChecked = isAnyFieldChecked(field.fields || []);
@@ -2187,8 +2278,8 @@ const FieldSection = _ref3 => {
2187
2278
  const updateAllChildFieldsChecked = (path, checked) => {
2188
2279
  const item = get__default["default"](_valuesInstanceProperty__default["default"](formik), path);
2189
2280
  if (item && item.fields) {
2190
- var _context;
2191
- _forEachInstanceProperty__default["default"](_context = item.fields).call(_context, (field, i) => {
2281
+ var _context9;
2282
+ _forEachInstanceProperty__default["default"](_context9 = item.fields).call(_context9, (field, i) => {
2192
2283
  const fieldPath = `${path}.fields[${i}]`;
2193
2284
  if (!field.fields?.length) {
2194
2285
  formik.setFieldValue(`${fieldPath}.isChecked`, checked || field.isRequired,
@@ -2405,7 +2496,7 @@ const NoSearchResults = () => {
2405
2496
  };
2406
2497
 
2407
2498
  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; }
2408
- function _objectSpread$5(e) { for (var r = 1; r < arguments.length; r++) { var _context5, _context6; var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? _forEachInstanceProperty__default["default"](_context5 = ownKeys$5(Object(t), !0)).call(_context5, function (r) { _defineProperty(e, r, t[r]); }) : _Object$getOwnPropertyDescriptors__default["default"] ? _Object$defineProperties__default["default"](e, _Object$getOwnPropertyDescriptors__default["default"](t)) : _forEachInstanceProperty__default["default"](_context6 = ownKeys$5(Object(t))).call(_context6, function (r) { _Object$defineProperty__default["default"](e, r, _Object$getOwnPropertyDescriptor__default["default"](t, r)); }); } return e; }
2499
+ function _objectSpread$5(e) { for (var r = 1; r < arguments.length; r++) { var _context7, _context8; var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? _forEachInstanceProperty__default["default"](_context7 = ownKeys$5(Object(t), !0)).call(_context7, function (r) { _defineProperty(e, r, t[r]); }) : _Object$getOwnPropertyDescriptors__default["default"] ? _Object$defineProperties__default["default"](e, _Object$getOwnPropertyDescriptors__default["default"](t)) : _forEachInstanceProperty__default["default"](_context8 = ownKeys$5(Object(t))).call(_context8, function (r) { _Object$defineProperty__default["default"](e, r, _Object$getOwnPropertyDescriptor__default["default"](t, r)); }); } return e; }
2409
2500
  const totalSpacing = 56 +
2410
2501
  // MC header
2411
2502
  32 * 2 + (
@@ -2447,6 +2538,7 @@ const StyledGridCard = /*#__PURE__*/_styled__default["default"](uiKit.Card, {
2447
2538
  target: "e1odwg620"
2448
2539
  } )("max-height:calc(100vh - ", totalSpacing, "px);overflow:auto;" + ("" ));
2449
2540
  const SelectedFieldsForm = () => {
2541
+ var _context, _context2;
2450
2542
  const intl = reactIntl.useIntl();
2451
2543
  const _React$useState = React__default["default"].useState(''),
2452
2544
  _React$useState2 = _slicedToArray(_React$useState, 2),
@@ -2463,22 +2555,22 @@ const SelectedFieldsForm = () => {
2463
2555
  const _useExportResourcesMo = useExportResourcesModalContext(),
2464
2556
  formik = _useExportResourcesMo.formik,
2465
2557
  resourceType = _useExportResourcesMo.resourceType;
2466
- const isSearchActive = fieldSearchTerm?.trim()?.length >= MIN_SEARCH_LENGTH;
2558
+ const isSearchActive = ((_context = fieldSearchTerm) == null ? void 0 : _bindInstanceProperty__default["default"](_context2 = Function.call).call(_context2, _trimInstanceProperty__default["default"](_context), _context))?.()?.length >= MIN_SEARCH_LENGTH;
2467
2559
  React__default["default"].useEffect(() => {
2468
- var _context2;
2560
+ var _context4;
2469
2561
  updateFieldDependenciesStatus(formik);
2470
2562
  const checkedFields = {};
2471
2563
  function getCheckedFields(field, groupName) {
2472
2564
  const fieldName = field.name ? `${groupName}.${field.name}` : groupName;
2473
2565
  if (field.fields) {
2474
- var _context;
2475
- return _forEachInstanceProperty__default["default"](_context = field.fields).call(_context, f => getCheckedFields(f, fieldName));
2566
+ var _context3;
2567
+ return _forEachInstanceProperty__default["default"](_context3 = field.fields).call(_context3, f => getCheckedFields(f, fieldName));
2476
2568
  }
2477
2569
  checkedFields[fieldName] = field.isChecked;
2478
2570
  }
2479
- _forEachInstanceProperty__default["default"](_context2 = _valuesInstanceProperty__default["default"](formik).groups).call(_context2, group => {
2480
- var _context3;
2481
- _forEachInstanceProperty__default["default"](_context3 = group.fields).call(_context3, field => {
2571
+ _forEachInstanceProperty__default["default"](_context4 = _valuesInstanceProperty__default["default"](formik).groups).call(_context4, group => {
2572
+ var _context5;
2573
+ _forEachInstanceProperty__default["default"](_context5 = group.fields).call(_context5, field => {
2482
2574
  getCheckedFields(field, group.groupName);
2483
2575
  });
2484
2576
  });
@@ -2491,8 +2583,8 @@ const SelectedFieldsForm = () => {
2491
2583
  const filteredGroups = React__default["default"].useMemo(() => {
2492
2584
  const updateFields = (fields, parentMatches) => {
2493
2585
  return _mapInstanceProperty__default["default"](fields).call(fields, field => {
2494
- var _context4;
2495
- const matches = _includesInstanceProperty__default["default"](_context4 = field.label.toLowerCase()).call(_context4, fieldSearchTerm.toLowerCase());
2586
+ var _context6;
2587
+ const matches = _includesInstanceProperty__default["default"](_context6 = field.label.toLowerCase()).call(_context6, fieldSearchTerm.toLowerCase());
2496
2588
  let isHidden = !matches && !parentMatches;
2497
2589
  if (field.fields) {
2498
2590
  const updatedFields = updateFields(field.fields, matches);
@@ -2638,6 +2730,8 @@ const _excluded$1 = ["children"];
2638
2730
  const ExportResourcesProvider = _ref => {
2639
2731
  let children = _ref.children,
2640
2732
  props = _objectWithoutProperties(_ref, _excluded$1);
2733
+ const intl = reactIntl.useIntl();
2734
+ const showNotification = actionsGlobal.useShowNotification();
2641
2735
  const initialValues = useInitialValues(props);
2642
2736
  const _React$useState = React__default["default"].useState(Step.FileSettings),
2643
2737
  _React$useState2 = _slicedToArray(_React$useState, 2),
@@ -2668,47 +2762,70 @@ const ExportResourcesProvider = _ref => {
2668
2762
  setValidationErrors = _React$useState12[1];
2669
2763
  const _useStartExportOperat = useStartExportOperation(props),
2670
2764
  startExportOperation = _useStartExportOperat.startExportOperation;
2671
- const _useValidateImportedH = useValidateImportedHeaders(),
2672
- validateHeaders = _useValidateImportedH.validateHeaders;
2673
- const onSubmit = async values => {
2674
- if (currentStep === Step.FileSettings) {
2675
- setCurrentStep(Step.FieldsSelection);
2676
- } else if (currentStep === Step.FieldsSelection) {
2677
- if (fieldSelectionMode !== 'imported-csv-template') {
2678
- setCurrentStep(Step.ConfirmExport);
2679
- return;
2680
- }
2681
- const isUsingImportedCsvLocales = localeOption === 'onlyLocalesFoundInCsvFile';
2682
- const validationResult = await validateHeaders({
2683
- fileName: values.fileName,
2684
- outputFormat: values.outputFormat,
2685
- resourceType: props.resourceType,
2686
- fields: importedHeaders,
2687
- locales: isUsingImportedCsvLocales ? undefined : values.locales
2688
- });
2689
- if (validationResult?.success) {
2690
- setCurrentStep(Step.ConfirmExport);
2691
- } else {
2692
- setValidationErrors(validationResult?.validationErrors);
2693
- setCurrentStep(Step.ValidationErrors);
2694
- }
2695
- } else {
2696
- startExportOperation(values, exportType, fieldSelectionMode, localeOption, importedHeaders);
2697
- }
2698
- };
2765
+ const _useValidateExportOpe = useValidateExportOperation(),
2766
+ validateExport = _useValidateExportOpe.validateExport;
2699
2767
  const formik$1 = formik.useFormik({
2700
2768
  initialValues,
2701
2769
  validate: values => validate({
2702
2770
  values,
2703
2771
  step: currentStep,
2704
2772
  fieldSelectionMode,
2705
- importedHeaders
2773
+ importedHeaders,
2774
+ exportType
2706
2775
  }),
2707
- onSubmit
2776
+ onSubmit: async values => {
2777
+ if (currentStep === Step.FileSettings) {
2778
+ if (exportType === EXPORT_TYPES.QUERY_PREDICATE) {
2779
+ const validationResult = await validateExport({
2780
+ fileName: values.fileName,
2781
+ outputFormat: values.outputFormat,
2782
+ resourceType: props.resourceType,
2783
+ fields: extractFieldNamesFromGroups(values.groups, props.fieldOrder),
2784
+ locales: values.locales,
2785
+ queryPredicate: values.queryPredicate
2786
+ });
2787
+ if (validationResult?.invalidQueryPredicate) {
2788
+ formik$1.setFieldError('queryPredicate', 'invalidInput');
2789
+ return;
2790
+ }
2791
+ if (validationResult?.noResourcesToExport) {
2792
+ showNotification({
2793
+ text: intl.formatMessage(messages.noResourcesToExport),
2794
+ kind: 'error',
2795
+ domain: constants.DOMAINS.PAGE
2796
+ });
2797
+ return;
2798
+ }
2799
+ }
2800
+ setCurrentStep(Step.FieldsSelection);
2801
+ } else if (currentStep === Step.FieldsSelection) {
2802
+ if (fieldSelectionMode !== 'imported-csv-template') {
2803
+ setCurrentStep(Step.ConfirmExport);
2804
+ return;
2805
+ }
2806
+ const isUsingImportedCsvLocales = localeOption === 'onlyLocalesFoundInCsvFile';
2807
+ const validationResult = await validateExport({
2808
+ fileName: values.fileName,
2809
+ outputFormat: values.outputFormat,
2810
+ resourceType: props.resourceType,
2811
+ fields: importedHeaders,
2812
+ locales: isUsingImportedCsvLocales ? undefined : values.locales,
2813
+ queryPredicate: values.queryPredicate
2814
+ });
2815
+ if (validationResult?.success) {
2816
+ setCurrentStep(Step.ConfirmExport);
2817
+ } else {
2818
+ setValidationErrors(validationResult?.validationErrors);
2819
+ setCurrentStep(Step.ValidationErrors);
2820
+ }
2821
+ } else {
2822
+ startExportOperation(values, exportType, fieldSelectionMode, localeOption, importedHeaders);
2823
+ }
2824
+ }
2708
2825
  });
2709
2826
  React__default["default"].useEffect(() => {
2710
2827
  formik$1.validateForm();
2711
- }, [currentStep, fieldSelectionMode, importedHeaders]);
2828
+ }, [currentStep, fieldSelectionMode, importedHeaders, exportType]);
2712
2829
  return jsxRuntime.jsx(ExportResourcesContext.Provider, {
2713
2830
  value: {
2714
2831
  formik: formik$1,
@@ -2720,6 +2837,7 @@ const ExportResourcesProvider = _ref => {
2720
2837
  totalResourcesCount: props.totalResourcesCount,
2721
2838
  selectedResourceIds: props.selectedResourceIds,
2722
2839
  hideExportSelectedResourcesOption: props.hideExportSelectedResourcesOption,
2840
+ showQueryPredicateOption: props.showQueryPredicateOption,
2723
2841
  filters: props.filters,
2724
2842
  hasFilters: areFiltersApplied(props.filters),
2725
2843
  setExportType,
@@ -3068,11 +3186,11 @@ function getDefaultDropWrapperStyles(_dropAreaState) {
3068
3186
  return /*#__PURE__*/react.css("" , "" );
3069
3187
  }
3070
3188
 
3071
- var ActiveDragDropArea = /*#__PURE__*/React.lazy(() => Promise.resolve().then(function () { return require('./active-drag-drop-area-90d26dc9.cjs.prod.js' /* webpackChunkName: "active-drag-drop-area" */); }));
3189
+ var ActiveDragDropArea = /*#__PURE__*/React.lazy(() => Promise.resolve().then(function () { return require('./active-drag-drop-area-7fd53916.cjs.prod.js' /* webpackChunkName: "active-drag-drop-area" */); }));
3072
3190
 
3073
- var EnabledDropArea = /*#__PURE__*/React.lazy(() => Promise.resolve().then(function () { return require('./enabled-drop-area-f4b604d3.cjs.prod.js' /* webpackChunkName: "enabled-drop-area" */); }));
3191
+ var EnabledDropArea = /*#__PURE__*/React.lazy(() => Promise.resolve().then(function () { return require('./enabled-drop-area-4c8d613f.cjs.prod.js' /* webpackChunkName: "enabled-drop-area" */); }));
3074
3192
 
3075
- var FileDropped = /*#__PURE__*/React.lazy(() => Promise.resolve().then(function () { return require('./file-dropped-area-38e2f1eb.cjs.prod.js' /* webpackChunkName: "filed-dropped-area" */); }));
3193
+ var FileDropped = /*#__PURE__*/React.lazy(() => Promise.resolve().then(function () { return require('./file-dropped-area-b685a683.cjs.prod.js' /* webpackChunkName: "filed-dropped-area" */); }));
3076
3194
 
3077
3195
  function getDropArea(_ref) {
3078
3196
  let dropAreaState = _ref.dropAreaState,