@commercetools-frontend-extensions/export-resources-modal 5.0.4 → 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.
- package/dist/{active-drag-drop-area-ab3d5305.cjs.dev.js → active-drag-drop-area-56db6919.cjs.dev.js} +1 -1
- package/dist/{active-drag-drop-area-d0b34d8c.esm.js → active-drag-drop-area-69b691d5.esm.js} +1 -1
- package/dist/{active-drag-drop-area-677cd139.cjs.prod.js → active-drag-drop-area-7fd53916.cjs.prod.js} +1 -1
- package/dist/commercetools-frontend-extensions-export-resources-modal.cjs.dev.js +3 -3
- package/dist/commercetools-frontend-extensions-export-resources-modal.cjs.prod.js +3 -3
- package/dist/commercetools-frontend-extensions-export-resources-modal.esm.js +3 -3
- 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-3ac1d564.esm.js → enabled-drop-area-48a953a6.esm.js} +1 -1
- package/dist/{enabled-drop-area-049033dc.cjs.prod.js → enabled-drop-area-4c8d613f.cjs.prod.js} +1 -1
- package/dist/{enabled-drop-area-76b49e4a.cjs.dev.js → enabled-drop-area-a5fe741d.cjs.dev.js} +1 -1
- package/dist/{file-dropped-area-44d101c3.cjs.dev.js → file-dropped-area-5979698c.cjs.dev.js} +1 -1
- package/dist/{file-dropped-area-d2df8c70.cjs.prod.js → file-dropped-area-b685a683.cjs.prod.js} +1 -1
- package/dist/{file-dropped-area-997435fa.esm.js → file-dropped-area-c8a5f539.esm.js} +1 -1
- package/dist/{index-e4706b61.cjs.dev.js → index-32b358db.cjs.dev.js} +364 -256
- package/dist/{index-1d25c6f7.cjs.prod.js → index-bcefd2cf.cjs.prod.js} +364 -256
- package/dist/{index-969519bd.esm.js → index-f7e098bb.esm.js} +365 -257
- 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
|
+
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.'
|
|
625
645
|
}
|
|
626
646
|
});
|
|
627
647
|
|
|
@@ -645,6 +665,16 @@ 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
|
+
default:
|
|
675
|
+
return null;
|
|
676
|
+
}
|
|
677
|
+
};
|
|
648
678
|
|
|
649
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)); }
|
|
650
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; })(); }
|
|
@@ -789,7 +819,8 @@ const EXPORT_OPERATION_STATES = {
|
|
|
789
819
|
const EXPORT_TYPES = {
|
|
790
820
|
ALL: 'all',
|
|
791
821
|
FILTERED: 'filtered',
|
|
792
|
-
SELECTED: 'selected'
|
|
822
|
+
SELECTED: 'selected',
|
|
823
|
+
QUERY_PREDICATE: 'query-predicate'
|
|
793
824
|
};
|
|
794
825
|
|
|
795
826
|
const EXPORTABLE_RESOURCES = {
|
|
@@ -866,6 +897,140 @@ const DEFAULT_SHORT_LIVED_FLAGS = {};
|
|
|
866
897
|
const DEFAULT_LONG_LIVED_FLAGS = {};
|
|
867
898
|
_objectSpread$f(_objectSpread$f({}, DEFAULT_SHORT_LIVED_FLAGS), DEFAULT_LONG_LIVED_FLAGS);
|
|
868
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
|
+
|
|
869
1034
|
const isAnyFieldChecked = fields => {
|
|
870
1035
|
return _someInstanceProperty__default["default"](fields).call(fields, field => field.isChecked || field.fields && isAnyFieldChecked(field.fields));
|
|
871
1036
|
};
|
|
@@ -979,6 +1144,25 @@ const getSelectedFieldLabels = group => {
|
|
|
979
1144
|
findSelectedFieldLabels(group.fields);
|
|
980
1145
|
return selectedLabels;
|
|
981
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
|
+
};
|
|
982
1166
|
|
|
983
1167
|
let Step = /*#__PURE__*/function (Step) {
|
|
984
1168
|
Step["FileSettings"] = "file-settings";
|
|
@@ -999,21 +1183,27 @@ function validate(_ref) {
|
|
|
999
1183
|
let values = _valuesInstanceProperty__default["default"](_ref),
|
|
1000
1184
|
step = _ref.step,
|
|
1001
1185
|
fieldSelectionMode = _ref.fieldSelectionMode,
|
|
1002
|
-
importedHeaders = _ref.importedHeaders
|
|
1186
|
+
importedHeaders = _ref.importedHeaders,
|
|
1187
|
+
exportType = _ref.exportType;
|
|
1003
1188
|
const fileName = values.fileName,
|
|
1189
|
+
queryPredicate = values.queryPredicate,
|
|
1004
1190
|
locales = values.locales,
|
|
1005
1191
|
groups = values.groups;
|
|
1006
1192
|
const errors = {
|
|
1007
1193
|
fileName: {},
|
|
1008
1194
|
locales: {},
|
|
1009
1195
|
fields: {},
|
|
1010
|
-
importedCsvTemplateFile: {}
|
|
1196
|
+
importedCsvTemplateFile: {},
|
|
1197
|
+
queryPredicate: {}
|
|
1011
1198
|
};
|
|
1012
1199
|
if (uiKit.TextInput.isEmpty(fileName)) {
|
|
1013
1200
|
errors.fileName.missing = true;
|
|
1014
1201
|
} else if (!/^[a-zA-Z0-9-_.]+$/.test(fileName)) {
|
|
1015
1202
|
errors.fileName.invalidInput = true;
|
|
1016
1203
|
}
|
|
1204
|
+
if (exportType === 'query-predicate' && uiKit.TextInput.isEmpty(queryPredicate)) {
|
|
1205
|
+
errors.queryPredicate.missing = true;
|
|
1206
|
+
}
|
|
1017
1207
|
if (step === Step.FieldsSelection) {
|
|
1018
1208
|
if (fieldSelectionMode === 'selected-fields') {
|
|
1019
1209
|
const allFields = _reduceInstanceProperty__default["default"](groups).call(groups, (acc, group) => _concatInstanceProperty__default["default"](acc).call(acc, group.fields), []);
|
|
@@ -1043,140 +1233,6 @@ function isFieldNameValid(header) {
|
|
|
1043
1233
|
return /^[a-zA-Z0-9._-]+$/.test(processedHeader);
|
|
1044
1234
|
}
|
|
1045
1235
|
|
|
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
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; }
|
|
1181
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; }
|
|
1182
1238
|
const updateFieldGroupsWithIsCheckedValue = (groups, cachedSelectedGroups) => {
|
|
@@ -1401,6 +1457,13 @@ function groupFieldValidationErrors(errors, intl) {
|
|
|
1401
1457
|
});
|
|
1402
1458
|
}
|
|
1403
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
|
+
|
|
1404
1467
|
const useInitialValues = props => {
|
|
1405
1468
|
var _context;
|
|
1406
1469
|
const _useApplicationContex = applicationShellConnectors.useApplicationContext(applicationContext => ({
|
|
@@ -1433,6 +1496,7 @@ const useInitialValues = props => {
|
|
|
1433
1496
|
fileName: `${resourceTypeToFileName(props.resourceType, userLocale)}`,
|
|
1434
1497
|
locales: [locale],
|
|
1435
1498
|
groups: updateFieldGroupWithAdditionalFieldExtensions(groups),
|
|
1499
|
+
queryPredicate: '',
|
|
1436
1500
|
// Preferences
|
|
1437
1501
|
fillRows: false,
|
|
1438
1502
|
importedCsvTemplateFile: null
|
|
@@ -1444,37 +1508,30 @@ const _excluded$3 = ["projectKey"];
|
|
|
1444
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; }
|
|
1445
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; }
|
|
1446
1510
|
async function makeExportRequest(params, asyncDispatchFn) {
|
|
1447
|
-
|
|
1448
|
-
|
|
1449
|
-
|
|
1450
|
-
|
|
1451
|
-
|
|
1452
|
-
|
|
1453
|
-
|
|
1454
|
-
|
|
1455
|
-
|
|
1456
|
-
|
|
1457
|
-
|
|
1458
|
-
|
|
1459
|
-
|
|
1460
|
-
|
|
1461
|
-
|
|
1462
|
-
|
|
1463
|
-
|
|
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;
|
|
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');
|
|
1472
1528
|
}
|
|
1529
|
+
return response;
|
|
1473
1530
|
}
|
|
1474
1531
|
function createExportOperation(params, asyncDispatchFn) {
|
|
1475
1532
|
return makeExportRequest(params, asyncDispatchFn);
|
|
1476
1533
|
}
|
|
1477
|
-
function
|
|
1534
|
+
function validateExportOperation(params, asyncDispatchFn) {
|
|
1478
1535
|
return makeExportRequest(_objectSpread$c(_objectSpread$c({}, params), {}, {
|
|
1479
1536
|
dryRun: true
|
|
1480
1537
|
}), asyncDispatchFn);
|
|
@@ -1489,25 +1546,6 @@ const useStartExportOperation = props => {
|
|
|
1489
1546
|
projectKey: applicationContext.project?.key
|
|
1490
1547
|
})),
|
|
1491
1548
|
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
1549
|
const startExportOperation = async (values, exportType, fieldSelectionMode, localeOption, importedHeaders) => {
|
|
1512
1550
|
try {
|
|
1513
1551
|
if (!projectKey) throw new Error('Project key is missing');
|
|
@@ -1515,7 +1553,7 @@ const useStartExportOperation = props => {
|
|
|
1515
1553
|
if (fieldSelectionMode === 'imported-csv-template' && values.importedCsvTemplateFile) {
|
|
1516
1554
|
fields = importedHeaders;
|
|
1517
1555
|
} else {
|
|
1518
|
-
fields = extractFieldNamesFromGroups(values.groups);
|
|
1556
|
+
fields = extractFieldNamesFromGroups(values.groups, props.fieldOrder);
|
|
1519
1557
|
}
|
|
1520
1558
|
let where = undefined;
|
|
1521
1559
|
let filters = undefined;
|
|
@@ -1528,6 +1566,9 @@ const useStartExportOperation = props => {
|
|
|
1528
1566
|
} else if (isSearchFilter(props.filters.filters)) {
|
|
1529
1567
|
filters = props.filters.filters;
|
|
1530
1568
|
}
|
|
1569
|
+
} else if (exportType === EXPORT_TYPES.QUERY_PREDICATE) {
|
|
1570
|
+
var _context;
|
|
1571
|
+
where = _trimInstanceProperty__default["default"](_context = values.queryPredicate).call(_context);
|
|
1531
1572
|
}
|
|
1532
1573
|
let locales = undefined;
|
|
1533
1574
|
if (localeOption !== 'onlyLocalesFoundInCsvFile') {
|
|
@@ -1544,29 +1585,32 @@ const useStartExportOperation = props => {
|
|
|
1544
1585
|
where,
|
|
1545
1586
|
filters
|
|
1546
1587
|
}, asyncDispatch);
|
|
1547
|
-
|
|
1548
|
-
|
|
1549
|
-
|
|
1550
|
-
|
|
1551
|
-
|
|
1552
|
-
|
|
1553
|
-
|
|
1554
|
-
|
|
1555
|
-
|
|
1556
|
-
|
|
1557
|
-
|
|
1558
|
-
|
|
1559
|
-
|
|
1560
|
-
|
|
1561
|
-
|
|
1562
|
-
|
|
1563
|
-
|
|
1564
|
-
|
|
1565
|
-
|
|
1566
|
-
|
|
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');
|
|
1567
1612
|
}
|
|
1568
1613
|
} catch (error) {
|
|
1569
|
-
// TODO: custom error messages for each error type
|
|
1570
1614
|
showNotification({
|
|
1571
1615
|
text: intl.formatMessage(messages.unexpectedError),
|
|
1572
1616
|
kind: 'error',
|
|
@@ -1682,7 +1726,7 @@ const useConvertFieldDefinitionsForExport = () => {
|
|
|
1682
1726
|
};
|
|
1683
1727
|
};
|
|
1684
1728
|
|
|
1685
|
-
const
|
|
1729
|
+
const useValidateExportOperation = () => {
|
|
1686
1730
|
const intl = reactIntl.useIntl();
|
|
1687
1731
|
const asyncDispatch = sdk.useAsyncDispatch();
|
|
1688
1732
|
const showNotification = actionsGlobal.useShowNotification();
|
|
@@ -1690,9 +1734,9 @@ const useValidateImportedHeaders = () => {
|
|
|
1690
1734
|
projectKey: context.project?.key
|
|
1691
1735
|
})),
|
|
1692
1736
|
projectKey = _useApplicationContex.projectKey;
|
|
1693
|
-
const
|
|
1737
|
+
const validateExport = async params => {
|
|
1694
1738
|
try {
|
|
1695
|
-
var _context;
|
|
1739
|
+
var _context, _context2, _context3;
|
|
1696
1740
|
if (!projectKey) return;
|
|
1697
1741
|
const invalidFields = _filterInstanceProperty__default["default"](_context = params.fields).call(_context, field => !isFieldNameValid(field));
|
|
1698
1742
|
if (invalidFields.length > 0) {
|
|
@@ -1704,25 +1748,46 @@ const useValidateImportedHeaders = () => {
|
|
|
1704
1748
|
}))
|
|
1705
1749
|
};
|
|
1706
1750
|
}
|
|
1707
|
-
await
|
|
1751
|
+
const response = await validateExportOperation({
|
|
1708
1752
|
projectKey,
|
|
1709
1753
|
resourceType: params.resourceType,
|
|
1710
1754
|
fileName: params.fileName,
|
|
1711
1755
|
fileFormat: params.outputFormat,
|
|
1712
1756
|
fields: params.fields,
|
|
1713
|
-
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
|
|
1714
1759
|
}, 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)) {
|
|
1760
|
+
if (isExportApiSuccessResponse(response) && response.resourceCount === 0) {
|
|
1721
1761
|
return {
|
|
1722
1762
|
success: false,
|
|
1723
|
-
|
|
1763
|
+
noResourcesToExport: true
|
|
1724
1764
|
};
|
|
1725
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
|
+
}
|
|
1726
1791
|
showNotification({
|
|
1727
1792
|
text: intl.formatMessage(messages.unexpectedError),
|
|
1728
1793
|
kind: 'error',
|
|
@@ -1735,7 +1800,7 @@ const useValidateImportedHeaders = () => {
|
|
|
1735
1800
|
}
|
|
1736
1801
|
};
|
|
1737
1802
|
return {
|
|
1738
|
-
|
|
1803
|
+
validateExport
|
|
1739
1804
|
};
|
|
1740
1805
|
};
|
|
1741
1806
|
|
|
@@ -1783,6 +1848,7 @@ function ownKeys$9(e, r) { var t = _Object$keys__default["default"](e); if (_Obj
|
|
|
1783
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; }
|
|
1784
1849
|
function ExportScopeSection() {
|
|
1785
1850
|
const _useExportResourcesMo = useExportResourcesModalContext(),
|
|
1851
|
+
formik = _useExportResourcesMo.formik,
|
|
1786
1852
|
exportType = _useExportResourcesMo.exportType,
|
|
1787
1853
|
totalResourcesCount = _useExportResourcesMo.totalResourcesCount,
|
|
1788
1854
|
filters = _useExportResourcesMo.filters,
|
|
@@ -1790,10 +1856,11 @@ function ExportScopeSection() {
|
|
|
1790
1856
|
selectedResourceIds = _useExportResourcesMo.selectedResourceIds,
|
|
1791
1857
|
setExportType = _useExportResourcesMo.setExportType,
|
|
1792
1858
|
resourceType = _useExportResourcesMo.resourceType,
|
|
1793
|
-
hideExportSelectedResourcesOption = _useExportResourcesMo.hideExportSelectedResourcesOption
|
|
1794
|
-
|
|
1795
|
-
|
|
1796
|
-
|
|
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, {
|
|
1797
1864
|
value: exportType,
|
|
1798
1865
|
onChange: e => {
|
|
1799
1866
|
setExportType(e.target.value);
|
|
@@ -1833,8 +1900,23 @@ function ExportScopeSection() {
|
|
|
1833
1900
|
}
|
|
1834
1901
|
}) : messages.exportScopeSelectedWithoutCount
|
|
1835
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
|
+
})
|
|
1836
1908
|
})]
|
|
1837
|
-
})
|
|
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
|
+
})]
|
|
1838
1920
|
});
|
|
1839
1921
|
}
|
|
1840
1922
|
|
|
@@ -2681,6 +2763,8 @@ const _excluded$1 = ["children"];
|
|
|
2681
2763
|
const ExportResourcesProvider = _ref => {
|
|
2682
2764
|
let children = _ref.children,
|
|
2683
2765
|
props = _objectWithoutProperties(_ref, _excluded$1);
|
|
2766
|
+
const intl = reactIntl.useIntl();
|
|
2767
|
+
const showNotification = actionsGlobal.useShowNotification();
|
|
2684
2768
|
const initialValues = useInitialValues(props);
|
|
2685
2769
|
const _React$useState = React__default["default"].useState(Step.FileSettings),
|
|
2686
2770
|
_React$useState2 = _slicedToArray(_React$useState, 2),
|
|
@@ -2711,47 +2795,70 @@ 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?.noResourcesToExport) {
|
|
2825
|
+
showNotification({
|
|
2826
|
+
text: intl.formatMessage(messages.noResourcesToExport),
|
|
2827
|
+
kind: 'error',
|
|
2828
|
+
domain: constants.DOMAINS.PAGE
|
|
2829
|
+
});
|
|
2830
|
+
return;
|
|
2831
|
+
}
|
|
2832
|
+
}
|
|
2833
|
+
setCurrentStep(Step.FieldsSelection);
|
|
2834
|
+
} else if (currentStep === Step.FieldsSelection) {
|
|
2835
|
+
if (fieldSelectionMode !== 'imported-csv-template') {
|
|
2836
|
+
setCurrentStep(Step.ConfirmExport);
|
|
2837
|
+
return;
|
|
2838
|
+
}
|
|
2839
|
+
const isUsingImportedCsvLocales = localeOption === 'onlyLocalesFoundInCsvFile';
|
|
2840
|
+
const validationResult = await validateExport({
|
|
2841
|
+
fileName: values.fileName,
|
|
2842
|
+
outputFormat: values.outputFormat,
|
|
2843
|
+
resourceType: props.resourceType,
|
|
2844
|
+
fields: importedHeaders,
|
|
2845
|
+
locales: isUsingImportedCsvLocales ? undefined : values.locales,
|
|
2846
|
+
queryPredicate: values.queryPredicate
|
|
2847
|
+
});
|
|
2848
|
+
if (validationResult?.success) {
|
|
2849
|
+
setCurrentStep(Step.ConfirmExport);
|
|
2850
|
+
} else {
|
|
2851
|
+
setValidationErrors(validationResult?.validationErrors);
|
|
2852
|
+
setCurrentStep(Step.ValidationErrors);
|
|
2853
|
+
}
|
|
2854
|
+
} else {
|
|
2855
|
+
startExportOperation(values, exportType, fieldSelectionMode, localeOption, importedHeaders);
|
|
2856
|
+
}
|
|
2857
|
+
}
|
|
2751
2858
|
});
|
|
2752
2859
|
React__default["default"].useEffect(() => {
|
|
2753
2860
|
formik$1.validateForm();
|
|
2754
|
-
}, [currentStep, fieldSelectionMode, importedHeaders]);
|
|
2861
|
+
}, [currentStep, fieldSelectionMode, importedHeaders, exportType]);
|
|
2755
2862
|
return jsxRuntime.jsx(ExportResourcesContext.Provider, {
|
|
2756
2863
|
value: {
|
|
2757
2864
|
formik: formik$1,
|
|
@@ -2763,6 +2870,7 @@ const ExportResourcesProvider = _ref => {
|
|
|
2763
2870
|
totalResourcesCount: props.totalResourcesCount,
|
|
2764
2871
|
selectedResourceIds: props.selectedResourceIds,
|
|
2765
2872
|
hideExportSelectedResourcesOption: props.hideExportSelectedResourcesOption,
|
|
2873
|
+
showQueryPredicateOption: props.showQueryPredicateOption,
|
|
2766
2874
|
filters: props.filters,
|
|
2767
2875
|
hasFilters: areFiltersApplied(props.filters),
|
|
2768
2876
|
setExportType,
|
|
@@ -3114,11 +3222,11 @@ function getDefaultDropWrapperStyles(_dropAreaState) {
|
|
|
3114
3222
|
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
3223
|
}
|
|
3116
3224
|
|
|
3117
|
-
var ActiveDragDropArea = /*#__PURE__*/React.lazy(() => Promise.resolve().then(function () { return require('./active-drag-drop-area-
|
|
3225
|
+
var ActiveDragDropArea = /*#__PURE__*/React.lazy(() => Promise.resolve().then(function () { return require('./active-drag-drop-area-56db6919.cjs.dev.js' /* webpackChunkName: "active-drag-drop-area" */); }));
|
|
3118
3226
|
|
|
3119
|
-
var EnabledDropArea = /*#__PURE__*/React.lazy(() => Promise.resolve().then(function () { return require('./enabled-drop-area-
|
|
3227
|
+
var EnabledDropArea = /*#__PURE__*/React.lazy(() => Promise.resolve().then(function () { return require('./enabled-drop-area-a5fe741d.cjs.dev.js' /* webpackChunkName: "enabled-drop-area" */); }));
|
|
3120
3228
|
|
|
3121
|
-
var FileDropped = /*#__PURE__*/React.lazy(() => Promise.resolve().then(function () { return require('./file-dropped-area-
|
|
3229
|
+
var FileDropped = /*#__PURE__*/React.lazy(() => Promise.resolve().then(function () { return require('./file-dropped-area-5979698c.cjs.dev.js' /* webpackChunkName: "filed-dropped-area" */); }));
|
|
3122
3230
|
|
|
3123
3231
|
function getDropArea(_ref) {
|
|
3124
3232
|
let dropAreaState = _ref.dropAreaState,
|