@commercetools-frontend-extensions/export-resources-modal 0.0.0-canary-20240821150843 → 0.0.0-canary-20240823130607
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/README.md +1 -1
- package/dist/commercetools-frontend-extensions-export-resources-modal.cjs.dev.js +25 -9
- package/dist/commercetools-frontend-extensions-export-resources-modal.cjs.prod.js +25 -9
- package/dist/commercetools-frontend-extensions-export-resources-modal.esm.js +24 -9
- package/dist/declarations/src/@types/export-resources-modal-types.d.ts +2 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -130,7 +130,7 @@ import ExportResourcesModal from '@commercetools-frontend-extensions/export-reso
|
|
|
130
130
|
outputFormat="csv"
|
|
131
131
|
resourceType="category"
|
|
132
132
|
filters={{
|
|
133
|
-
|
|
133
|
+
queryPredicate: 'key = "category-key"',
|
|
134
134
|
total: 20
|
|
135
135
|
}}
|
|
136
136
|
totalResourcesCount={143}
|
|
@@ -36,6 +36,7 @@ var _Array$isArray = require('@babel/runtime-corejs3/core-js-stable/array/is-arr
|
|
|
36
36
|
var _Set = require('@babel/runtime-corejs3/core-js-stable/set');
|
|
37
37
|
var _sortInstanceProperty = require('@babel/runtime-corejs3/core-js-stable/instance/sort');
|
|
38
38
|
var _indexOfInstanceProperty = require('@babel/runtime-corejs3/core-js-stable/instance/index-of');
|
|
39
|
+
var _trimInstanceProperty = require('@babel/runtime-corejs3/core-js-stable/instance/trim');
|
|
39
40
|
var moment = require('moment');
|
|
40
41
|
var _someInstanceProperty = require('@babel/runtime-corejs3/core-js-stable/instance/some');
|
|
41
42
|
var _findInstanceProperty = require('@babel/runtime-corejs3/core-js-stable/instance/find');
|
|
@@ -73,6 +74,7 @@ var _Array$isArray__default = /*#__PURE__*/_interopDefault(_Array$isArray);
|
|
|
73
74
|
var _Set__default = /*#__PURE__*/_interopDefault(_Set);
|
|
74
75
|
var _sortInstanceProperty__default = /*#__PURE__*/_interopDefault(_sortInstanceProperty);
|
|
75
76
|
var _indexOfInstanceProperty__default = /*#__PURE__*/_interopDefault(_indexOfInstanceProperty);
|
|
77
|
+
var _trimInstanceProperty__default = /*#__PURE__*/_interopDefault(_trimInstanceProperty);
|
|
76
78
|
var moment__default = /*#__PURE__*/_interopDefault(moment);
|
|
77
79
|
var _someInstanceProperty__default = /*#__PURE__*/_interopDefault(_someInstanceProperty);
|
|
78
80
|
var _findInstanceProperty__default = /*#__PURE__*/_interopDefault(_findInstanceProperty);
|
|
@@ -634,11 +636,23 @@ function buildSelectedExportFilters(selectedResourceIds) {
|
|
|
634
636
|
const formattedIds = _mapInstanceProperty__default["default"](selectedResourceIds).call(selectedResourceIds, id => `"${id}"`).join(', ');
|
|
635
637
|
return `id in (${formattedIds})`;
|
|
636
638
|
}
|
|
639
|
+
function validateFilters(filters) {
|
|
640
|
+
var _context;
|
|
641
|
+
const hasQueryPredicate = typeof filters.queryPredicate === 'string' && _trimInstanceProperty__default["default"](_context = filters.queryPredicate).call(_context) !== '';
|
|
642
|
+
const hasSearchQuery = !!(filters.searchQuery && typeof filters.searchQuery === 'object');
|
|
643
|
+
const hasValidTotal = typeof filters.total === 'number' && filters.total >= 0;
|
|
644
|
+
|
|
645
|
+
// Ensure only one of `queryPredicate` or `searchQuery` is applied
|
|
646
|
+
const onlyOneFilterApplied = hasQueryPredicate && !hasSearchQuery || !hasQueryPredicate && hasSearchQuery;
|
|
647
|
+
return onlyOneFilterApplied && hasValidTotal;
|
|
648
|
+
}
|
|
637
649
|
function areFiltersApplied(filters) {
|
|
638
650
|
if (!filters) {
|
|
639
651
|
return false;
|
|
640
652
|
}
|
|
641
|
-
|
|
653
|
+
const hasQueryPredicate = (filters.queryPredicate?.trim() ?? '') !== '';
|
|
654
|
+
const hasSearchQuery = _Object$keys__default["default"](filters.searchQuery ?? {}).length > 0;
|
|
655
|
+
return hasQueryPredicate || hasSearchQuery;
|
|
642
656
|
}
|
|
643
657
|
function getInitialExportType(args) {
|
|
644
658
|
if (args.selectedResourceIds?.length) {
|
|
@@ -807,6 +821,7 @@ async function createExportOperation(_ref) {
|
|
|
807
821
|
fields = _ref.fields,
|
|
808
822
|
locales = _ref.locales,
|
|
809
823
|
filters = _ref.filters,
|
|
824
|
+
where = _ref.where,
|
|
810
825
|
asyncDispatchFn = _ref.asyncDispatchFn;
|
|
811
826
|
const uri = `/${projectKey}/export-operations`;
|
|
812
827
|
const response = await asyncDispatchFn(sdk.actions.post({
|
|
@@ -821,6 +836,9 @@ async function createExportOperation(_ref) {
|
|
|
821
836
|
fileFormat,
|
|
822
837
|
fields,
|
|
823
838
|
locales,
|
|
839
|
+
// Query predicate
|
|
840
|
+
where,
|
|
841
|
+
// Search API filters
|
|
824
842
|
filters
|
|
825
843
|
}
|
|
826
844
|
}));
|
|
@@ -859,13 +877,6 @@ const useStartExportOperation = props => {
|
|
|
859
877
|
const startExportOperation = async values => {
|
|
860
878
|
try {
|
|
861
879
|
const fields = extractFieldsFromGroups(values.groups);
|
|
862
|
-
let filters = undefined;
|
|
863
|
-
if (props.exportType === EXPORT_TYPES.SELECTED) filters = buildSelectedExportFilters(props.selectedResourceIds);
|
|
864
|
-
if (props.exportType === EXPORT_TYPES.FILTERED) {
|
|
865
|
-
filters = props.filters.where;
|
|
866
|
-
// TODO: handle search query when Export API supports it
|
|
867
|
-
// filters = props.filters.where || props.filters.searchQuery
|
|
868
|
-
}
|
|
869
880
|
const response = await createExportOperation({
|
|
870
881
|
projectKey,
|
|
871
882
|
resourceType: props.resourceType,
|
|
@@ -873,7 +884,8 @@ const useStartExportOperation = props => {
|
|
|
873
884
|
fileFormat: values.outputFormat,
|
|
874
885
|
locales: values.locales,
|
|
875
886
|
fields,
|
|
876
|
-
|
|
887
|
+
where: props.exportType === EXPORT_TYPES.SELECTED ? buildSelectedExportFilters(props.selectedResourceIds) : props.filters?.queryPredicate,
|
|
888
|
+
filters: props.filters?.searchQuery,
|
|
877
889
|
asyncDispatchFn: asyncDispatch
|
|
878
890
|
});
|
|
879
891
|
switch (response.state) {
|
|
@@ -1759,6 +1771,10 @@ const ExportResourcesModal = props => {
|
|
|
1759
1771
|
locale = _useApplicationContex.locale;
|
|
1760
1772
|
const messages = useAsyncIntlMessages(locale, loadMessages);
|
|
1761
1773
|
if (!props.isOpen || messages.isLoading) return null;
|
|
1774
|
+
if (props.filters && !validateFilters(props.filters)) {
|
|
1775
|
+
console.error('Invalid filters prop:', props.filters, 'Filters must have either a valid `queryPredicate` or a valid `searchQuery`, but not both.');
|
|
1776
|
+
return null;
|
|
1777
|
+
}
|
|
1762
1778
|
return jsxRuntime.jsx(reactIntl.IntlProvider, {
|
|
1763
1779
|
locale: locale,
|
|
1764
1780
|
messages: messages.messages,
|
|
@@ -36,6 +36,7 @@ var _Array$isArray = require('@babel/runtime-corejs3/core-js-stable/array/is-arr
|
|
|
36
36
|
var _Set = require('@babel/runtime-corejs3/core-js-stable/set');
|
|
37
37
|
var _sortInstanceProperty = require('@babel/runtime-corejs3/core-js-stable/instance/sort');
|
|
38
38
|
var _indexOfInstanceProperty = require('@babel/runtime-corejs3/core-js-stable/instance/index-of');
|
|
39
|
+
var _trimInstanceProperty = require('@babel/runtime-corejs3/core-js-stable/instance/trim');
|
|
39
40
|
var moment = require('moment');
|
|
40
41
|
var _someInstanceProperty = require('@babel/runtime-corejs3/core-js-stable/instance/some');
|
|
41
42
|
var _findInstanceProperty = require('@babel/runtime-corejs3/core-js-stable/instance/find');
|
|
@@ -73,6 +74,7 @@ var _Array$isArray__default = /*#__PURE__*/_interopDefault(_Array$isArray);
|
|
|
73
74
|
var _Set__default = /*#__PURE__*/_interopDefault(_Set);
|
|
74
75
|
var _sortInstanceProperty__default = /*#__PURE__*/_interopDefault(_sortInstanceProperty);
|
|
75
76
|
var _indexOfInstanceProperty__default = /*#__PURE__*/_interopDefault(_indexOfInstanceProperty);
|
|
77
|
+
var _trimInstanceProperty__default = /*#__PURE__*/_interopDefault(_trimInstanceProperty);
|
|
76
78
|
var moment__default = /*#__PURE__*/_interopDefault(moment);
|
|
77
79
|
var _someInstanceProperty__default = /*#__PURE__*/_interopDefault(_someInstanceProperty);
|
|
78
80
|
var _findInstanceProperty__default = /*#__PURE__*/_interopDefault(_findInstanceProperty);
|
|
@@ -634,11 +636,23 @@ function buildSelectedExportFilters(selectedResourceIds) {
|
|
|
634
636
|
const formattedIds = _mapInstanceProperty__default["default"](selectedResourceIds).call(selectedResourceIds, id => `"${id}"`).join(', ');
|
|
635
637
|
return `id in (${formattedIds})`;
|
|
636
638
|
}
|
|
639
|
+
function validateFilters(filters) {
|
|
640
|
+
var _context;
|
|
641
|
+
const hasQueryPredicate = typeof filters.queryPredicate === 'string' && _trimInstanceProperty__default["default"](_context = filters.queryPredicate).call(_context) !== '';
|
|
642
|
+
const hasSearchQuery = !!(filters.searchQuery && typeof filters.searchQuery === 'object');
|
|
643
|
+
const hasValidTotal = typeof filters.total === 'number' && filters.total >= 0;
|
|
644
|
+
|
|
645
|
+
// Ensure only one of `queryPredicate` or `searchQuery` is applied
|
|
646
|
+
const onlyOneFilterApplied = hasQueryPredicate && !hasSearchQuery || !hasQueryPredicate && hasSearchQuery;
|
|
647
|
+
return onlyOneFilterApplied && hasValidTotal;
|
|
648
|
+
}
|
|
637
649
|
function areFiltersApplied(filters) {
|
|
638
650
|
if (!filters) {
|
|
639
651
|
return false;
|
|
640
652
|
}
|
|
641
|
-
|
|
653
|
+
const hasQueryPredicate = (filters.queryPredicate?.trim() ?? '') !== '';
|
|
654
|
+
const hasSearchQuery = _Object$keys__default["default"](filters.searchQuery ?? {}).length > 0;
|
|
655
|
+
return hasQueryPredicate || hasSearchQuery;
|
|
642
656
|
}
|
|
643
657
|
function getInitialExportType(args) {
|
|
644
658
|
if (args.selectedResourceIds?.length) {
|
|
@@ -807,6 +821,7 @@ async function createExportOperation(_ref) {
|
|
|
807
821
|
fields = _ref.fields,
|
|
808
822
|
locales = _ref.locales,
|
|
809
823
|
filters = _ref.filters,
|
|
824
|
+
where = _ref.where,
|
|
810
825
|
asyncDispatchFn = _ref.asyncDispatchFn;
|
|
811
826
|
const uri = `/${projectKey}/export-operations`;
|
|
812
827
|
const response = await asyncDispatchFn(sdk.actions.post({
|
|
@@ -821,6 +836,9 @@ async function createExportOperation(_ref) {
|
|
|
821
836
|
fileFormat,
|
|
822
837
|
fields,
|
|
823
838
|
locales,
|
|
839
|
+
// Query predicate
|
|
840
|
+
where,
|
|
841
|
+
// Search API filters
|
|
824
842
|
filters
|
|
825
843
|
}
|
|
826
844
|
}));
|
|
@@ -859,13 +877,6 @@ const useStartExportOperation = props => {
|
|
|
859
877
|
const startExportOperation = async values => {
|
|
860
878
|
try {
|
|
861
879
|
const fields = extractFieldsFromGroups(values.groups);
|
|
862
|
-
let filters = undefined;
|
|
863
|
-
if (props.exportType === EXPORT_TYPES.SELECTED) filters = buildSelectedExportFilters(props.selectedResourceIds);
|
|
864
|
-
if (props.exportType === EXPORT_TYPES.FILTERED) {
|
|
865
|
-
filters = props.filters.where;
|
|
866
|
-
// TODO: handle search query when Export API supports it
|
|
867
|
-
// filters = props.filters.where || props.filters.searchQuery
|
|
868
|
-
}
|
|
869
880
|
const response = await createExportOperation({
|
|
870
881
|
projectKey,
|
|
871
882
|
resourceType: props.resourceType,
|
|
@@ -873,7 +884,8 @@ const useStartExportOperation = props => {
|
|
|
873
884
|
fileFormat: values.outputFormat,
|
|
874
885
|
locales: values.locales,
|
|
875
886
|
fields,
|
|
876
|
-
|
|
887
|
+
where: props.exportType === EXPORT_TYPES.SELECTED ? buildSelectedExportFilters(props.selectedResourceIds) : props.filters?.queryPredicate,
|
|
888
|
+
filters: props.filters?.searchQuery,
|
|
877
889
|
asyncDispatchFn: asyncDispatch
|
|
878
890
|
});
|
|
879
891
|
switch (response.state) {
|
|
@@ -1726,6 +1738,10 @@ const ExportResourcesModal = props => {
|
|
|
1726
1738
|
locale = _useApplicationContex.locale;
|
|
1727
1739
|
const messages = useAsyncIntlMessages(locale, loadMessages);
|
|
1728
1740
|
if (!props.isOpen || messages.isLoading) return null;
|
|
1741
|
+
if (props.filters && !validateFilters(props.filters)) {
|
|
1742
|
+
console.error('Invalid filters prop:', props.filters, 'Filters must have either a valid `queryPredicate` or a valid `searchQuery`, but not both.');
|
|
1743
|
+
return null;
|
|
1744
|
+
}
|
|
1729
1745
|
return jsxRuntime.jsx(reactIntl.IntlProvider, {
|
|
1730
1746
|
locale: locale,
|
|
1731
1747
|
messages: messages.messages,
|
|
@@ -32,6 +32,7 @@ import _Array$isArray from '@babel/runtime-corejs3/core-js-stable/array/is-array
|
|
|
32
32
|
import _Set from '@babel/runtime-corejs3/core-js-stable/set';
|
|
33
33
|
import _sortInstanceProperty from '@babel/runtime-corejs3/core-js-stable/instance/sort';
|
|
34
34
|
import _indexOfInstanceProperty from '@babel/runtime-corejs3/core-js-stable/instance/index-of';
|
|
35
|
+
import _trimInstanceProperty from '@babel/runtime-corejs3/core-js-stable/instance/trim';
|
|
35
36
|
import moment from 'moment';
|
|
36
37
|
import _someInstanceProperty from '@babel/runtime-corejs3/core-js-stable/instance/some';
|
|
37
38
|
import _findInstanceProperty from '@babel/runtime-corejs3/core-js-stable/instance/find';
|
|
@@ -600,11 +601,23 @@ function buildSelectedExportFilters(selectedResourceIds) {
|
|
|
600
601
|
const formattedIds = _mapInstanceProperty(selectedResourceIds).call(selectedResourceIds, id => `"${id}"`).join(', ');
|
|
601
602
|
return `id in (${formattedIds})`;
|
|
602
603
|
}
|
|
604
|
+
function validateFilters(filters) {
|
|
605
|
+
var _context;
|
|
606
|
+
const hasQueryPredicate = typeof filters.queryPredicate === 'string' && _trimInstanceProperty(_context = filters.queryPredicate).call(_context) !== '';
|
|
607
|
+
const hasSearchQuery = !!(filters.searchQuery && typeof filters.searchQuery === 'object');
|
|
608
|
+
const hasValidTotal = typeof filters.total === 'number' && filters.total >= 0;
|
|
609
|
+
|
|
610
|
+
// Ensure only one of `queryPredicate` or `searchQuery` is applied
|
|
611
|
+
const onlyOneFilterApplied = hasQueryPredicate && !hasSearchQuery || !hasQueryPredicate && hasSearchQuery;
|
|
612
|
+
return onlyOneFilterApplied && hasValidTotal;
|
|
613
|
+
}
|
|
603
614
|
function areFiltersApplied(filters) {
|
|
604
615
|
if (!filters) {
|
|
605
616
|
return false;
|
|
606
617
|
}
|
|
607
|
-
|
|
618
|
+
const hasQueryPredicate = (filters.queryPredicate?.trim() ?? '') !== '';
|
|
619
|
+
const hasSearchQuery = _Object$keys(filters.searchQuery ?? {}).length > 0;
|
|
620
|
+
return hasQueryPredicate || hasSearchQuery;
|
|
608
621
|
}
|
|
609
622
|
function getInitialExportType(args) {
|
|
610
623
|
if (args.selectedResourceIds?.length) {
|
|
@@ -773,6 +786,7 @@ async function createExportOperation(_ref) {
|
|
|
773
786
|
fields = _ref.fields,
|
|
774
787
|
locales = _ref.locales,
|
|
775
788
|
filters = _ref.filters,
|
|
789
|
+
where = _ref.where,
|
|
776
790
|
asyncDispatchFn = _ref.asyncDispatchFn;
|
|
777
791
|
const uri = `/${projectKey}/export-operations`;
|
|
778
792
|
const response = await asyncDispatchFn(actions.post({
|
|
@@ -787,6 +801,9 @@ async function createExportOperation(_ref) {
|
|
|
787
801
|
fileFormat,
|
|
788
802
|
fields,
|
|
789
803
|
locales,
|
|
804
|
+
// Query predicate
|
|
805
|
+
where,
|
|
806
|
+
// Search API filters
|
|
790
807
|
filters
|
|
791
808
|
}
|
|
792
809
|
}));
|
|
@@ -825,13 +842,6 @@ const useStartExportOperation = props => {
|
|
|
825
842
|
const startExportOperation = async values => {
|
|
826
843
|
try {
|
|
827
844
|
const fields = extractFieldsFromGroups(values.groups);
|
|
828
|
-
let filters = undefined;
|
|
829
|
-
if (props.exportType === EXPORT_TYPES.SELECTED) filters = buildSelectedExportFilters(props.selectedResourceIds);
|
|
830
|
-
if (props.exportType === EXPORT_TYPES.FILTERED) {
|
|
831
|
-
filters = props.filters.where;
|
|
832
|
-
// TODO: handle search query when Export API supports it
|
|
833
|
-
// filters = props.filters.where || props.filters.searchQuery
|
|
834
|
-
}
|
|
835
845
|
const response = await createExportOperation({
|
|
836
846
|
projectKey,
|
|
837
847
|
resourceType: props.resourceType,
|
|
@@ -839,7 +849,8 @@ const useStartExportOperation = props => {
|
|
|
839
849
|
fileFormat: values.outputFormat,
|
|
840
850
|
locales: values.locales,
|
|
841
851
|
fields,
|
|
842
|
-
|
|
852
|
+
where: props.exportType === EXPORT_TYPES.SELECTED ? buildSelectedExportFilters(props.selectedResourceIds) : props.filters?.queryPredicate,
|
|
853
|
+
filters: props.filters?.searchQuery,
|
|
843
854
|
asyncDispatchFn: asyncDispatch
|
|
844
855
|
});
|
|
845
856
|
switch (response.state) {
|
|
@@ -1725,6 +1736,10 @@ const ExportResourcesModal = props => {
|
|
|
1725
1736
|
locale = _useApplicationContex.locale;
|
|
1726
1737
|
const messages = useAsyncIntlMessages(locale, loadMessages);
|
|
1727
1738
|
if (!props.isOpen || messages.isLoading) return null;
|
|
1739
|
+
if (props.filters && !validateFilters(props.filters)) {
|
|
1740
|
+
console.error('Invalid filters prop:', props.filters, 'Filters must have either a valid `queryPredicate` or a valid `searchQuery`, but not both.');
|
|
1741
|
+
return null;
|
|
1742
|
+
}
|
|
1728
1743
|
return jsx(IntlProvider, {
|
|
1729
1744
|
locale: locale,
|
|
1730
1745
|
messages: messages.messages,
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@commercetools-frontend-extensions/export-resources-modal",
|
|
3
3
|
"description": "Shared export modal for exporting resources",
|
|
4
|
-
"version": "0.0.0-canary-
|
|
4
|
+
"version": "0.0.0-canary-20240823130607",
|
|
5
5
|
"license": "BSD-3-Clause",
|
|
6
6
|
"publishConfig": {
|
|
7
7
|
"access": "public"
|