@commercetools-frontend-extensions/export-resources-modal 5.0.4 → 5.1.1
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.
- package/dist/{active-drag-drop-area-677cd139.cjs.prod.js → active-drag-drop-area-20a66ce6.cjs.prod.js} +1 -1
- package/dist/{active-drag-drop-area-ab3d5305.cjs.dev.js → active-drag-drop-area-364cae94.cjs.dev.js} +1 -1
- package/dist/{active-drag-drop-area-d0b34d8c.esm.js → active-drag-drop-area-418bdbf4.esm.js} +1 -1
- package/dist/commercetools-frontend-extensions-export-resources-modal.cjs.dev.js +1 -1
- package/dist/commercetools-frontend-extensions-export-resources-modal.cjs.prod.js +1 -1
- package/dist/commercetools-frontend-extensions-export-resources-modal.esm.js +1 -1
- package/dist/declarations/src/@constants/export-types.d.ts +4 -3
- package/dist/declarations/src/@hooks/index.d.ts +1 -1
- package/dist/declarations/src/@hooks/use-validate-export-operation.d.ts +33 -0
- package/dist/declarations/src/@types/export-api.d.ts +5 -1
- package/dist/declarations/src/@types/export-resources-modal-context.d.ts +1 -0
- package/dist/declarations/src/@types/export-resources-modal-types.d.ts +2 -1
- package/dist/declarations/src/@types/form.d.ts +5 -0
- package/dist/{enabled-drop-area-049033dc.cjs.prod.js → enabled-drop-area-93b7de32.cjs.prod.js} +1 -1
- package/dist/{enabled-drop-area-3ac1d564.esm.js → enabled-drop-area-aed3e03e.esm.js} +1 -1
- package/dist/{enabled-drop-area-76b49e4a.cjs.dev.js → enabled-drop-area-d120c17d.cjs.dev.js} +1 -1
- package/dist/{file-dropped-area-997435fa.esm.js → file-dropped-area-06a60bda.esm.js} +1 -1
- package/dist/{file-dropped-area-d2df8c70.cjs.prod.js → file-dropped-area-d6e47d57.cjs.prod.js} +1 -1
- package/dist/{file-dropped-area-44d101c3.cjs.dev.js → file-dropped-area-e45600e0.cjs.dev.js} +1 -1
- package/dist/{index-969519bd.esm.js → index-1619b654.esm.js} +361 -257
- package/dist/{index-1d25c6f7.cjs.prod.js → index-1cb3087e.cjs.prod.js} +360 -256
- package/dist/{index-e4706b61.cjs.dev.js → index-deb5c3f9.cjs.dev.js} +360 -256
- package/package.json +1 -1
- package/dist/declarations/src/@hooks/use-validate-imported-headers.d.ts +0 -15
|
@@ -622,6 +622,26 @@ var messages = reactIntl.defineMessages({
|
|
|
622
622
|
id: 'ExportResourcesModal.uploadErrorsDetected',
|
|
623
623
|
description: 'Message shown when errors are detected during file upload',
|
|
624
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
|
+
noResourcesToExportForQueryPredicate: {
|
|
642
|
+
id: 'ExportResourcesModal.noResourcesToExportForQueryPredicate',
|
|
643
|
+
description: 'Error message when there are no resources to export for given query predicate',
|
|
644
|
+
defaultMessage: 'No resources match your query predicate. Please check your query predicate and try again.'
|
|
625
645
|
}
|
|
626
646
|
});
|
|
627
647
|
|
|
@@ -645,6 +665,18 @@ function renderLocaleError(key) {
|
|
|
645
665
|
return null;
|
|
646
666
|
}
|
|
647
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
|
+
case 'noResourcesToExportForQueryPredicate':
|
|
675
|
+
return jsxRuntime.jsx(reactIntl.FormattedMessage, _objectSpread$h({}, messages.noResourcesToExportForQueryPredicate));
|
|
676
|
+
default:
|
|
677
|
+
return null;
|
|
678
|
+
}
|
|
679
|
+
};
|
|
648
680
|
|
|
649
681
|
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)); }
|
|
650
682
|
function _isNativeReflectConstruct$3() { try { var t = !Boolean.prototype.valueOf.call(_Reflect$construct__default["default"](Boolean, [], function () {})); } catch (t) {} return (_isNativeReflectConstruct$3 = function () { return !!t; })(); }
|
|
@@ -789,7 +821,8 @@ const EXPORT_OPERATION_STATES = {
|
|
|
789
821
|
const EXPORT_TYPES = {
|
|
790
822
|
ALL: 'all',
|
|
791
823
|
FILTERED: 'filtered',
|
|
792
|
-
SELECTED: 'selected'
|
|
824
|
+
SELECTED: 'selected',
|
|
825
|
+
QUERY_PREDICATE: 'query-predicate'
|
|
793
826
|
};
|
|
794
827
|
|
|
795
828
|
const EXPORTABLE_RESOURCES = {
|
|
@@ -866,6 +899,140 @@ const DEFAULT_SHORT_LIVED_FLAGS = {};
|
|
|
866
899
|
const DEFAULT_LONG_LIVED_FLAGS = {};
|
|
867
900
|
_objectSpread$f(_objectSpread$f({}, DEFAULT_SHORT_LIVED_FLAGS), DEFAULT_LONG_LIVED_FLAGS);
|
|
868
901
|
|
|
902
|
+
function resourceTypeToFileName(resourceType, locale) {
|
|
903
|
+
var _context;
|
|
904
|
+
const date = new Date();
|
|
905
|
+
const dateFormatter = new Intl.DateTimeFormat(locale, {
|
|
906
|
+
year: '2-digit',
|
|
907
|
+
month: '2-digit',
|
|
908
|
+
day: '2-digit',
|
|
909
|
+
hour: '2-digit',
|
|
910
|
+
minute: '2-digit',
|
|
911
|
+
hour12: false
|
|
912
|
+
});
|
|
913
|
+
const parts = dateFormatter.formatToParts(date);
|
|
914
|
+
const dateParts = _reduceInstanceProperty__default["default"](parts).call(parts, (acc, part) => {
|
|
915
|
+
if (part.type !== 'literal') {
|
|
916
|
+
acc[part.type] = part.value;
|
|
917
|
+
}
|
|
918
|
+
return acc;
|
|
919
|
+
}, {});
|
|
920
|
+
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('-');
|
|
921
|
+
const formattedDate = `${orderedDateParts}_${dateParts.hour}-${dateParts.minute}`;
|
|
922
|
+
const resourceTypeMap = {
|
|
923
|
+
[EXPORTABLE_RESOURCES.CATEGORY]: 'Categories',
|
|
924
|
+
[EXPORTABLE_RESOURCES.PRODUCT]: 'Products',
|
|
925
|
+
[EXPORTABLE_RESOURCES.PRODUCT_TYPE]: 'Product_Types',
|
|
926
|
+
[EXPORTABLE_RESOURCES.DISCOUNT_CODE]: 'Discount_Codes',
|
|
927
|
+
[EXPORTABLE_RESOURCES.INVENTORY_ENTRY]: 'Inventories',
|
|
928
|
+
[EXPORTABLE_RESOURCES.CUSTOMER]: 'Customers',
|
|
929
|
+
[EXPORTABLE_RESOURCES.ORDER]: 'Orders'
|
|
930
|
+
};
|
|
931
|
+
const displayName = resourceTypeMap[resourceType];
|
|
932
|
+
if (!displayName) {
|
|
933
|
+
throw new UnexpectedResourceTypeError(resourceType);
|
|
934
|
+
}
|
|
935
|
+
return `${displayName}_Export_${formattedDate}`;
|
|
936
|
+
}
|
|
937
|
+
function mapLocalesToOptions(locales) {
|
|
938
|
+
return _mapInstanceProperty__default["default"](locales).call(locales, locale => ({
|
|
939
|
+
value: locale,
|
|
940
|
+
label: locale
|
|
941
|
+
}));
|
|
942
|
+
}
|
|
943
|
+
function isFilledArray(maybeArray) {
|
|
944
|
+
return _Array$isArray__default["default"](maybeArray) && maybeArray.length > 0;
|
|
945
|
+
}
|
|
946
|
+
function appendCsvOrJsonExtensionIfAbsent(fileName, fileFormat) {
|
|
947
|
+
const extensionRegex = /\.(csv|json)$/i;
|
|
948
|
+
if (!extensionRegex.test(fileName)) return `${fileName}.${fileFormat}`;
|
|
949
|
+
return fileName;
|
|
950
|
+
}
|
|
951
|
+
function getExportLogsLink(projectKey, msg) {
|
|
952
|
+
return jsxRuntime.jsx(uiKit.Link, {
|
|
953
|
+
to: `/${projectKey}/operations/export/logs`,
|
|
954
|
+
children: msg
|
|
955
|
+
}, "link");
|
|
956
|
+
}
|
|
957
|
+
const extractFieldNamesAndAdditionalFieldExtensions = fields => {
|
|
958
|
+
const result = _reduceInstanceProperty__default["default"](fields).call(fields, (acc, field) => {
|
|
959
|
+
if (field.extendedFieldNames) {
|
|
960
|
+
return [...acc, field.name, ...field.extendedFieldNames];
|
|
961
|
+
}
|
|
962
|
+
return [...acc, field.name];
|
|
963
|
+
}, []);
|
|
964
|
+
return [...new _Set__default["default"](result)];
|
|
965
|
+
};
|
|
966
|
+
function sortFieldsByFieldOrder(_ref) {
|
|
967
|
+
let fieldNames = _ref.fieldNames,
|
|
968
|
+
fieldOrder = _ref.fieldOrder;
|
|
969
|
+
if (isFilledArray(fieldOrder)) {
|
|
970
|
+
return _sortInstanceProperty__default["default"](fieldNames).call(fieldNames, (a, b) => {
|
|
971
|
+
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]);
|
|
972
|
+
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]);
|
|
973
|
+
|
|
974
|
+
// If a field is not 'custom',then consider it as '*'
|
|
975
|
+
orderA = orderA === -1 ? _indexOfInstanceProperty__default["default"](fieldOrder).call(fieldOrder, '*') : orderA;
|
|
976
|
+
orderB = orderB === -1 ? _indexOfInstanceProperty__default["default"](fieldOrder).call(fieldOrder, '*') : orderB;
|
|
977
|
+
return orderA - orderB;
|
|
978
|
+
});
|
|
979
|
+
}
|
|
980
|
+
return fieldNames;
|
|
981
|
+
}
|
|
982
|
+
function buildSelectedExportFilters(selectedResourceIds) {
|
|
983
|
+
if (!selectedResourceIds || selectedResourceIds?.length === 0) return undefined;
|
|
984
|
+
const formattedIds = _mapInstanceProperty__default["default"](selectedResourceIds).call(selectedResourceIds, id => `"${id}"`).join(', ');
|
|
985
|
+
return `id in (${formattedIds})`;
|
|
986
|
+
}
|
|
987
|
+
function isQueryFilter(filters) {
|
|
988
|
+
if (!filters) return false;
|
|
989
|
+
return 'query' in filters;
|
|
990
|
+
}
|
|
991
|
+
function isSearchFilter(filters) {
|
|
992
|
+
if (!filters) return false;
|
|
993
|
+
return 'filters' in filters || 'fullText' in filters;
|
|
994
|
+
}
|
|
995
|
+
function isPredicateFilter(filters) {
|
|
996
|
+
if (!filters) return false;
|
|
997
|
+
return 'where' in filters;
|
|
998
|
+
}
|
|
999
|
+
function validateFilters(filtersObject) {
|
|
1000
|
+
if (filtersObject.where && filtersObject.filters) {
|
|
1001
|
+
return false;
|
|
1002
|
+
}
|
|
1003
|
+
return Boolean(isQueryFilter(filtersObject.filters) || isSearchFilter(filtersObject.filters) || isPredicateFilter(filtersObject));
|
|
1004
|
+
}
|
|
1005
|
+
function areFiltersApplied(filtersObject) {
|
|
1006
|
+
var _context2;
|
|
1007
|
+
if (!filtersObject) {
|
|
1008
|
+
return false;
|
|
1009
|
+
}
|
|
1010
|
+
if (filtersObject.where && _trimInstanceProperty__default["default"](_context2 = filtersObject.where).call(_context2) !== '') {
|
|
1011
|
+
return true;
|
|
1012
|
+
}
|
|
1013
|
+
if (isQueryFilter(filtersObject.filters)) {
|
|
1014
|
+
return Boolean(filtersObject.filters.query);
|
|
1015
|
+
}
|
|
1016
|
+
if (isSearchFilter(filtersObject.filters)) {
|
|
1017
|
+
var _context3, _context4;
|
|
1018
|
+
const _filters = filtersObject.filters;
|
|
1019
|
+
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))?.());
|
|
1020
|
+
}
|
|
1021
|
+
return false;
|
|
1022
|
+
}
|
|
1023
|
+
function getInitialExportType(args) {
|
|
1024
|
+
if (args.selectedResourceIds?.length) {
|
|
1025
|
+
return EXPORT_TYPES.SELECTED;
|
|
1026
|
+
}
|
|
1027
|
+
if (args.filters?.total && areFiltersApplied(args.filters)) {
|
|
1028
|
+
return EXPORT_TYPES.FILTERED;
|
|
1029
|
+
}
|
|
1030
|
+
return EXPORT_TYPES.ALL;
|
|
1031
|
+
}
|
|
1032
|
+
function removeEmptyGroups(groups) {
|
|
1033
|
+
return _filterInstanceProperty__default["default"](groups).call(groups, group => group.fields && group.fields.length > 0);
|
|
1034
|
+
}
|
|
1035
|
+
|
|
869
1036
|
const isAnyFieldChecked = fields => {
|
|
870
1037
|
return _someInstanceProperty__default["default"](fields).call(fields, field => field.isChecked || field.fields && isAnyFieldChecked(field.fields));
|
|
871
1038
|
};
|
|
@@ -979,6 +1146,25 @@ const getSelectedFieldLabels = group => {
|
|
|
979
1146
|
findSelectedFieldLabels(group.fields);
|
|
980
1147
|
return selectedLabels;
|
|
981
1148
|
};
|
|
1149
|
+
const extractFieldNamesFromGroups = (groups, fieldOrder) => {
|
|
1150
|
+
let checkedFields = [];
|
|
1151
|
+
const getCheckedFields = fields => {
|
|
1152
|
+
return _filterInstanceProperty__default["default"](fields).call(fields, field => {
|
|
1153
|
+
if (field.fields) {
|
|
1154
|
+
return getCheckedFields(field.fields);
|
|
1155
|
+
}
|
|
1156
|
+
if (field.isChecked) checkedFields.push(field);
|
|
1157
|
+
return field.isChecked ?? false;
|
|
1158
|
+
});
|
|
1159
|
+
};
|
|
1160
|
+
_forEachInstanceProperty__default["default"](groups).call(groups, group => {
|
|
1161
|
+
getCheckedFields(group.fields);
|
|
1162
|
+
});
|
|
1163
|
+
return sortFieldsByFieldOrder({
|
|
1164
|
+
fieldNames: extractFieldNamesAndAdditionalFieldExtensions(checkedFields),
|
|
1165
|
+
fieldOrder
|
|
1166
|
+
});
|
|
1167
|
+
};
|
|
982
1168
|
|
|
983
1169
|
let Step = /*#__PURE__*/function (Step) {
|
|
984
1170
|
Step["FileSettings"] = "file-settings";
|
|
@@ -999,21 +1185,27 @@ function validate(_ref) {
|
|
|
999
1185
|
let values = _valuesInstanceProperty__default["default"](_ref),
|
|
1000
1186
|
step = _ref.step,
|
|
1001
1187
|
fieldSelectionMode = _ref.fieldSelectionMode,
|
|
1002
|
-
importedHeaders = _ref.importedHeaders
|
|
1188
|
+
importedHeaders = _ref.importedHeaders,
|
|
1189
|
+
exportType = _ref.exportType;
|
|
1003
1190
|
const fileName = values.fileName,
|
|
1191
|
+
queryPredicate = values.queryPredicate,
|
|
1004
1192
|
locales = values.locales,
|
|
1005
1193
|
groups = values.groups;
|
|
1006
1194
|
const errors = {
|
|
1007
1195
|
fileName: {},
|
|
1008
1196
|
locales: {},
|
|
1009
1197
|
fields: {},
|
|
1010
|
-
importedCsvTemplateFile: {}
|
|
1198
|
+
importedCsvTemplateFile: {},
|
|
1199
|
+
queryPredicate: {}
|
|
1011
1200
|
};
|
|
1012
1201
|
if (uiKit.TextInput.isEmpty(fileName)) {
|
|
1013
1202
|
errors.fileName.missing = true;
|
|
1014
1203
|
} else if (!/^[a-zA-Z0-9-_.]+$/.test(fileName)) {
|
|
1015
1204
|
errors.fileName.invalidInput = true;
|
|
1016
1205
|
}
|
|
1206
|
+
if (exportType === 'query-predicate' && uiKit.TextInput.isEmpty(queryPredicate)) {
|
|
1207
|
+
errors.queryPredicate.missing = true;
|
|
1208
|
+
}
|
|
1017
1209
|
if (step === Step.FieldsSelection) {
|
|
1018
1210
|
if (fieldSelectionMode === 'selected-fields') {
|
|
1019
1211
|
const allFields = _reduceInstanceProperty__default["default"](groups).call(groups, (acc, group) => _concatInstanceProperty__default["default"](acc).call(acc, group.fields), []);
|
|
@@ -1043,140 +1235,6 @@ function isFieldNameValid(header) {
|
|
|
1043
1235
|
return /^[a-zA-Z0-9._-]+$/.test(processedHeader);
|
|
1044
1236
|
}
|
|
1045
1237
|
|
|
1046
|
-
function resourceTypeToFileName(resourceType, locale) {
|
|
1047
|
-
var _context;
|
|
1048
|
-
const date = new Date();
|
|
1049
|
-
const dateFormatter = new Intl.DateTimeFormat(locale, {
|
|
1050
|
-
year: '2-digit',
|
|
1051
|
-
month: '2-digit',
|
|
1052
|
-
day: '2-digit',
|
|
1053
|
-
hour: '2-digit',
|
|
1054
|
-
minute: '2-digit',
|
|
1055
|
-
hour12: false
|
|
1056
|
-
});
|
|
1057
|
-
const parts = dateFormatter.formatToParts(date);
|
|
1058
|
-
const dateParts = _reduceInstanceProperty__default["default"](parts).call(parts, (acc, part) => {
|
|
1059
|
-
if (part.type !== 'literal') {
|
|
1060
|
-
acc[part.type] = part.value;
|
|
1061
|
-
}
|
|
1062
|
-
return acc;
|
|
1063
|
-
}, {});
|
|
1064
|
-
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('-');
|
|
1065
|
-
const formattedDate = `${orderedDateParts}_${dateParts.hour}-${dateParts.minute}`;
|
|
1066
|
-
const resourceTypeMap = {
|
|
1067
|
-
[EXPORTABLE_RESOURCES.CATEGORY]: 'Categories',
|
|
1068
|
-
[EXPORTABLE_RESOURCES.PRODUCT]: 'Products',
|
|
1069
|
-
[EXPORTABLE_RESOURCES.PRODUCT_TYPE]: 'Product_Types',
|
|
1070
|
-
[EXPORTABLE_RESOURCES.DISCOUNT_CODE]: 'Discount_Codes',
|
|
1071
|
-
[EXPORTABLE_RESOURCES.INVENTORY_ENTRY]: 'Inventories',
|
|
1072
|
-
[EXPORTABLE_RESOURCES.CUSTOMER]: 'Customers',
|
|
1073
|
-
[EXPORTABLE_RESOURCES.ORDER]: 'Orders'
|
|
1074
|
-
};
|
|
1075
|
-
const displayName = resourceTypeMap[resourceType];
|
|
1076
|
-
if (!displayName) {
|
|
1077
|
-
throw new UnexpectedResourceTypeError(resourceType);
|
|
1078
|
-
}
|
|
1079
|
-
return `${displayName}_Export_${formattedDate}`;
|
|
1080
|
-
}
|
|
1081
|
-
function mapLocalesToOptions(locales) {
|
|
1082
|
-
return _mapInstanceProperty__default["default"](locales).call(locales, locale => ({
|
|
1083
|
-
value: locale,
|
|
1084
|
-
label: locale
|
|
1085
|
-
}));
|
|
1086
|
-
}
|
|
1087
|
-
function isFilledArray(maybeArray) {
|
|
1088
|
-
return _Array$isArray__default["default"](maybeArray) && maybeArray.length > 0;
|
|
1089
|
-
}
|
|
1090
|
-
function appendCsvOrJsonExtensionIfAbsent(fileName, fileFormat) {
|
|
1091
|
-
const extensionRegex = /\.(csv|json)$/i;
|
|
1092
|
-
if (!extensionRegex.test(fileName)) return `${fileName}.${fileFormat}`;
|
|
1093
|
-
return fileName;
|
|
1094
|
-
}
|
|
1095
|
-
function getExportLogsLink(projectKey, msg) {
|
|
1096
|
-
return jsxRuntime.jsx(uiKit.Link, {
|
|
1097
|
-
to: `/${projectKey}/operations/export/logs`,
|
|
1098
|
-
children: msg
|
|
1099
|
-
}, "link");
|
|
1100
|
-
}
|
|
1101
|
-
const extractFieldNamesAndAdditionalFieldExtensions = fields => {
|
|
1102
|
-
const result = _reduceInstanceProperty__default["default"](fields).call(fields, (acc, field) => {
|
|
1103
|
-
if (field.extendedFieldNames) {
|
|
1104
|
-
return [...acc, field.name, ...field.extendedFieldNames];
|
|
1105
|
-
}
|
|
1106
|
-
return [...acc, field.name];
|
|
1107
|
-
}, []);
|
|
1108
|
-
return [...new _Set__default["default"](result)];
|
|
1109
|
-
};
|
|
1110
|
-
function sortFieldsByFieldOrder(_ref) {
|
|
1111
|
-
let fieldNames = _ref.fieldNames,
|
|
1112
|
-
fieldOrder = _ref.fieldOrder;
|
|
1113
|
-
if (isFilledArray(fieldOrder)) {
|
|
1114
|
-
return _sortInstanceProperty__default["default"](fieldNames).call(fieldNames, (a, b) => {
|
|
1115
|
-
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]);
|
|
1116
|
-
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]);
|
|
1117
|
-
|
|
1118
|
-
// If a field is not 'custom',then consider it as '*'
|
|
1119
|
-
orderA = orderA === -1 ? _indexOfInstanceProperty__default["default"](fieldOrder).call(fieldOrder, '*') : orderA;
|
|
1120
|
-
orderB = orderB === -1 ? _indexOfInstanceProperty__default["default"](fieldOrder).call(fieldOrder, '*') : orderB;
|
|
1121
|
-
return orderA - orderB;
|
|
1122
|
-
});
|
|
1123
|
-
}
|
|
1124
|
-
return fieldNames;
|
|
1125
|
-
}
|
|
1126
|
-
function buildSelectedExportFilters(selectedResourceIds) {
|
|
1127
|
-
if (!selectedResourceIds || selectedResourceIds?.length === 0) return undefined;
|
|
1128
|
-
const formattedIds = _mapInstanceProperty__default["default"](selectedResourceIds).call(selectedResourceIds, id => `"${id}"`).join(', ');
|
|
1129
|
-
return `id in (${formattedIds})`;
|
|
1130
|
-
}
|
|
1131
|
-
function isQueryFilter(filters) {
|
|
1132
|
-
if (!filters) return false;
|
|
1133
|
-
return 'query' in filters;
|
|
1134
|
-
}
|
|
1135
|
-
function isSearchFilter(filters) {
|
|
1136
|
-
if (!filters) return false;
|
|
1137
|
-
return 'filters' in filters || 'fullText' in filters;
|
|
1138
|
-
}
|
|
1139
|
-
function isPredicateFilter(filters) {
|
|
1140
|
-
if (!filters) return false;
|
|
1141
|
-
return 'where' in filters;
|
|
1142
|
-
}
|
|
1143
|
-
function validateFilters(filtersObject) {
|
|
1144
|
-
if (filtersObject.where && filtersObject.filters) {
|
|
1145
|
-
return false;
|
|
1146
|
-
}
|
|
1147
|
-
return Boolean(isQueryFilter(filtersObject.filters) || isSearchFilter(filtersObject.filters) || isPredicateFilter(filtersObject));
|
|
1148
|
-
}
|
|
1149
|
-
function areFiltersApplied(filtersObject) {
|
|
1150
|
-
var _context2;
|
|
1151
|
-
if (!filtersObject) {
|
|
1152
|
-
return false;
|
|
1153
|
-
}
|
|
1154
|
-
if (filtersObject.where && _trimInstanceProperty__default["default"](_context2 = filtersObject.where).call(_context2) !== '') {
|
|
1155
|
-
return true;
|
|
1156
|
-
}
|
|
1157
|
-
if (isQueryFilter(filtersObject.filters)) {
|
|
1158
|
-
return Boolean(filtersObject.filters.query);
|
|
1159
|
-
}
|
|
1160
|
-
if (isSearchFilter(filtersObject.filters)) {
|
|
1161
|
-
var _context3, _context4;
|
|
1162
|
-
const _filters = filtersObject.filters;
|
|
1163
|
-
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))?.());
|
|
1164
|
-
}
|
|
1165
|
-
return false;
|
|
1166
|
-
}
|
|
1167
|
-
function getInitialExportType(args) {
|
|
1168
|
-
if (args.selectedResourceIds?.length) {
|
|
1169
|
-
return EXPORT_TYPES.SELECTED;
|
|
1170
|
-
}
|
|
1171
|
-
if (args.filters?.total && areFiltersApplied(args.filters)) {
|
|
1172
|
-
return EXPORT_TYPES.FILTERED;
|
|
1173
|
-
}
|
|
1174
|
-
return EXPORT_TYPES.ALL;
|
|
1175
|
-
}
|
|
1176
|
-
function removeEmptyGroups(groups) {
|
|
1177
|
-
return _filterInstanceProperty__default["default"](groups).call(groups, group => group.fields && group.fields.length > 0);
|
|
1178
|
-
}
|
|
1179
|
-
|
|
1180
1238
|
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; }
|
|
1181
1239
|
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; }
|
|
1182
1240
|
const updateFieldGroupsWithIsCheckedValue = (groups, cachedSelectedGroups) => {
|
|
@@ -1401,6 +1459,13 @@ function groupFieldValidationErrors(errors, intl) {
|
|
|
1401
1459
|
});
|
|
1402
1460
|
}
|
|
1403
1461
|
|
|
1462
|
+
function isExportApiSuccessResponse(response) {
|
|
1463
|
+
return 'id' in response && 'state' in response && 'resourceType' in response && 'resourceCount' in response;
|
|
1464
|
+
}
|
|
1465
|
+
function isExportApiErrorResponse(error) {
|
|
1466
|
+
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);
|
|
1467
|
+
}
|
|
1468
|
+
|
|
1404
1469
|
const useInitialValues = props => {
|
|
1405
1470
|
var _context;
|
|
1406
1471
|
const _useApplicationContex = applicationShellConnectors.useApplicationContext(applicationContext => ({
|
|
@@ -1433,6 +1498,7 @@ const useInitialValues = props => {
|
|
|
1433
1498
|
fileName: `${resourceTypeToFileName(props.resourceType, userLocale)}`,
|
|
1434
1499
|
locales: [locale],
|
|
1435
1500
|
groups: updateFieldGroupWithAdditionalFieldExtensions(groups),
|
|
1501
|
+
queryPredicate: '',
|
|
1436
1502
|
// Preferences
|
|
1437
1503
|
fillRows: false,
|
|
1438
1504
|
importedCsvTemplateFile: null
|
|
@@ -1444,37 +1510,30 @@ const _excluded$3 = ["projectKey"];
|
|
|
1444
1510
|
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; }
|
|
1445
1511
|
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; }
|
|
1446
1512
|
async function makeExportRequest(params, asyncDispatchFn) {
|
|
1447
|
-
|
|
1448
|
-
|
|
1449
|
-
|
|
1450
|
-
|
|
1451
|
-
|
|
1452
|
-
|
|
1453
|
-
|
|
1454
|
-
|
|
1455
|
-
|
|
1456
|
-
|
|
1457
|
-
|
|
1458
|
-
|
|
1459
|
-
|
|
1460
|
-
|
|
1461
|
-
throw new InvalidResponseError();
|
|
1462
|
-
}
|
|
1463
|
-
if (!('state' in response)) {
|
|
1464
|
-
throw new InvalidResponseError('Response missing state field');
|
|
1465
|
-
}
|
|
1466
|
-
return response;
|
|
1467
|
-
} catch (responseError) {
|
|
1468
|
-
if (responseError && typeof responseError === 'object' && 'body' in responseError && responseError.body && typeof responseError.body === 'object' && 'validationErrors' in responseError.body) {
|
|
1469
|
-
throw responseError.body;
|
|
1470
|
-
}
|
|
1471
|
-
throw responseError;
|
|
1513
|
+
const projectKey = params.projectKey,
|
|
1514
|
+
requestData = _objectWithoutProperties(params, _excluded$3);
|
|
1515
|
+
const uri = `/${projectKey}/export-operations`;
|
|
1516
|
+
const requestAction = sdk.actions.post({
|
|
1517
|
+
mcApiProxyTarget: constants.MC_API_PROXY_TARGETS.EXPORT,
|
|
1518
|
+
uri,
|
|
1519
|
+
headers: {
|
|
1520
|
+
accept: 'application/json'
|
|
1521
|
+
},
|
|
1522
|
+
payload: requestData
|
|
1523
|
+
});
|
|
1524
|
+
const response = await asyncDispatchFn(requestAction);
|
|
1525
|
+
if (!response || typeof response !== 'object') {
|
|
1526
|
+
throw new InvalidResponseError();
|
|
1472
1527
|
}
|
|
1528
|
+
if (!('state' in response)) {
|
|
1529
|
+
throw new InvalidResponseError('Response missing state field');
|
|
1530
|
+
}
|
|
1531
|
+
return response;
|
|
1473
1532
|
}
|
|
1474
1533
|
function createExportOperation(params, asyncDispatchFn) {
|
|
1475
1534
|
return makeExportRequest(params, asyncDispatchFn);
|
|
1476
1535
|
}
|
|
1477
|
-
function
|
|
1536
|
+
function validateExportOperation(params, asyncDispatchFn) {
|
|
1478
1537
|
return makeExportRequest(_objectSpread$c(_objectSpread$c({}, params), {}, {
|
|
1479
1538
|
dryRun: true
|
|
1480
1539
|
}), asyncDispatchFn);
|
|
@@ -1489,25 +1548,6 @@ const useStartExportOperation = props => {
|
|
|
1489
1548
|
projectKey: applicationContext.project?.key
|
|
1490
1549
|
})),
|
|
1491
1550
|
projectKey = _useApplicationContex.projectKey;
|
|
1492
|
-
const extractFieldNamesFromGroups = groups => {
|
|
1493
|
-
let checkedFields = [];
|
|
1494
|
-
const getCheckedFields = fields => {
|
|
1495
|
-
return _filterInstanceProperty__default["default"](fields).call(fields, field => {
|
|
1496
|
-
if (field.fields) {
|
|
1497
|
-
return getCheckedFields(field.fields);
|
|
1498
|
-
}
|
|
1499
|
-
if (field.isChecked) checkedFields.push(field);
|
|
1500
|
-
return field.isChecked ?? false;
|
|
1501
|
-
});
|
|
1502
|
-
};
|
|
1503
|
-
_forEachInstanceProperty__default["default"](groups).call(groups, group => {
|
|
1504
|
-
getCheckedFields(group.fields);
|
|
1505
|
-
});
|
|
1506
|
-
return sortFieldsByFieldOrder({
|
|
1507
|
-
fieldNames: extractFieldNamesAndAdditionalFieldExtensions(checkedFields),
|
|
1508
|
-
fieldOrder: props.fieldOrder
|
|
1509
|
-
});
|
|
1510
|
-
};
|
|
1511
1551
|
const startExportOperation = async (values, exportType, fieldSelectionMode, localeOption, importedHeaders) => {
|
|
1512
1552
|
try {
|
|
1513
1553
|
if (!projectKey) throw new Error('Project key is missing');
|
|
@@ -1515,7 +1555,7 @@ const useStartExportOperation = props => {
|
|
|
1515
1555
|
if (fieldSelectionMode === 'imported-csv-template' && values.importedCsvTemplateFile) {
|
|
1516
1556
|
fields = importedHeaders;
|
|
1517
1557
|
} else {
|
|
1518
|
-
fields = extractFieldNamesFromGroups(values.groups);
|
|
1558
|
+
fields = extractFieldNamesFromGroups(values.groups, props.fieldOrder);
|
|
1519
1559
|
}
|
|
1520
1560
|
let where = undefined;
|
|
1521
1561
|
let filters = undefined;
|
|
@@ -1528,6 +1568,9 @@ const useStartExportOperation = props => {
|
|
|
1528
1568
|
} else if (isSearchFilter(props.filters.filters)) {
|
|
1529
1569
|
filters = props.filters.filters;
|
|
1530
1570
|
}
|
|
1571
|
+
} else if (exportType === EXPORT_TYPES.QUERY_PREDICATE) {
|
|
1572
|
+
var _context;
|
|
1573
|
+
where = _trimInstanceProperty__default["default"](_context = values.queryPredicate).call(_context);
|
|
1531
1574
|
}
|
|
1532
1575
|
let locales = undefined;
|
|
1533
1576
|
if (localeOption !== 'onlyLocalesFoundInCsvFile') {
|
|
@@ -1544,29 +1587,32 @@ const useStartExportOperation = props => {
|
|
|
1544
1587
|
where,
|
|
1545
1588
|
filters
|
|
1546
1589
|
}, asyncDispatch);
|
|
1547
|
-
|
|
1548
|
-
|
|
1549
|
-
|
|
1550
|
-
|
|
1551
|
-
|
|
1552
|
-
|
|
1553
|
-
|
|
1554
|
-
|
|
1555
|
-
|
|
1556
|
-
|
|
1557
|
-
|
|
1558
|
-
|
|
1559
|
-
|
|
1560
|
-
|
|
1561
|
-
|
|
1562
|
-
|
|
1563
|
-
|
|
1564
|
-
|
|
1565
|
-
|
|
1566
|
-
|
|
1590
|
+
if (isExportApiSuccessResponse(response)) {
|
|
1591
|
+
switch (response.state) {
|
|
1592
|
+
case EXPORT_OPERATION_STATES.QUEUED:
|
|
1593
|
+
case EXPORT_OPERATION_STATES.PROCESSING:
|
|
1594
|
+
case EXPORT_OPERATION_STATES.COMPLETED:
|
|
1595
|
+
showNotification({
|
|
1596
|
+
kind: 'info',
|
|
1597
|
+
domain: constants.DOMAINS.SIDE,
|
|
1598
|
+
// @ts-ignore
|
|
1599
|
+
text: intl.formatMessage(messages.exportOperationSuccessMessage, {
|
|
1600
|
+
newline: getNewLine,
|
|
1601
|
+
logsLink: msg => getExportLogsLink(projectKey, msg),
|
|
1602
|
+
b: getBold
|
|
1603
|
+
})
|
|
1604
|
+
}, {
|
|
1605
|
+
dismissAfter: 5000
|
|
1606
|
+
});
|
|
1607
|
+
if (typeof props.onExportSuccess === 'function') props.onExportSuccess();
|
|
1608
|
+
break;
|
|
1609
|
+
default:
|
|
1610
|
+
throw new UnexpectedExportOperationStateError(response.state);
|
|
1611
|
+
}
|
|
1612
|
+
} else {
|
|
1613
|
+
throw new Error(response.message || 'Unknown error occurred during export operation');
|
|
1567
1614
|
}
|
|
1568
1615
|
} catch (error) {
|
|
1569
|
-
// TODO: custom error messages for each error type
|
|
1570
1616
|
showNotification({
|
|
1571
1617
|
text: intl.formatMessage(messages.unexpectedError),
|
|
1572
1618
|
kind: 'error',
|
|
@@ -1682,7 +1728,7 @@ const useConvertFieldDefinitionsForExport = () => {
|
|
|
1682
1728
|
};
|
|
1683
1729
|
};
|
|
1684
1730
|
|
|
1685
|
-
const
|
|
1731
|
+
const useValidateExportOperation = () => {
|
|
1686
1732
|
const intl = reactIntl.useIntl();
|
|
1687
1733
|
const asyncDispatch = sdk.useAsyncDispatch();
|
|
1688
1734
|
const showNotification = actionsGlobal.useShowNotification();
|
|
@@ -1690,9 +1736,9 @@ const useValidateImportedHeaders = () => {
|
|
|
1690
1736
|
projectKey: context.project?.key
|
|
1691
1737
|
})),
|
|
1692
1738
|
projectKey = _useApplicationContex.projectKey;
|
|
1693
|
-
const
|
|
1739
|
+
const validateExport = async params => {
|
|
1694
1740
|
try {
|
|
1695
|
-
var _context;
|
|
1741
|
+
var _context, _context2, _context3;
|
|
1696
1742
|
if (!projectKey) return;
|
|
1697
1743
|
const invalidFields = _filterInstanceProperty__default["default"](_context = params.fields).call(_context, field => !isFieldNameValid(field));
|
|
1698
1744
|
if (invalidFields.length > 0) {
|
|
@@ -1704,25 +1750,46 @@ const useValidateImportedHeaders = () => {
|
|
|
1704
1750
|
}))
|
|
1705
1751
|
};
|
|
1706
1752
|
}
|
|
1707
|
-
await
|
|
1753
|
+
const response = await validateExportOperation({
|
|
1708
1754
|
projectKey,
|
|
1709
1755
|
resourceType: params.resourceType,
|
|
1710
1756
|
fileName: params.fileName,
|
|
1711
1757
|
fileFormat: params.outputFormat,
|
|
1712
1758
|
fields: params.fields,
|
|
1713
|
-
locales: params.locales
|
|
1759
|
+
locales: params.locales,
|
|
1760
|
+
where: ((_context2 = params.queryPredicate) == null ? void 0 : _bindInstanceProperty__default["default"](_context3 = Function.call).call(_context3, _trimInstanceProperty__default["default"](_context2), _context2))?.() || undefined
|
|
1714
1761
|
}, asyncDispatch);
|
|
1715
|
-
|
|
1716
|
-
success: true,
|
|
1717
|
-
validationErrors: []
|
|
1718
|
-
};
|
|
1719
|
-
} catch (error) {
|
|
1720
|
-
if (typeof error === 'object' && error && 'validationErrors' in error && _Array$isArray__default["default"](error.validationErrors)) {
|
|
1762
|
+
if (isExportApiSuccessResponse(response) && response.resourceCount === 0) {
|
|
1721
1763
|
return {
|
|
1722
1764
|
success: false,
|
|
1723
|
-
|
|
1765
|
+
noResourcesToExportForQueryPredicate: true
|
|
1724
1766
|
};
|
|
1725
1767
|
}
|
|
1768
|
+
return {
|
|
1769
|
+
success: true
|
|
1770
|
+
};
|
|
1771
|
+
} catch (error) {
|
|
1772
|
+
if (isExportApiErrorResponse(error)) {
|
|
1773
|
+
if (error.body.errors?.length) {
|
|
1774
|
+
var _context4;
|
|
1775
|
+
const whereError = _findInstanceProperty__default["default"](_context4 = error.body.errors).call(_context4, error => {
|
|
1776
|
+
var _context5;
|
|
1777
|
+
return error.message && _includesInstanceProperty__default["default"](_context5 = error.message).call(_context5, 'Malformed parameter: where');
|
|
1778
|
+
});
|
|
1779
|
+
if (whereError) {
|
|
1780
|
+
return {
|
|
1781
|
+
success: false,
|
|
1782
|
+
invalidQueryPredicate: true
|
|
1783
|
+
};
|
|
1784
|
+
}
|
|
1785
|
+
}
|
|
1786
|
+
if (error.body.validationErrors?.length) {
|
|
1787
|
+
return {
|
|
1788
|
+
success: false,
|
|
1789
|
+
validationErrors: error.body.validationErrors
|
|
1790
|
+
};
|
|
1791
|
+
}
|
|
1792
|
+
}
|
|
1726
1793
|
showNotification({
|
|
1727
1794
|
text: intl.formatMessage(messages.unexpectedError),
|
|
1728
1795
|
kind: 'error',
|
|
@@ -1735,7 +1802,7 @@ const useValidateImportedHeaders = () => {
|
|
|
1735
1802
|
}
|
|
1736
1803
|
};
|
|
1737
1804
|
return {
|
|
1738
|
-
|
|
1805
|
+
validateExport
|
|
1739
1806
|
};
|
|
1740
1807
|
};
|
|
1741
1808
|
|
|
@@ -1783,6 +1850,7 @@ function ownKeys$9(e, r) { var t = _Object$keys__default["default"](e); if (_Obj
|
|
|
1783
1850
|
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; }
|
|
1784
1851
|
function ExportScopeSection() {
|
|
1785
1852
|
const _useExportResourcesMo = useExportResourcesModalContext(),
|
|
1853
|
+
formik = _useExportResourcesMo.formik,
|
|
1786
1854
|
exportType = _useExportResourcesMo.exportType,
|
|
1787
1855
|
totalResourcesCount = _useExportResourcesMo.totalResourcesCount,
|
|
1788
1856
|
filters = _useExportResourcesMo.filters,
|
|
@@ -1790,10 +1858,11 @@ function ExportScopeSection() {
|
|
|
1790
1858
|
selectedResourceIds = _useExportResourcesMo.selectedResourceIds,
|
|
1791
1859
|
setExportType = _useExportResourcesMo.setExportType,
|
|
1792
1860
|
resourceType = _useExportResourcesMo.resourceType,
|
|
1793
|
-
hideExportSelectedResourcesOption = _useExportResourcesMo.hideExportSelectedResourcesOption
|
|
1794
|
-
|
|
1795
|
-
|
|
1796
|
-
|
|
1861
|
+
hideExportSelectedResourcesOption = _useExportResourcesMo.hideExportSelectedResourcesOption,
|
|
1862
|
+
showQueryPredicateOption = _useExportResourcesMo.showQueryPredicateOption;
|
|
1863
|
+
const shouldShowQueryPredicateField = exportType === EXPORT_TYPES.QUERY_PREDICATE;
|
|
1864
|
+
return jsxRuntime.jsxs(jsxRuntime.Fragment, {
|
|
1865
|
+
children: [jsxRuntime.jsxs(uiKit.RadioInput.Group, {
|
|
1797
1866
|
value: exportType,
|
|
1798
1867
|
onChange: e => {
|
|
1799
1868
|
setExportType(e.target.value);
|
|
@@ -1833,8 +1902,23 @@ function ExportScopeSection() {
|
|
|
1833
1902
|
}
|
|
1834
1903
|
}) : messages.exportScopeSelectedWithoutCount
|
|
1835
1904
|
})
|
|
1905
|
+
}), showQueryPredicateOption && jsxRuntime.jsx(uiKit.RadioInput.Option, {
|
|
1906
|
+
value: EXPORT_TYPES.QUERY_PREDICATE,
|
|
1907
|
+
children: jsxRuntime.jsx(uiKit.Text.Body, {
|
|
1908
|
+
intlMessage: messages.queryPredicate
|
|
1909
|
+
})
|
|
1836
1910
|
})]
|
|
1837
|
-
})
|
|
1911
|
+
}), shouldShowQueryPredicateField && jsxRuntime.jsx(uiKit.TextField, {
|
|
1912
|
+
name: "queryPredicate",
|
|
1913
|
+
"data-testid": "query-predicate-field",
|
|
1914
|
+
title: "",
|
|
1915
|
+
onChange: formik.handleChange,
|
|
1916
|
+
onBlur: formik.handleBlur,
|
|
1917
|
+
value: _valuesInstanceProperty__default["default"](formik).queryPredicate,
|
|
1918
|
+
touched: formik.touched.queryPredicate,
|
|
1919
|
+
errors: mapFormikErrors(formik.errors.queryPredicate),
|
|
1920
|
+
renderError: renderQueryPredicateError
|
|
1921
|
+
})]
|
|
1838
1922
|
});
|
|
1839
1923
|
}
|
|
1840
1924
|
|
|
@@ -2711,47 +2795,66 @@ const ExportResourcesProvider = _ref => {
|
|
|
2711
2795
|
setValidationErrors = _React$useState12[1];
|
|
2712
2796
|
const _useStartExportOperat = useStartExportOperation(props),
|
|
2713
2797
|
startExportOperation = _useStartExportOperat.startExportOperation;
|
|
2714
|
-
const
|
|
2715
|
-
|
|
2716
|
-
const onSubmit = async values => {
|
|
2717
|
-
if (currentStep === Step.FileSettings) {
|
|
2718
|
-
setCurrentStep(Step.FieldsSelection);
|
|
2719
|
-
} else if (currentStep === Step.FieldsSelection) {
|
|
2720
|
-
if (fieldSelectionMode !== 'imported-csv-template') {
|
|
2721
|
-
setCurrentStep(Step.ConfirmExport);
|
|
2722
|
-
return;
|
|
2723
|
-
}
|
|
2724
|
-
const isUsingImportedCsvLocales = localeOption === 'onlyLocalesFoundInCsvFile';
|
|
2725
|
-
const validationResult = await validateHeaders({
|
|
2726
|
-
fileName: values.fileName,
|
|
2727
|
-
outputFormat: values.outputFormat,
|
|
2728
|
-
resourceType: props.resourceType,
|
|
2729
|
-
fields: importedHeaders,
|
|
2730
|
-
locales: isUsingImportedCsvLocales ? undefined : values.locales
|
|
2731
|
-
});
|
|
2732
|
-
if (validationResult?.success) {
|
|
2733
|
-
setCurrentStep(Step.ConfirmExport);
|
|
2734
|
-
} else {
|
|
2735
|
-
setValidationErrors(validationResult?.validationErrors);
|
|
2736
|
-
setCurrentStep(Step.ValidationErrors);
|
|
2737
|
-
}
|
|
2738
|
-
} else {
|
|
2739
|
-
startExportOperation(values, exportType, fieldSelectionMode, localeOption, importedHeaders);
|
|
2740
|
-
}
|
|
2741
|
-
};
|
|
2798
|
+
const _useValidateExportOpe = useValidateExportOperation(),
|
|
2799
|
+
validateExport = _useValidateExportOpe.validateExport;
|
|
2742
2800
|
const formik$1 = formik.useFormik({
|
|
2743
2801
|
initialValues,
|
|
2744
2802
|
validate: values => validate({
|
|
2745
2803
|
values,
|
|
2746
2804
|
step: currentStep,
|
|
2747
2805
|
fieldSelectionMode,
|
|
2748
|
-
importedHeaders
|
|
2806
|
+
importedHeaders,
|
|
2807
|
+
exportType
|
|
2749
2808
|
}),
|
|
2750
|
-
onSubmit
|
|
2809
|
+
onSubmit: async values => {
|
|
2810
|
+
if (currentStep === Step.FileSettings) {
|
|
2811
|
+
if (exportType === EXPORT_TYPES.QUERY_PREDICATE) {
|
|
2812
|
+
const validationResult = await validateExport({
|
|
2813
|
+
fileName: values.fileName,
|
|
2814
|
+
outputFormat: values.outputFormat,
|
|
2815
|
+
resourceType: props.resourceType,
|
|
2816
|
+
fields: extractFieldNamesFromGroups(values.groups, props.fieldOrder),
|
|
2817
|
+
locales: values.locales,
|
|
2818
|
+
queryPredicate: values.queryPredicate
|
|
2819
|
+
});
|
|
2820
|
+
if (validationResult?.invalidQueryPredicate) {
|
|
2821
|
+
formik$1.setFieldError('queryPredicate', 'invalidInput');
|
|
2822
|
+
return;
|
|
2823
|
+
}
|
|
2824
|
+
if (validationResult?.noResourcesToExportForQueryPredicate) {
|
|
2825
|
+
formik$1.setFieldError('queryPredicate', 'noResourcesToExportForQueryPredicate');
|
|
2826
|
+
return;
|
|
2827
|
+
}
|
|
2828
|
+
}
|
|
2829
|
+
setCurrentStep(Step.FieldsSelection);
|
|
2830
|
+
} else if (currentStep === Step.FieldsSelection) {
|
|
2831
|
+
if (fieldSelectionMode !== 'imported-csv-template') {
|
|
2832
|
+
setCurrentStep(Step.ConfirmExport);
|
|
2833
|
+
return;
|
|
2834
|
+
}
|
|
2835
|
+
const isUsingImportedCsvLocales = localeOption === 'onlyLocalesFoundInCsvFile';
|
|
2836
|
+
const validationResult = await validateExport({
|
|
2837
|
+
fileName: values.fileName,
|
|
2838
|
+
outputFormat: values.outputFormat,
|
|
2839
|
+
resourceType: props.resourceType,
|
|
2840
|
+
fields: importedHeaders,
|
|
2841
|
+
locales: isUsingImportedCsvLocales ? undefined : values.locales,
|
|
2842
|
+
queryPredicate: values.queryPredicate
|
|
2843
|
+
});
|
|
2844
|
+
if (validationResult?.success) {
|
|
2845
|
+
setCurrentStep(Step.ConfirmExport);
|
|
2846
|
+
} else {
|
|
2847
|
+
setValidationErrors(validationResult?.validationErrors);
|
|
2848
|
+
setCurrentStep(Step.ValidationErrors);
|
|
2849
|
+
}
|
|
2850
|
+
} else {
|
|
2851
|
+
startExportOperation(values, exportType, fieldSelectionMode, localeOption, importedHeaders);
|
|
2852
|
+
}
|
|
2853
|
+
}
|
|
2751
2854
|
});
|
|
2752
2855
|
React__default["default"].useEffect(() => {
|
|
2753
2856
|
formik$1.validateForm();
|
|
2754
|
-
}, [currentStep, fieldSelectionMode, importedHeaders]);
|
|
2857
|
+
}, [currentStep, fieldSelectionMode, importedHeaders, exportType]);
|
|
2755
2858
|
return jsxRuntime.jsx(ExportResourcesContext.Provider, {
|
|
2756
2859
|
value: {
|
|
2757
2860
|
formik: formik$1,
|
|
@@ -2763,6 +2866,7 @@ const ExportResourcesProvider = _ref => {
|
|
|
2763
2866
|
totalResourcesCount: props.totalResourcesCount,
|
|
2764
2867
|
selectedResourceIds: props.selectedResourceIds,
|
|
2765
2868
|
hideExportSelectedResourcesOption: props.hideExportSelectedResourcesOption,
|
|
2869
|
+
showQueryPredicateOption: props.showQueryPredicateOption,
|
|
2766
2870
|
filters: props.filters,
|
|
2767
2871
|
hasFilters: areFiltersApplied(props.filters),
|
|
2768
2872
|
setExportType,
|
|
@@ -3114,11 +3218,11 @@ function getDefaultDropWrapperStyles(_dropAreaState) {
|
|
|
3114
3218
|
return /*#__PURE__*/react.css(process.env.NODE_ENV === "production" ? "" : ";label:getDefaultDropWrapperStyles;", process.env.NODE_ENV === "production" ? "" : "/*# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImRyb3AtYXJlYS13cmFwcGVyLnRzeCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUF5QlkiLCJmaWxlIjoiZHJvcC1hcmVhLXdyYXBwZXIudHN4Iiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgdHlwZSBEcm9wem9uZVJvb3RQcm9wcyB9IGZyb20gJ3JlYWN0LWRyb3B6b25lJ1xuaW1wb3J0IHsgY3NzIH0gZnJvbSAnQGVtb3Rpb24vcmVhY3QnXG5pbXBvcnQgc3R5bGVkIGZyb20gJ0BlbW90aW9uL3N0eWxlZCdcbmltcG9ydCB7IHN0eWxlcyB9IGZyb20gJy4vc3R5bGVzJ1xuaW1wb3J0IHsgdHlwZSBEcm9wQXJlYVN0YXRlIH0gZnJvbSAnLi4vLi4vLi4vQHR5cGVzJ1xuXG5pbnRlcmZhY2UgRHJvcFdyYXBwZXJQcm9wcyBleHRlbmRzIERyb3B6b25lUm9vdFByb3BzIHtcbiAgZHJvcEFyZWFTdGF0ZTogRHJvcEFyZWFTdGF0ZVxufVxuZXhwb3J0IGNvbnN0IERyb3BXcmFwcGVyID0gc3R5bGVkLmRpdjxEcm9wV3JhcHBlclByb3BzPmBcbiAgJHtzdHlsZXMuYmFzZX1cbiAgJHsocHJvcHMpID0+IHtcbiAgICBpZiAocHJvcHMuZHJvcEFyZWFTdGF0ZSA9PT0gJ2RlZmF1bHQnKSB7XG4gICAgICByZXR1cm4gc3R5bGVzLnJlYWR5Rm9yRHJvcFxuICAgIH1cbiAgICBpZiAocHJvcHMuZHJvcEFyZWFTdGF0ZSA9PT0gJ2FjdGl2ZS1kcmFnJykge1xuICAgICAgcmV0dXJuIHN0eWxlcy5hY3RpdmVEcmFnXG4gICAgfVxuICAgIGlmIChwcm9wcy5kcm9wQXJlYVN0YXRlID09PSAnZmlsZS1kcm9wcGVkJykge1xuICAgICAgcmV0dXJuIHN0eWxlcy5maWxlRHJvcHBlZFxuICAgIH1cbiAgICByZXR1cm4gZ2V0RGVmYXVsdERyb3BXcmFwcGVyU3R5bGVzKHByb3BzLmRyb3BBcmVhU3RhdGUpXG4gIH19XG5gXG5mdW5jdGlvbiBnZXREZWZhdWx0RHJvcFdyYXBwZXJTdHlsZXMoX2Ryb3BBcmVhU3RhdGU6IG5ldmVyKSB7XG4gIHJldHVybiBjc3NgYFxufVxuIl19 */");
|
|
3115
3219
|
}
|
|
3116
3220
|
|
|
3117
|
-
var ActiveDragDropArea = /*#__PURE__*/React.lazy(() => Promise.resolve().then(function () { return require('./active-drag-drop-area-
|
|
3221
|
+
var ActiveDragDropArea = /*#__PURE__*/React.lazy(() => Promise.resolve().then(function () { return require('./active-drag-drop-area-364cae94.cjs.dev.js' /* webpackChunkName: "active-drag-drop-area" */); }));
|
|
3118
3222
|
|
|
3119
|
-
var EnabledDropArea = /*#__PURE__*/React.lazy(() => Promise.resolve().then(function () { return require('./enabled-drop-area-
|
|
3223
|
+
var EnabledDropArea = /*#__PURE__*/React.lazy(() => Promise.resolve().then(function () { return require('./enabled-drop-area-d120c17d.cjs.dev.js' /* webpackChunkName: "enabled-drop-area" */); }));
|
|
3120
3224
|
|
|
3121
|
-
var FileDropped = /*#__PURE__*/React.lazy(() => Promise.resolve().then(function () { return require('./file-dropped-area-
|
|
3225
|
+
var FileDropped = /*#__PURE__*/React.lazy(() => Promise.resolve().then(function () { return require('./file-dropped-area-e45600e0.cjs.dev.js' /* webpackChunkName: "filed-dropped-area" */); }));
|
|
3122
3226
|
|
|
3123
3227
|
function getDropArea(_ref) {
|
|
3124
3228
|
let dropAreaState = _ref.dropAreaState,
|