@commercetools-frontend-extensions/export-resources-modal 4.8.0 → 4.8.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/README.md CHANGED
@@ -129,12 +129,13 @@ import ExportResourcesModal from '@commercetools-frontend-extensions/export-reso
129
129
  outputFormat="csv"
130
130
  resourceType="category"
131
131
  filters={{
132
- where: 'key = "category-key"',
133
- filters: { query: 'key = "category-key"' } | [ 'key = "category-key"']
134
- fullText: {
135
- text: 'category-text',
136
- locale: 'en'
137
- }
132
+ {
133
+ filters: [ 'key = "category-key"'],
134
+ fullText: {
135
+ text: 'category-text',
136
+ locale: 'en'
137
+ }
138
+ },
138
139
  total: 20
139
140
  }}
140
141
  totalResourcesCount={143}
@@ -777,22 +777,45 @@ function buildSelectedExportFilters(selectedResourceIds) {
777
777
  const formattedIds = _mapInstanceProperty__default["default"](selectedResourceIds).call(selectedResourceIds, id => `"${id}"`).join(', ');
778
778
  return `id in (${formattedIds})`;
779
779
  }
780
- function validateFilters(filters) {
781
- const hasWhere = 'where' in filters;
782
- const hasFilters = 'filters' in filters;
783
- const hasFullText = 'fullText' in filters;
784
- // Ensure only one of `where` or `filters` is applied but not both or none
785
- const validFilterState = hasWhere && !hasFilters || !hasWhere && hasFilters || hasFullText && filters?.fullText?.text?.trim() !== '';
786
- return validFilterState;
780
+ function isQueryFilter(filters) {
781
+ return filters?.query !== undefined;
787
782
  }
788
- function areFiltersApplied(filterObject) {
789
- if (!filterObject) {
783
+ function isSearchFilter(filters) {
784
+ return filters?.filters?.length || filters?.fullText !== undefined;
785
+ }
786
+ function validateFilters(filtersObject) {
787
+ var _context2;
788
+ if (filtersObject.where && filtersObject.filters) {
790
789
  return false;
791
790
  }
792
- let filters = filterObject.filters,
793
- where = filterObject.where;
794
- let hasFilters = where && _trimInstanceProperty__default["default"](where).call(where) !== '' || Boolean(_Array$isArray__default["default"](filters) && filters.length > 0 || typeof filters === 'object' && _Object$keys__default["default"](filters).length > 0);
795
- return hasFilters;
791
+ if (isQueryFilter(filtersObject.filters)) {
792
+ return Boolean(filtersObject.filters?.query);
793
+ }
794
+ if (isSearchFilter(filtersObject.filters)) {
795
+ const searchFilters = filtersObject.filters;
796
+ return Boolean(searchFilters.filters?.length || searchFilters.fullText?.text?.trim());
797
+ }
798
+ if (filtersObject.where && _trimInstanceProperty__default["default"](_context2 = filtersObject.where).call(_context2) !== '') {
799
+ return true;
800
+ }
801
+ return false;
802
+ }
803
+ function areFiltersApplied(filtersObject) {
804
+ var _context3;
805
+ if (!filtersObject) {
806
+ return false;
807
+ }
808
+ if (filtersObject.where && _trimInstanceProperty__default["default"](_context3 = filtersObject.where).call(_context3) !== '') {
809
+ return true;
810
+ }
811
+ if (filtersObject.filters && 'query' in filtersObject.filters) {
812
+ return Boolean(filtersObject.filters.query);
813
+ }
814
+ if (filtersObject.filters && ('filters' in filtersObject.filters || 'fullText' in filtersObject.filters)) {
815
+ const _filters = filtersObject.filters;
816
+ return Boolean(_filters.filters?.length || _filters.fullText?.text?.trim());
817
+ }
818
+ return false;
796
819
  }
797
820
  function getInitialExportType(args) {
798
821
  if (args.selectedResourceIds?.length) {
@@ -977,8 +1000,7 @@ async function createExportOperation(_ref, asyncDispatchFn) {
977
1000
  locales = _ref.locales,
978
1001
  filters = _ref.filters,
979
1002
  where = _ref.where,
980
- fillRows = _ref.fillRows,
981
- fullText = _ref.fullText;
1003
+ fillRows = _ref.fillRows;
982
1004
  const uri = `/${projectKey}/export-operations`;
983
1005
  const response = await asyncDispatchFn(sdk.actions.post({
984
1006
  mcApiProxyTarget: constants.MC_API_PROXY_TARGETS.EXPORT,
@@ -996,8 +1018,7 @@ async function createExportOperation(_ref, asyncDispatchFn) {
996
1018
  // Query predicate
997
1019
  where,
998
1020
  // Search API filters or Category API filters
999
- filters,
1000
- fullText
1021
+ filters
1001
1022
  }
1002
1023
  }));
1003
1024
  if (!response || typeof response !== 'object' || !('state' in response)) {
@@ -1040,16 +1061,17 @@ const useStartExportOperation = props => {
1040
1061
  const fields = extractFieldNamesFromGroups(values.groups);
1041
1062
  let where = undefined;
1042
1063
  let filters = undefined;
1043
- let fullText = undefined;
1044
1064
  if (exportType === EXPORT_TYPES.SELECTED && props.selectedResourceIds?.length) {
1045
1065
  where = buildSelectedExportFilters(props.selectedResourceIds);
1046
- } else if (exportType === EXPORT_TYPES.FILTERED) {
1047
- if (props.filters) {
1048
- ;
1049
- var _props$filters = props.filters;
1050
- filters = _props$filters.filters;
1051
- where = _props$filters.where;
1052
- fullText = _props$filters.fullText;
1066
+ } else if (exportType === EXPORT_TYPES.FILTERED && props.filters) {
1067
+ where = props.filters.where;
1068
+ if (isQueryFilter(props.filters.filters)) {
1069
+ const _filters = props.filters.filters;
1070
+ filters = {
1071
+ query: _filters.query
1072
+ };
1073
+ } else if (isSearchFilter(props.filters.filters)) {
1074
+ filters = props.filters.filters;
1053
1075
  }
1054
1076
  }
1055
1077
  const response = await createExportOperation({
@@ -1061,8 +1083,7 @@ const useStartExportOperation = props => {
1061
1083
  fillRows: values.fillRows,
1062
1084
  fields,
1063
1085
  where,
1064
- filters,
1065
- fullText
1086
+ filters
1066
1087
  }, asyncDispatch);
1067
1088
  switch (response.state) {
1068
1089
  case EXPORT_OPERATION_STATES.QUEUED:
@@ -777,22 +777,45 @@ function buildSelectedExportFilters(selectedResourceIds) {
777
777
  const formattedIds = _mapInstanceProperty__default["default"](selectedResourceIds).call(selectedResourceIds, id => `"${id}"`).join(', ');
778
778
  return `id in (${formattedIds})`;
779
779
  }
780
- function validateFilters(filters) {
781
- const hasWhere = 'where' in filters;
782
- const hasFilters = 'filters' in filters;
783
- const hasFullText = 'fullText' in filters;
784
- // Ensure only one of `where` or `filters` is applied but not both or none
785
- const validFilterState = hasWhere && !hasFilters || !hasWhere && hasFilters || hasFullText && filters?.fullText?.text?.trim() !== '';
786
- return validFilterState;
780
+ function isQueryFilter(filters) {
781
+ return filters?.query !== undefined;
787
782
  }
788
- function areFiltersApplied(filterObject) {
789
- if (!filterObject) {
783
+ function isSearchFilter(filters) {
784
+ return filters?.filters?.length || filters?.fullText !== undefined;
785
+ }
786
+ function validateFilters(filtersObject) {
787
+ var _context2;
788
+ if (filtersObject.where && filtersObject.filters) {
790
789
  return false;
791
790
  }
792
- let filters = filterObject.filters,
793
- where = filterObject.where;
794
- let hasFilters = where && _trimInstanceProperty__default["default"](where).call(where) !== '' || Boolean(_Array$isArray__default["default"](filters) && filters.length > 0 || typeof filters === 'object' && _Object$keys__default["default"](filters).length > 0);
795
- return hasFilters;
791
+ if (isQueryFilter(filtersObject.filters)) {
792
+ return Boolean(filtersObject.filters?.query);
793
+ }
794
+ if (isSearchFilter(filtersObject.filters)) {
795
+ const searchFilters = filtersObject.filters;
796
+ return Boolean(searchFilters.filters?.length || searchFilters.fullText?.text?.trim());
797
+ }
798
+ if (filtersObject.where && _trimInstanceProperty__default["default"](_context2 = filtersObject.where).call(_context2) !== '') {
799
+ return true;
800
+ }
801
+ return false;
802
+ }
803
+ function areFiltersApplied(filtersObject) {
804
+ var _context3;
805
+ if (!filtersObject) {
806
+ return false;
807
+ }
808
+ if (filtersObject.where && _trimInstanceProperty__default["default"](_context3 = filtersObject.where).call(_context3) !== '') {
809
+ return true;
810
+ }
811
+ if (filtersObject.filters && 'query' in filtersObject.filters) {
812
+ return Boolean(filtersObject.filters.query);
813
+ }
814
+ if (filtersObject.filters && ('filters' in filtersObject.filters || 'fullText' in filtersObject.filters)) {
815
+ const _filters = filtersObject.filters;
816
+ return Boolean(_filters.filters?.length || _filters.fullText?.text?.trim());
817
+ }
818
+ return false;
796
819
  }
797
820
  function getInitialExportType(args) {
798
821
  if (args.selectedResourceIds?.length) {
@@ -977,8 +1000,7 @@ async function createExportOperation(_ref, asyncDispatchFn) {
977
1000
  locales = _ref.locales,
978
1001
  filters = _ref.filters,
979
1002
  where = _ref.where,
980
- fillRows = _ref.fillRows,
981
- fullText = _ref.fullText;
1003
+ fillRows = _ref.fillRows;
982
1004
  const uri = `/${projectKey}/export-operations`;
983
1005
  const response = await asyncDispatchFn(sdk.actions.post({
984
1006
  mcApiProxyTarget: constants.MC_API_PROXY_TARGETS.EXPORT,
@@ -996,8 +1018,7 @@ async function createExportOperation(_ref, asyncDispatchFn) {
996
1018
  // Query predicate
997
1019
  where,
998
1020
  // Search API filters or Category API filters
999
- filters,
1000
- fullText
1021
+ filters
1001
1022
  }
1002
1023
  }));
1003
1024
  if (!response || typeof response !== 'object' || !('state' in response)) {
@@ -1040,16 +1061,17 @@ const useStartExportOperation = props => {
1040
1061
  const fields = extractFieldNamesFromGroups(values.groups);
1041
1062
  let where = undefined;
1042
1063
  let filters = undefined;
1043
- let fullText = undefined;
1044
1064
  if (exportType === EXPORT_TYPES.SELECTED && props.selectedResourceIds?.length) {
1045
1065
  where = buildSelectedExportFilters(props.selectedResourceIds);
1046
- } else if (exportType === EXPORT_TYPES.FILTERED) {
1047
- if (props.filters) {
1048
- ;
1049
- var _props$filters = props.filters;
1050
- filters = _props$filters.filters;
1051
- where = _props$filters.where;
1052
- fullText = _props$filters.fullText;
1066
+ } else if (exportType === EXPORT_TYPES.FILTERED && props.filters) {
1067
+ where = props.filters.where;
1068
+ if (isQueryFilter(props.filters.filters)) {
1069
+ const _filters = props.filters.filters;
1070
+ filters = {
1071
+ query: _filters.query
1072
+ };
1073
+ } else if (isSearchFilter(props.filters.filters)) {
1074
+ filters = props.filters.filters;
1053
1075
  }
1054
1076
  }
1055
1077
  const response = await createExportOperation({
@@ -1061,8 +1083,7 @@ const useStartExportOperation = props => {
1061
1083
  fillRows: values.fillRows,
1062
1084
  fields,
1063
1085
  where,
1064
- filters,
1065
- fullText
1086
+ filters
1066
1087
  }, asyncDispatch);
1067
1088
  switch (response.state) {
1068
1089
  case EXPORT_OPERATION_STATES.QUEUED:
@@ -738,22 +738,45 @@ function buildSelectedExportFilters(selectedResourceIds) {
738
738
  const formattedIds = _mapInstanceProperty(selectedResourceIds).call(selectedResourceIds, id => `"${id}"`).join(', ');
739
739
  return `id in (${formattedIds})`;
740
740
  }
741
- function validateFilters(filters) {
742
- const hasWhere = 'where' in filters;
743
- const hasFilters = 'filters' in filters;
744
- const hasFullText = 'fullText' in filters;
745
- // Ensure only one of `where` or `filters` is applied but not both or none
746
- const validFilterState = hasWhere && !hasFilters || !hasWhere && hasFilters || hasFullText && filters?.fullText?.text?.trim() !== '';
747
- return validFilterState;
741
+ function isQueryFilter(filters) {
742
+ return filters?.query !== undefined;
748
743
  }
749
- function areFiltersApplied(filterObject) {
750
- if (!filterObject) {
744
+ function isSearchFilter(filters) {
745
+ return filters?.filters?.length || filters?.fullText !== undefined;
746
+ }
747
+ function validateFilters(filtersObject) {
748
+ var _context2;
749
+ if (filtersObject.where && filtersObject.filters) {
751
750
  return false;
752
751
  }
753
- let filters = filterObject.filters,
754
- where = filterObject.where;
755
- let hasFilters = where && _trimInstanceProperty(where).call(where) !== '' || Boolean(_Array$isArray(filters) && filters.length > 0 || typeof filters === 'object' && _Object$keys(filters).length > 0);
756
- return hasFilters;
752
+ if (isQueryFilter(filtersObject.filters)) {
753
+ return Boolean(filtersObject.filters?.query);
754
+ }
755
+ if (isSearchFilter(filtersObject.filters)) {
756
+ const searchFilters = filtersObject.filters;
757
+ return Boolean(searchFilters.filters?.length || searchFilters.fullText?.text?.trim());
758
+ }
759
+ if (filtersObject.where && _trimInstanceProperty(_context2 = filtersObject.where).call(_context2) !== '') {
760
+ return true;
761
+ }
762
+ return false;
763
+ }
764
+ function areFiltersApplied(filtersObject) {
765
+ var _context3;
766
+ if (!filtersObject) {
767
+ return false;
768
+ }
769
+ if (filtersObject.where && _trimInstanceProperty(_context3 = filtersObject.where).call(_context3) !== '') {
770
+ return true;
771
+ }
772
+ if (filtersObject.filters && 'query' in filtersObject.filters) {
773
+ return Boolean(filtersObject.filters.query);
774
+ }
775
+ if (filtersObject.filters && ('filters' in filtersObject.filters || 'fullText' in filtersObject.filters)) {
776
+ const _filters = filtersObject.filters;
777
+ return Boolean(_filters.filters?.length || _filters.fullText?.text?.trim());
778
+ }
779
+ return false;
757
780
  }
758
781
  function getInitialExportType(args) {
759
782
  if (args.selectedResourceIds?.length) {
@@ -938,8 +961,7 @@ async function createExportOperation(_ref, asyncDispatchFn) {
938
961
  locales = _ref.locales,
939
962
  filters = _ref.filters,
940
963
  where = _ref.where,
941
- fillRows = _ref.fillRows,
942
- fullText = _ref.fullText;
964
+ fillRows = _ref.fillRows;
943
965
  const uri = `/${projectKey}/export-operations`;
944
966
  const response = await asyncDispatchFn(actions.post({
945
967
  mcApiProxyTarget: MC_API_PROXY_TARGETS.EXPORT,
@@ -957,8 +979,7 @@ async function createExportOperation(_ref, asyncDispatchFn) {
957
979
  // Query predicate
958
980
  where,
959
981
  // Search API filters or Category API filters
960
- filters,
961
- fullText
982
+ filters
962
983
  }
963
984
  }));
964
985
  if (!response || typeof response !== 'object' || !('state' in response)) {
@@ -1001,16 +1022,17 @@ const useStartExportOperation = props => {
1001
1022
  const fields = extractFieldNamesFromGroups(values.groups);
1002
1023
  let where = undefined;
1003
1024
  let filters = undefined;
1004
- let fullText = undefined;
1005
1025
  if (exportType === EXPORT_TYPES.SELECTED && props.selectedResourceIds?.length) {
1006
1026
  where = buildSelectedExportFilters(props.selectedResourceIds);
1007
- } else if (exportType === EXPORT_TYPES.FILTERED) {
1008
- if (props.filters) {
1009
- ;
1010
- var _props$filters = props.filters;
1011
- filters = _props$filters.filters;
1012
- where = _props$filters.where;
1013
- fullText = _props$filters.fullText;
1027
+ } else if (exportType === EXPORT_TYPES.FILTERED && props.filters) {
1028
+ where = props.filters.where;
1029
+ if (isQueryFilter(props.filters.filters)) {
1030
+ const _filters = props.filters.filters;
1031
+ filters = {
1032
+ query: _filters.query
1033
+ };
1034
+ } else if (isSearchFilter(props.filters.filters)) {
1035
+ filters = props.filters.filters;
1014
1036
  }
1015
1037
  }
1016
1038
  const response = await createExportOperation({
@@ -1022,8 +1044,7 @@ const useStartExportOperation = props => {
1022
1044
  fillRows: values.fillRows,
1023
1045
  fields,
1024
1046
  where,
1025
- filters,
1026
- fullText
1047
+ filters
1027
1048
  }, asyncDispatch);
1028
1049
  switch (response.state) {
1029
1050
  case EXPORT_OPERATION_STATES.QUEUED:
@@ -1,3 +1,4 @@
1
+ import type { QueryFilter, SearchFilter } from "./export-resources-modal-types.js";
1
2
  export interface ExportApiRequest {
2
3
  projectKey: string;
3
4
  resourceType: string;
@@ -5,9 +6,7 @@ export interface ExportApiRequest {
5
6
  fileFormat: string;
6
7
  fields: string[];
7
8
  locales: string[];
8
- filters?: {
9
- query: Record<string, unknown>;
10
- } | Array<string>;
9
+ filters?: QueryFilter | SearchFilter;
11
10
  where?: string;
12
11
  fillRows?: boolean;
13
12
  fullText?: {
@@ -32,14 +32,18 @@ export interface ExportResourcesModalProps {
32
32
  onExportSuccess?: () => void;
33
33
  }
34
34
  export type ExportType = keyof typeof EXPORT_TYPES;
35
- export type Filters = {
36
- filters?: {
37
- query: Record<string, unknown>;
38
- } | Array<string>;
39
- where?: string;
35
+ export type QueryFilter = {
36
+ query: Record<string, unknown>;
37
+ };
38
+ export type SearchFilter = {
39
+ filters?: string[];
40
40
  fullText?: {
41
41
  text: string;
42
42
  locale: string;
43
43
  };
44
+ };
45
+ export type Filters = {
46
+ filters?: QueryFilter | SearchFilter;
47
+ where?: string;
44
48
  total: number;
45
49
  };
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": "4.8.0",
4
+ "version": "4.8.1",
5
5
  "license": "BSD-3-Clause",
6
6
  "publishConfig": {
7
7
  "access": "public"