@griddo/ax 10.3.23 → 10.3.25

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (126) hide show
  1. package/package.json +2 -2
  2. package/src/__tests__/components/Gallery/GalleryFilters/Orientation/Orientation.test.tsx +5 -2
  3. package/src/__tests__/components/Gallery/GalleryFilters/SortBy/SortBy.test.tsx +5 -4
  4. package/src/__tests__/components/Gallery/GalleryFilters/Type/Type.test.tsx +5 -2
  5. package/src/__tests__/components/TableFilters/CategoryFilter/CategoryFilter.test.tsx +12 -11
  6. package/src/__tests__/components/TableFilters/DateFilter/DateFilter.test.tsx +17 -16
  7. package/src/__tests__/components/TableFilters/LiveFilter/LiveFilter.test.tsx +14 -13
  8. package/src/__tests__/components/TableFilters/NameFilter/NameFilter.test.tsx +21 -20
  9. package/src/__tests__/components/TableFilters/RoleFilter/RoleFilter.test.tsx +6 -5
  10. package/src/__tests__/components/TableFilters/SiteFilter/SiteFilter.test.tsx +8 -7
  11. package/src/__tests__/components/TableFilters/StatusFilter/StatusFilter.test.tsx +21 -20
  12. package/src/__tests__/components/TableFilters/TranslationsFilter/TranslationsFilter.test.tsx +24 -23
  13. package/src/__tests__/components/TableFilters/TypeFilter/TypeFilter.test.tsx +6 -5
  14. package/src/__tests__/components/TableFilters/UsersFilter/UsersFilter.test.tsx +17 -16
  15. package/src/api/sites.tsx +5 -9
  16. package/src/components/Button/index.tsx +3 -1
  17. package/src/components/Button/style.tsx +6 -0
  18. package/src/components/ConfigPanel/Form/ConnectedField/PageConnectedField/TemplateManager/index.tsx +2 -2
  19. package/src/components/ConfigPanel/Form/ConnectedField/PageConnectedField/index.tsx +1 -1
  20. package/src/components/Fields/ArrayFieldGroup/ArrayFieldInline/index.tsx +3 -2
  21. package/src/components/Fields/ArrayFieldGroup/ArrayFieldItem/index.tsx +3 -1
  22. package/src/components/Fields/ArrayFieldGroup/index.tsx +5 -2
  23. package/src/components/Fields/CheckField/style.tsx +2 -2
  24. package/src/components/Fields/ColorPicker/index.tsx +4 -2
  25. package/src/components/Fields/ColorPicker/style.tsx +4 -0
  26. package/src/components/Fields/DateField/DatePickerInput/index.tsx +1 -1
  27. package/src/components/Fields/FileField/index.tsx +3 -1
  28. package/src/components/Fields/FileField/style.tsx +9 -4
  29. package/src/components/Fields/SliderField/index.tsx +4 -2
  30. package/src/components/Fields/SliderField/style.tsx +53 -4
  31. package/src/components/Fields/TimeField/style.tsx +6 -5
  32. package/src/components/FileGallery/index.tsx +26 -16
  33. package/src/components/FileGallery/style.tsx +12 -1
  34. package/src/components/FilterTagsBar/index.tsx +61 -0
  35. package/src/components/FilterTagsBar/style.tsx +30 -0
  36. package/src/components/FloatingMenu/index.tsx +5 -1
  37. package/src/components/Gallery/GalleryFilters/Orientation/index.tsx +14 -6
  38. package/src/components/Gallery/GalleryFilters/SortBy/index.tsx +24 -8
  39. package/src/components/Gallery/GalleryFilters/Type/index.tsx +22 -9
  40. package/src/components/Gallery/GalleryPanel/GalleryDragAndDrop/style.tsx +2 -1
  41. package/src/components/Gallery/hooks.tsx +37 -23
  42. package/src/components/Gallery/index.tsx +38 -20
  43. package/src/components/Gallery/style.tsx +15 -2
  44. package/src/components/MainWrapper/AppBar/index.tsx +3 -0
  45. package/src/components/MainWrapper/index.tsx +1 -0
  46. package/src/components/SearchTagsBar/index.tsx +43 -0
  47. package/src/components/SearchTagsBar/style.tsx +30 -0
  48. package/src/components/TableFilters/CategoryFilter/index.tsx +17 -10
  49. package/src/components/TableFilters/CheckGroupFilter/index.tsx +12 -9
  50. package/src/components/TableFilters/DateFilter/index.tsx +3 -2
  51. package/src/components/TableFilters/LastAccessFilter/index.tsx +4 -4
  52. package/src/components/TableFilters/LiveFilter/index.tsx +26 -22
  53. package/src/components/TableFilters/NameFilter/index.tsx +4 -3
  54. package/src/components/TableFilters/PermissionsFilter/index.tsx +4 -3
  55. package/src/components/TableFilters/RoleFilter/index.tsx +17 -7
  56. package/src/components/TableFilters/SiteFilter/index.tsx +23 -8
  57. package/src/components/TableFilters/StateFilter/index.tsx +15 -6
  58. package/src/components/TableFilters/StatusFilter/index.tsx +3 -2
  59. package/src/components/TableFilters/TranslationsFilter/index.tsx +19 -11
  60. package/src/components/TableFilters/TypeFilter/index.tsx +9 -5
  61. package/src/components/TableFilters/UsersFilter/index.tsx +4 -3
  62. package/src/components/Tag/index.tsx +5 -4
  63. package/src/components/index.tsx +4 -0
  64. package/src/containers/Navigation/Menu/actions.tsx +1 -13
  65. package/src/containers/Navigation/Menu/constants.tsx +0 -1
  66. package/src/containers/Navigation/Menu/interfaces.tsx +1 -7
  67. package/src/containers/Navigation/Menu/reducer.tsx +0 -4
  68. package/src/containers/Sites/actions.tsx +2 -1
  69. package/src/containers/Sites/interfaces.tsx +2 -2
  70. package/src/containers/Sites/reducer.tsx +2 -2
  71. package/src/containers/StructuredData/actions.tsx +2 -1
  72. package/src/forms/editor.tsx +1 -1
  73. package/src/modules/Categories/CategoriesList/CategoryItem/style.tsx +2 -0
  74. package/src/modules/Content/BulkHeader/TableHeader/index.tsx +26 -14
  75. package/src/modules/Content/BulkHeader/index.tsx +3 -3
  76. package/src/modules/Content/PageItem/index.tsx +21 -23
  77. package/src/modules/Content/PageItem/style.tsx +2 -0
  78. package/src/modules/Content/hooks.tsx +23 -13
  79. package/src/modules/Content/index.tsx +44 -11
  80. package/src/modules/Content/style.tsx +19 -1
  81. package/src/modules/FileDrive/Breadcrumb/style.tsx +1 -1
  82. package/src/modules/FileDrive/FileDragAndDrop/index.tsx +7 -6
  83. package/src/modules/FileDrive/FileDragAndDrop/style.tsx +2 -0
  84. package/src/modules/FileDrive/FileFilters/SortBy/index.tsx +24 -8
  85. package/src/modules/FileDrive/FileFilters/Type/index.tsx +26 -22
  86. package/src/modules/FileDrive/hooks.tsx +28 -13
  87. package/src/modules/FileDrive/index.tsx +31 -18
  88. package/src/modules/FileDrive/style.tsx +20 -1
  89. package/src/modules/Navigation/Defaults/Item/style.tsx +2 -0
  90. package/src/modules/Navigation/Menus/List/Nav/index.tsx +10 -12
  91. package/src/modules/Navigation/Menus/List/Table/SidePanel/index.tsx +0 -2
  92. package/src/modules/Navigation/Menus/List/index.tsx +8 -5
  93. package/src/modules/Redirects/BulkHeader/TableHeader/index.tsx +4 -2
  94. package/src/modules/Redirects/BulkHeader/index.tsx +3 -2
  95. package/src/modules/Redirects/hooks.tsx +23 -15
  96. package/src/modules/Redirects/index.tsx +61 -44
  97. package/src/modules/Redirects/style.tsx +10 -0
  98. package/src/modules/Settings/Integrations/BulkHeader/TableHeader/index.tsx +7 -11
  99. package/src/modules/Settings/Integrations/BulkHeader/index.tsx +4 -8
  100. package/src/modules/Settings/Integrations/hooks.tsx +23 -19
  101. package/src/modules/Settings/Integrations/index.tsx +22 -26
  102. package/src/modules/Settings/Integrations/style.tsx +7 -0
  103. package/src/modules/Sites/SitesList/GridView/GridHeaderFilter/index.tsx +8 -7
  104. package/src/modules/Sites/SitesList/ListView/BulkHeader/TableHeader/index.tsx +10 -5
  105. package/src/modules/Sites/SitesList/ListView/BulkHeader/index.tsx +4 -3
  106. package/src/modules/Sites/SitesList/hooks.tsx +26 -20
  107. package/src/modules/Sites/SitesList/index.tsx +53 -22
  108. package/src/modules/Sites/SitesList/style.tsx +16 -0
  109. package/src/modules/StructuredData/StructuredDataList/BulkHeader/TableHeader/index.tsx +3 -3
  110. package/src/modules/StructuredData/StructuredDataList/BulkHeader/index.tsx +3 -3
  111. package/src/modules/StructuredData/StructuredDataList/GlobalPageItem/index.tsx +3 -3
  112. package/src/modules/StructuredData/StructuredDataList/GlobalPageItem/style.tsx +2 -0
  113. package/src/modules/StructuredData/StructuredDataList/StructuredDataItem/style.tsx +2 -0
  114. package/src/modules/StructuredData/StructuredDataList/hooks.tsx +25 -15
  115. package/src/modules/StructuredData/StructuredDataList/index.tsx +57 -14
  116. package/src/modules/StructuredData/StructuredDataList/style.tsx +10 -1
  117. package/src/modules/Users/Roles/BulkHeader/TableHeader/index.tsx +2 -2
  118. package/src/modules/Users/Roles/BulkHeader/index.tsx +2 -5
  119. package/src/modules/Users/Roles/hooks.tsx +24 -15
  120. package/src/modules/Users/Roles/index.tsx +7 -18
  121. package/src/modules/Users/UserList/BulkHeader/TableHeader/index.tsx +5 -18
  122. package/src/modules/Users/UserList/BulkHeader/index.tsx +15 -13
  123. package/src/modules/Users/UserList/hooks.tsx +27 -25
  124. package/src/modules/Users/UserList/index.tsx +69 -43
  125. package/src/modules/Users/UserList/style.tsx +10 -1
  126. package/src/types/index.tsx +19 -13
@@ -7,13 +7,14 @@ import { render, screen, cleanup, fireEvent } from "@testing-library/react";
7
7
  import { parseTheme } from "@ax/helpers";
8
8
  import globalTheme from "@ax/themes/theme.json";
9
9
  import StatusFilter, { IStatusFilterProps } from "@ax/components/TableFilters/StatusFilter";
10
+ import { IQueryValue } from "@ax/types";
10
11
 
11
12
  afterEach(cleanup);
12
13
  const defaultProps = mock<IStatusFilterProps>();
13
14
  describe("StatusFilter component rendering", () => {
14
15
  it("should render date filter", () => {
15
- const onClickMock = jest.fn() as CalledWithMock<any, [orderPointer: string, isAscendent: boolean]> &
16
- ((orderPointer: string, isAscendent: boolean) => any);
16
+ const onClickMock = jest.fn() as CalledWithMock<any, [orderPointer: IQueryValue[], isAscendent: boolean]> &
17
+ ((orderPointer: IQueryValue[], isAscendent: boolean) => any);
17
18
  defaultProps.sortedState = { isAscending: false, sortedByDate: false, sortedByTitle: false, sortedByURL: false };
18
19
  defaultProps.sortItems = onClickMock;
19
20
  defaultProps.isStructuredData = false;
@@ -30,8 +31,8 @@ describe("StatusFilter component rendering", () => {
30
31
  });
31
32
 
32
33
  it("should render interactive arrow if not filter selected", () => {
33
- const onClickMock = jest.fn() as CalledWithMock<any, [orderPointer: string, isAscendent: boolean]> &
34
- ((orderPointer: string, isAscendent: boolean) => any);
34
+ const onClickMock = jest.fn() as CalledWithMock<any, [orderPointer: IQueryValue[], isAscendent: boolean]> &
35
+ ((orderPointer: IQueryValue[], isAscendent: boolean) => any);
35
36
  defaultProps.sortedState = { isAscending: false, sortedByDate: false, sortedByTitle: false, sortedByURL: false };
36
37
  defaultProps.sortItems = onClickMock;
37
38
  defaultProps.isStructuredData = false;
@@ -47,8 +48,8 @@ describe("StatusFilter component rendering", () => {
47
48
  });
48
49
 
49
50
  it("should render FullArrowDown icon if is filtered by most recent", () => {
50
- const onClickMock = jest.fn() as CalledWithMock<any, [orderPointer: string, isAscendent: boolean]> &
51
- ((orderPointer: string, isAscendent: boolean) => any);
51
+ const onClickMock = jest.fn() as CalledWithMock<any, [orderPointer: IQueryValue[], isAscendent: boolean]> &
52
+ ((orderPointer: IQueryValue[], isAscendent: boolean) => any);
52
53
  defaultProps.sortedState = { isAscending: false, sortedByDate: true, sortedByTitle: false, sortedByURL: false };
53
54
  defaultProps.sortItems = onClickMock;
54
55
  defaultProps.isStructuredData = false;
@@ -68,8 +69,8 @@ describe("StatusFilter events", () => {
68
69
  it("should render check group on click", () => {
69
70
  const onClickMock = jest.fn();
70
71
  defaultProps.sortedState = { isAscending: false, sortedByDate: false };
71
- defaultProps.sortItems = onClickMock as CalledWithMock<any, [orderPointer: string, isAscendent: boolean]> &
72
- ((orderPointer: string, isAscendent: boolean) => any);
72
+ defaultProps.sortItems = onClickMock as CalledWithMock<any, [orderPointer: IQueryValue[], isAscendent: boolean]> &
73
+ ((orderPointer: IQueryValue[], isAscendent: boolean) => any);
73
74
  render(
74
75
  <ThemeProvider theme={parseTheme(globalTheme)}>
75
76
  <StatusFilter {...defaultProps} />
@@ -88,8 +89,8 @@ describe("StatusFilter events", () => {
88
89
  it("should call sortItems function with 'modified, true' as param when it's not structured data and is ascending", async () => {
89
90
  const onClickMock = jest.fn();
90
91
  defaultProps.sortedState = { isAscending: false, sortedByDate: false };
91
- defaultProps.sortItems = onClickMock as CalledWithMock<any, [orderPointer: string, isAscendent: boolean]> &
92
- ((orderPointer: string, isAscendent: boolean) => any);
92
+ defaultProps.sortItems = onClickMock as CalledWithMock<any, [orderPointer: IQueryValue[], isAscendent: boolean]> &
93
+ ((orderPointer: IQueryValue[], isAscendent: boolean) => any);
93
94
  render(
94
95
  <ThemeProvider theme={parseTheme(globalTheme)}>
95
96
  <StatusFilter {...defaultProps} />
@@ -108,14 +109,14 @@ describe("StatusFilter events", () => {
108
109
  fireEvent.click(listItems[1]);
109
110
  expect(onClickMock).toHaveBeenCalledTimes(1);
110
111
  const isAscending = true;
111
- expect(onClickMock).toBeCalledWith("modified", isAscending);
112
+ expect(onClickMock).toBeCalledWith([{ label: "modified", value: "modified" }], isAscending);
112
113
  });
113
114
 
114
115
  it("should call sortItems function with 'date, true' as param when it's not structured data and is asceding", async () => {
115
116
  const onClickMock = jest.fn();
116
117
  defaultProps.sortedState = { isAscending: false, sortedByDate: false };
117
- defaultProps.sortItems = onClickMock as CalledWithMock<any, [orderPointer: string, isAscendent: boolean]> &
118
- ((orderPointer: string, isAscendent: boolean) => any);
118
+ defaultProps.sortItems = onClickMock as CalledWithMock<any, [orderPointer: IQueryValue[], isAscendent: boolean]> &
119
+ ((orderPointer: IQueryValue[], isAscendent: boolean) => any);
119
120
  defaultProps.isStructuredData = true;
120
121
 
121
122
  render(
@@ -135,14 +136,14 @@ describe("StatusFilter events", () => {
135
136
 
136
137
  fireEvent.click(listItems[1]);
137
138
  expect(onClickMock).toHaveBeenCalledTimes(1);
138
- expect(onClickMock).toBeCalledWith("date", true);
139
+ expect(onClickMock).toBeCalledWith([{ label: "date", value: "date" }], true);
139
140
  });
140
141
 
141
142
  it("should call sortItems function with 'modified, false' as param when it's not structured data and is not ascending", async () => {
142
143
  const onClickMock = jest.fn();
143
144
  defaultProps.sortedState = { isAscending: false, sortedByDate: false };
144
- defaultProps.sortItems = onClickMock as CalledWithMock<any, [orderPointer: string, isAscendent: boolean]> &
145
- ((orderPointer: string, isAscendent: boolean) => any);
145
+ defaultProps.sortItems = onClickMock as CalledWithMock<any, [orderPointer: IQueryValue[], isAscendent: boolean]> &
146
+ ((orderPointer: IQueryValue[], isAscendent: boolean) => any);
146
147
  defaultProps.isStructuredData = false;
147
148
 
148
149
  render(
@@ -163,14 +164,14 @@ describe("StatusFilter events", () => {
163
164
  fireEvent.click(listItems[0]);
164
165
  expect(onClickMock).toHaveBeenCalledTimes(1);
165
166
  const isAscending = false;
166
- expect(onClickMock).toBeCalledWith("modified", isAscending);
167
+ expect(onClickMock).toBeCalledWith([{ label: "modified", value: "modified" }], isAscending);
167
168
  });
168
169
 
169
170
  it("should call sortItems function with 'date, false' as param when it's not structured data and is not asceding", async () => {
170
171
  const onClickMock = jest.fn();
171
172
  defaultProps.sortedState = { isAscending: false, sortedByDate: false };
172
- defaultProps.sortItems = onClickMock as CalledWithMock<any, [orderPointer: string, isAscendent: boolean]> &
173
- ((orderPointer: string, isAscendent: boolean) => any);
173
+ defaultProps.sortItems = onClickMock as CalledWithMock<any, [orderPointer: IQueryValue[], isAscendent: boolean]> &
174
+ ((orderPointer: IQueryValue[], isAscendent: boolean) => any);
174
175
  defaultProps.isStructuredData = true;
175
176
 
176
177
  render(
@@ -190,6 +191,6 @@ describe("StatusFilter events", () => {
190
191
 
191
192
  fireEvent.click(listItems[0]);
192
193
  expect(onClickMock).toHaveBeenCalledTimes(1);
193
- expect(onClickMock).toBeCalledWith("date", false);
194
+ expect(onClickMock).toBeCalledWith([{ label: "date", value: "date" }], false);
194
195
  });
195
196
  });
@@ -9,14 +9,15 @@ import { parseTheme } from "@ax/helpers";
9
9
 
10
10
  import globalTheme from "@ax/themes/theme.json";
11
11
  import TranslationsFilter, { ITranslationsFilterProps } from "@ax/components/TableFilters/TranslationsFilter";
12
+ import { IQueryValue } from "@ax/types";
12
13
 
13
14
  afterEach(cleanup);
14
15
  const defaultProps = mock<ITranslationsFilterProps>();
15
16
  describe("TranslationsFilter component rendering", () => {
16
17
  it("should render name filter", () => {
17
- const onClickMock = jest.fn() as CalledWithMock<void, [pointer: string, filter: string]> &
18
- ((pointer: string, filter: string) => void);
19
- defaultProps.value = "all";
18
+ const onClickMock = jest.fn() as CalledWithMock<void, [pointer: string, filter: IQueryValue[]]> &
19
+ ((pointer: string, filter: IQueryValue[]) => void);
20
+ defaultProps.value = [{ value: "all", label: "All" }];
20
21
  defaultProps.filterItems = onClickMock;
21
22
 
22
23
  render(
@@ -31,9 +32,9 @@ describe("TranslationsFilter component rendering", () => {
31
32
  });
32
33
 
33
34
  it("should render icon's wrapper", () => {
34
- const onClickMock = jest.fn() as CalledWithMock<void, [pointer: string, filter: string]> &
35
- ((pointer: string, filter: string) => void);
36
- defaultProps.value = "all";
35
+ const onClickMock = jest.fn() as CalledWithMock<void, [pointer: string, filter: IQueryValue[]]> &
36
+ ((pointer: string, filter: IQueryValue[]) => void);
37
+ defaultProps.value = [{ value: "all", label: "All" }];
37
38
  defaultProps.filterItems = onClickMock;
38
39
  render(
39
40
  <ThemeProvider theme={parseTheme(globalTheme)}>
@@ -46,9 +47,9 @@ describe("TranslationsFilter component rendering", () => {
46
47
  });
47
48
 
48
49
  it("should render options", async () => {
49
- const onClickMock = jest.fn() as CalledWithMock<void, [pointer: string, filter: string]> &
50
- ((pointer: string, filter: string) => void);
51
- defaultProps.value = "all";
50
+ const onClickMock = jest.fn() as CalledWithMock<void, [pointer: string, filter: IQueryValue[]]> &
51
+ ((pointer: string, filter: IQueryValue[]) => void);
52
+ defaultProps.value = [{ value: "all", label: "All" }];
52
53
  defaultProps.filterItems = onClickMock;
53
54
  render(
54
55
  <ThemeProvider theme={parseTheme(globalTheme)}>
@@ -70,9 +71,9 @@ describe("TranslationsFilter component rendering", () => {
70
71
 
71
72
  describe("TranslationsFilter events", () => {
72
73
  it("should render check group on click", () => {
73
- const onClickMock = jest.fn() as CalledWithMock<void, [pointer: string, filter: string]> &
74
- ((pointer: string, filter: string) => void);
75
- defaultProps.value = "all";
74
+ const onClickMock = jest.fn() as CalledWithMock<void, [pointer: string, filter: IQueryValue[]]> &
75
+ ((pointer: string, filter: IQueryValue[]) => void);
76
+ defaultProps.value = [{ value: "all", label: "All" }];
76
77
  defaultProps.filterItems = onClickMock;
77
78
  render(
78
79
  <ThemeProvider theme={parseTheme(globalTheme)}>
@@ -90,9 +91,9 @@ describe("TranslationsFilter events", () => {
90
91
  });
91
92
 
92
93
  it("should call filterItems with 'all' on click 'All' option", async () => {
93
- const onClickMock = jest.fn() as CalledWithMock<void, [pointer: string, filter: string]> &
94
- ((pointer: string, filter: string) => void);
95
- defaultProps.value = "all";
94
+ const onClickMock = jest.fn() as CalledWithMock<void, [pointer: string, filter: IQueryValue[]]> &
95
+ ((pointer: string, filter: IQueryValue[]) => void);
96
+ defaultProps.value = [{ value: "all", label: "All" }];
96
97
  defaultProps.filterItems = onClickMock;
97
98
  render(
98
99
  <ThemeProvider theme={parseTheme(globalTheme)}>
@@ -108,13 +109,13 @@ describe("TranslationsFilter events", () => {
108
109
 
109
110
  fireEvent.click(checksFieldInputs[0]);
110
111
  expect(onClickMock).toHaveBeenCalledTimes(1);
111
- expect(onClickMock).toBeCalledWith("translated", "all");
112
+ expect(onClickMock).toBeCalledWith("translated", [{ label: "All", value: "all" }]);
112
113
  });
113
114
 
114
115
  it("should call filterItems with 'no' on click 'Not translated content' option", async () => {
115
- const onClickMock = jest.fn() as CalledWithMock<void, [pointer: string, filter: string]> &
116
- ((pointer: string, filter: string) => void);
117
- defaultProps.value = "all";
116
+ const onClickMock = jest.fn() as CalledWithMock<void, [pointer: string, filter: IQueryValue[]]> &
117
+ ((pointer: string, filter: IQueryValue[]) => void);
118
+ defaultProps.value = [{ value: "all", label: "All" }];
118
119
  defaultProps.filterItems = onClickMock;
119
120
  render(
120
121
  <ThemeProvider theme={parseTheme(globalTheme)}>
@@ -130,13 +131,13 @@ describe("TranslationsFilter events", () => {
130
131
 
131
132
  fireEvent.click(checksFieldInputs[1]);
132
133
  expect(onClickMock).toHaveBeenCalledTimes(1);
133
- expect(onClickMock).toBeCalledWith("translated", "no");
134
+ expect(onClickMock).toBeCalledWith("translated", [{ label: "Not translated content", value: "no" }]);
134
135
  });
135
136
 
136
137
  it("should close floating menu when option is checked", async () => {
137
- const onClickMock = jest.fn() as CalledWithMock<void, [pointer: string, filter: string]> &
138
- ((pointer: string, filter: string) => void);
139
- defaultProps.value = "all";
138
+ const onClickMock = jest.fn() as CalledWithMock<void, [pointer: string, filter: IQueryValue[]]> &
139
+ ((pointer: string, filter: IQueryValue[]) => void);
140
+ defaultProps.value = [{ value: "all", label: "All" }];
140
141
  defaultProps.filterItems = onClickMock;
141
142
  render(
142
143
  <ThemeProvider theme={parseTheme(globalTheme)}>
@@ -7,6 +7,7 @@ import { render, screen, cleanup, fireEvent } from "@testing-library/react";
7
7
  import TypeFilter, { ITypeFilterProps } from "@ax/components/TableFilters/TypeFilter";
8
8
  import globalTheme from "@ax/themes/theme.json";
9
9
  import { parseTheme } from "@ax/helpers";
10
+ import { IQueryValue } from "@ax/types";
10
11
 
11
12
  afterEach(cleanup);
12
13
 
@@ -31,7 +32,7 @@ describe("TypeFilter component rendering", () => {
31
32
  },
32
33
  ];
33
34
  defaultProps.pointer = "type";
34
- defaultProps.filterItems = jest.fn() as CalledWithMock<void, [pointer: string, filter: string]>;
35
+ defaultProps.filterItems = jest.fn() as CalledWithMock<void, [pointer: string, filter: IQueryValue[]]>;
35
36
 
36
37
  render(
37
38
  <ThemeProvider theme={parseTheme(globalTheme)}>
@@ -65,7 +66,7 @@ describe("TypeFilter events", () => {
65
66
  },
66
67
  ];
67
68
  defaultProps.pointer = "type";
68
- defaultProps.filterItems = jest.fn() as CalledWithMock<void, [pointer: string, filter: string]>;
69
+ defaultProps.filterItems = jest.fn() as CalledWithMock<void, [pointer: string, filter: IQueryValue[]]>;
69
70
 
70
71
  render(
71
72
  <ThemeProvider theme={parseTheme(globalTheme)}>
@@ -103,7 +104,7 @@ describe("TypeFilter events", () => {
103
104
  },
104
105
  ];
105
106
  defaultProps.pointer = "type";
106
- const onChangeMock = jest.fn() as CalledWithMock<void, [pointer: string, filter: string]>;
107
+ const onChangeMock = jest.fn() as CalledWithMock<void, [pointer: string, filter: IQueryValue[]]>;
107
108
  defaultProps.filterItems = onChangeMock;
108
109
 
109
110
  render(
@@ -144,7 +145,7 @@ describe("TypeFilter events", () => {
144
145
  },
145
146
  ];
146
147
  defaultProps.pointer = "type";
147
- const onChangeMock = jest.fn() as CalledWithMock<void, [pointer: string, filter: string]>;
148
+ const onChangeMock = jest.fn() as CalledWithMock<void, [pointer: string, filter: IQueryValue[]]>;
148
149
  defaultProps.filterItems = onChangeMock;
149
150
 
150
151
  render(
@@ -160,6 +161,6 @@ describe("TypeFilter events", () => {
160
161
  const checkFieldInputs = screen.queryAllByTestId("check-field-input");
161
162
  fireEvent.click(checkFieldInputs[1]);
162
163
  expect(onChangeMock).toHaveBeenCalledTimes(1);
163
- expect(onChangeMock).toBeCalledWith("type", "unique");
164
+ expect(onChangeMock).toBeCalledWith("type", [{ label: "Basic templates", value: "unique" }]);
164
165
  });
165
166
  });
@@ -8,13 +8,14 @@ import { render, screen, cleanup, fireEvent } from "@testing-library/react";
8
8
  import { parseTheme } from "@ax/helpers";
9
9
  import globalTheme from "@ax/themes/theme.json";
10
10
  import UsersFilter, { IUsersFilterProps } from "@ax/components/TableFilters/UsersFilter";
11
+ import { IQueryValue } from "@ax/types";
11
12
 
12
13
  afterEach(cleanup);
13
14
  const defaultProps = mock<IUsersFilterProps>();
14
15
  describe("UsersFilter component rendering", () => {
15
16
  it("should render users filter", () => {
16
- const onClickMock = jest.fn() as CalledWithMock<any, [orderPointer: string, isAscendent: boolean]> &
17
- ((orderPointer: string, isAscendent: boolean) => any);
17
+ const onClickMock = jest.fn() as CalledWithMock<any, [orderPointer: IQueryValue[], isAscendent: boolean]> &
18
+ ((orderPointer: IQueryValue[], isAscendent: boolean) => any);
18
19
  defaultProps.sortedState = { isAscending: true, sortedByTitle: false, sortedByUsers: true };
19
20
 
20
21
  defaultProps.sortItems = onClickMock;
@@ -31,8 +32,8 @@ describe("UsersFilter component rendering", () => {
31
32
  });
32
33
 
33
34
  it("should render interactive arrow if not filter selected", () => {
34
- const onClickMock = jest.fn() as CalledWithMock<any, [orderPointer: string, isAscendent: boolean]> &
35
- ((orderPointer: string, isAscendent: boolean) => any);
35
+ const onClickMock = jest.fn() as CalledWithMock<any, [orderPointer: IQueryValue[], isAscendent: boolean]> &
36
+ ((orderPointer: IQueryValue[], isAscendent: boolean) => any);
36
37
  defaultProps.sortedState = { isAscending: true, sortedByTitle: false, sortedByUsers: false };
37
38
  defaultProps.sortItems = onClickMock;
38
39
 
@@ -47,8 +48,8 @@ describe("UsersFilter component rendering", () => {
47
48
  });
48
49
 
49
50
  it("should not render interactive arrow if filter selected", () => {
50
- const onClickMock = jest.fn() as CalledWithMock<any, [orderPointer: string, isAscendent: boolean]> &
51
- ((orderPointer: string, isAscendent: boolean) => any);
51
+ const onClickMock = jest.fn() as CalledWithMock<any, [orderPointer: IQueryValue[], isAscendent: boolean]> &
52
+ ((orderPointer: IQueryValue[], isAscendent: boolean) => any);
52
53
  defaultProps.sortedState = { isAscending: false, sortedByTitle: false, sortedByUsers: true };
53
54
  defaultProps.sortItems = onClickMock;
54
55
 
@@ -63,8 +64,8 @@ describe("UsersFilter component rendering", () => {
63
64
  });
64
65
 
65
66
  it("should render FullArrowUp icon if is filtered by ascending users", () => {
66
- const onClickMock = jest.fn() as CalledWithMock<any, [orderPointer: string, isAscendent: boolean]> &
67
- ((orderPointer: string, isAscendent: boolean) => any);
67
+ const onClickMock = jest.fn() as CalledWithMock<any, [orderPointer: IQueryValue[], isAscendent: boolean]> &
68
+ ((orderPointer: IQueryValue[], isAscendent: boolean) => any);
68
69
  defaultProps.sortedState = { isAscending: true, sortedByTitle: false, sortedByUsers: true };
69
70
  defaultProps.sortItems = onClickMock;
70
71
 
@@ -83,8 +84,8 @@ describe("UsersFilter events", () => {
83
84
  it("should render check group on click", () => {
84
85
  const onClickMock = jest.fn();
85
86
  defaultProps.sortedState = { isAscending: true, sortedByTitle: false, sortedByUsers: true };
86
- defaultProps.sortItems = onClickMock as CalledWithMock<any, [orderPointer: string, isAscendent: boolean]> &
87
- ((orderPointer: string, isAscendent: boolean) => any);
87
+ defaultProps.sortItems = onClickMock as CalledWithMock<any, [orderPointer: IQueryValue[], isAscendent: boolean]> &
88
+ ((orderPointer: IQueryValue[], isAscendent: boolean) => any);
88
89
 
89
90
  render(
90
91
  <ThemeProvider theme={parseTheme(globalTheme)}>
@@ -106,8 +107,8 @@ describe("UsersFilter events", () => {
106
107
  it("should call filterItems with isAscending on click 'Ascendent' option", async () => {
107
108
  const onClickMock = jest.fn();
108
109
  defaultProps.sortedState = { isAscending: true, sortedByTitle: false, sortedByUsers: true };
109
- defaultProps.sortItems = onClickMock as CalledWithMock<any, [orderPointer: string, isAscendent: boolean]> &
110
- ((orderPointer: string, isAscendent: boolean) => any);
110
+ defaultProps.sortItems = onClickMock as CalledWithMock<any, [orderPointer: IQueryValue[], isAscendent: boolean]> &
111
+ ((orderPointer: IQueryValue[], isAscendent: boolean) => any);
111
112
 
112
113
  render(
113
114
  <ThemeProvider theme={parseTheme(globalTheme)}>
@@ -124,14 +125,14 @@ describe("UsersFilter events", () => {
124
125
  fireEvent.click(listItems[0]);
125
126
  expect(onClickMock).toHaveBeenCalledTimes(1);
126
127
  const isAscending = true;
127
- expect(onClickMock).toBeCalledWith("users", isAscending);
128
+ expect(onClickMock).toBeCalledWith([{ label: "users", value: "users" }], isAscending);
128
129
  });
129
130
 
130
131
  it("should call filterItems with isAscending false on click 'Descendent' option", async () => {
131
132
  const onClickMock = jest.fn();
132
133
  defaultProps.sortedState = { isAscending: true, sortedByTitle: false, sortedByUsers: true };
133
- defaultProps.sortItems = onClickMock as CalledWithMock<any, [orderPointer: string, isAscendent: boolean]> &
134
- ((orderPointer: string, isAscendent: boolean) => any);
134
+ defaultProps.sortItems = onClickMock as CalledWithMock<any, [orderPointer: IQueryValue[], isAscendent: boolean]> &
135
+ ((orderPointer: IQueryValue[], isAscendent: boolean) => any);
135
136
 
136
137
  render(
137
138
  <ThemeProvider theme={parseTheme(globalTheme)}>
@@ -148,6 +149,6 @@ describe("UsersFilter events", () => {
148
149
  fireEvent.click(listItems[1]);
149
150
  expect(onClickMock).toHaveBeenCalledTimes(1);
150
151
  const isAscending = false;
151
- expect(onClickMock).toBeCalledWith("users", isAscending);
152
+ expect(onClickMock).toBeCalledWith([{ label: "users", value: "users" }], isAscending);
152
153
  });
153
154
  });
package/src/api/sites.tsx CHANGED
@@ -132,7 +132,7 @@ const getAllSites = async (params: IGetSitesParams = { recentSitesNumber: 7 }) =
132
132
  if (searchQuery && searchQuery.trim() !== "") {
133
133
  SERVICES.GET_ALL_SITES.dynamicUrl = `${SERVICES.GET_ALL_SITES.dynamicUrl}${searchQuery}`;
134
134
  }
135
-
135
+
136
136
  if (token) {
137
137
  return sendInitialRequest(SERVICES.GET_ALL_SITES, token, { recentSitesNumber: 7 });
138
138
  } else {
@@ -147,7 +147,7 @@ const getSiteInfo = async (siteID: number) => {
147
147
  return sendRequest(SERVICES.GET_SITE_INFO);
148
148
  };
149
149
 
150
- const getStructuredSitePages = async (params: IGetSitePagesParams, structuredData: string, filterQuery?: string) => {
150
+ const getStructuredSitePages = async (params: IGetSitePagesParams, structuredData: string, filterQuery = "") => {
151
151
  const {
152
152
  host,
153
153
  endpoint: [prefix, suffix],
@@ -155,9 +155,7 @@ const getStructuredSitePages = async (params: IGetSitePagesParams, structuredDat
155
155
 
156
156
  const { siteID, deleted, page, itemsPerPage, query, format } = params;
157
157
 
158
- const filters = filterQuery ? `${filterQuery}&` : "?";
159
-
160
- SERVICES.GET_SITE_STRUCTURED_PAGES.dynamicUrl = `${host}${prefix}${siteID}${suffix}${structuredData}${filters}deleted=${deleted}&page=${page}&itemsPerPage=${itemsPerPage}`;
158
+ SERVICES.GET_SITE_STRUCTURED_PAGES.dynamicUrl = `${host}${prefix}${siteID}${suffix}${structuredData}?deleted=${deleted}&page=${page}&itemsPerPage=${itemsPerPage}${filterQuery}`;
161
159
 
162
160
  if (query && query.trim() !== "")
163
161
  SERVICES.GET_SITE_STRUCTURED_PAGES.dynamicUrl = SERVICES.GET_SITE_STRUCTURED_PAGES.dynamicUrl + `&query=${query}`;
@@ -167,7 +165,7 @@ const getStructuredSitePages = async (params: IGetSitePagesParams, structuredDat
167
165
  return sendRequest(SERVICES.GET_SITE_STRUCTURED_PAGES);
168
166
  };
169
167
 
170
- const getSitePages = async (params: IGetSitePagesParams, filterQuery?: string): Promise<AxiosResponse> => {
168
+ const getSitePages = async (params: IGetSitePagesParams, filterQuery = ""): Promise<AxiosResponse> => {
171
169
  const {
172
170
  host,
173
171
  endpoint: [prefix, suffix],
@@ -176,9 +174,7 @@ const getSitePages = async (params: IGetSitePagesParams, filterQuery?: string):
176
174
  const { siteID, deleted, page, itemsPerPage, query, filterStructuredData, lang, format, filterPages, ignoreLang } =
177
175
  params;
178
176
 
179
- const filters = filterQuery ? `${filterQuery}&` : "?";
180
-
181
- SERVICES.GET_SITE_PAGES.dynamicUrl = `${host}${prefix}${siteID}${suffix}${filters}deleted=${deleted}`;
177
+ SERVICES.GET_SITE_PAGES.dynamicUrl = `${host}${prefix}${siteID}${suffix}?deleted=${deleted}${filterQuery}`;
182
178
 
183
179
  if (page && itemsPerPage)
184
180
  SERVICES.GET_SITE_PAGES.dynamicUrl =
@@ -21,7 +21,9 @@ const Button = (props: IButtonProps): JSX.Element => {
21
21
  }
22
22
  };
23
23
 
24
- let iconWrapper = icon ? <Icon name={icon} /> : loader ? <Loader name={loader} /> : <></>;
24
+ const iconSize = buttonStyle === buttonStyles.MINIMAL ? "16" : "24";
25
+
26
+ let iconWrapper = icon ? <Icon name={icon} size={iconSize} /> : loader ? <Loader name={loader} /> : <></>;
25
27
  let iconBackWrapper = backIcon ? <Icon name={backIcon} /> : <></>;
26
28
 
27
29
  const buttonContent = (
@@ -129,6 +129,12 @@ const MinimalButton = styled.button`
129
129
  color: ${(p) => p.theme.color.interactive01};
130
130
  border: none;
131
131
  cursor: pointer;
132
+ span {
133
+ display: flex;
134
+ span {
135
+ padding-left: ${(p) => p.theme.spacing.xxs};
136
+ }
137
+ }
132
138
  `;
133
139
 
134
140
  const Label = styled.span<{ icon?: string; backIcon?: string }>`
@@ -37,7 +37,7 @@ export const TemplateManager = (props: IProps): JSX.Element => {
37
37
  const modulesDataPacks = activatedPacks.map((pack: IDataPack) => pack.modules).flat();
38
38
 
39
39
  const getFieldProps = (field: ISchemaField) => {
40
- const { key, type, whiteList = [], slugTo, readonly } = field;
40
+ const { key, type, whiteList = [], slugTo, readonly, disabled } = field;
41
41
  const isArr = type === "ComponentArray";
42
42
  const currentContent = isArr ? templateContent[key] : templateContent;
43
43
  const fieldObjKey = !isArr ? `${key}` : `modules`;
@@ -72,7 +72,7 @@ export const TemplateManager = (props: IProps): JSX.Element => {
72
72
  handleUpdate,
73
73
  error,
74
74
  readonly,
75
- disabledField: isComputedField,
75
+ disabledField: isComputedField || disabled,
76
76
  };
77
77
  };
78
78
 
@@ -75,7 +75,7 @@ const PageConnectedField = (props: any) => {
75
75
  const isDisabled =
76
76
  (!isGlobal &&
77
77
  (isModuleDisabled(selectedContent.component, componentType, activatedModules) || !isTemplateActivated)) ||
78
- isFieldReadOnly;
78
+ isFieldReadOnly || field.disabled;
79
79
 
80
80
  const isMetaTitleModified = selectedContent.metaTitle && selectedContent.metaTitle !== selectedContent.title;
81
81
 
@@ -6,7 +6,7 @@ import { ISite } from "@ax/types";
6
6
  import * as S from "./style";
7
7
 
8
8
  const ArrayFieldInline = (props: IProps): JSX.Element => {
9
- const { fields, item, index, onChange, handleDelete, site } = props;
9
+ const { fields, item, index, onChange, handleDelete, site, disabled } = props;
10
10
 
11
11
  const deleteItem = () => handleDelete(index);
12
12
 
@@ -30,7 +30,7 @@ const ArrayFieldInline = (props: IProps): JSX.Element => {
30
30
  <S.Wrapper data-testid="arrayFieldInline">
31
31
  <S.Content>
32
32
  <S.IconWrapper>
33
- <IconAction icon="delete" onClick={deleteItem} size="s" />
33
+ <IconAction icon="delete" onClick={deleteItem} size="s" disabled={disabled} />
34
34
  </S.IconWrapper>
35
35
  {getFields(fields)}
36
36
  </S.Content>
@@ -45,6 +45,7 @@ interface IProps {
45
45
  onChange: (value: Record<string, unknown>) => void;
46
46
  handleDelete: (index: number) => void;
47
47
  site: ISite | null;
48
+ disabled?: boolean;
48
49
  }
49
50
 
50
51
  export default ArrayFieldInline;
@@ -4,7 +4,7 @@ import { ISite } from "@ax/types";
4
4
  import * as S from "./style";
5
5
 
6
6
  const ArrayFieldItem = (props: IProps): JSX.Element => {
7
- const { fields, item, name, index, onChange, handleDelete, isOpen, setIsOpen, site } = props;
7
+ const { fields, item, name, index, onChange, handleDelete, isOpen, setIsOpen, site, disabled } = props;
8
8
 
9
9
  const handleClick = () => (isOpen === index ? setIsOpen(null) : setIsOpen(index));
10
10
 
@@ -15,6 +15,7 @@ const ArrayFieldItem = (props: IProps): JSX.Element => {
15
15
  label: "Delete",
16
16
  icon: "delete",
17
17
  action: deleteItem,
18
+ disabled
18
19
  },
19
20
  ];
20
21
 
@@ -63,6 +64,7 @@ interface IProps {
63
64
  isOpen: number | null;
64
65
  setIsOpen: (index: number | null) => void;
65
66
  site: ISite | null;
67
+ disabled?: boolean;
66
68
  }
67
69
 
68
70
  export default ArrayFieldItem;
@@ -9,7 +9,7 @@ import ArrayFieldInline from "./ArrayFieldInline";
9
9
  import * as S from "./style";
10
10
 
11
11
  const ArrayFieldGroup = (props: IProps): JSX.Element => {
12
- const { value, name, innerFields, onChange, divider, arrayType, site } = props;
12
+ const { value, name, innerFields, onChange, divider, arrayType, site, disabled } = props;
13
13
 
14
14
  const initialValue = value ? Object.values(value) : [];
15
15
  const initialValueMapped = initialValue.map((val: any) => {
@@ -61,6 +61,7 @@ const ArrayFieldGroup = (props: IProps): JSX.Element => {
61
61
  onChange={handleFieldChange}
62
62
  handleDelete={handleDelete}
63
63
  site={site}
64
+ disabled={disabled}
64
65
  />
65
66
  ) : (
66
67
  <ArrayFieldItem
@@ -74,12 +75,13 @@ const ArrayFieldGroup = (props: IProps): JSX.Element => {
74
75
  isOpen={isOpen}
75
76
  setIsOpen={setIsOpen}
76
77
  site={site}
78
+ disabled={disabled}
77
79
  />
78
80
  );
79
81
  })}
80
82
  </div>
81
83
  <S.ButtonWrapper>
82
- <Button type="button" onClick={handleClick} buttonStyle="line">
84
+ <Button type="button" onClick={handleClick} buttonStyle="line" disabled={disabled}>
83
85
  {`Add ${name}`}
84
86
  </Button>
85
87
  </S.ButtonWrapper>
@@ -95,6 +97,7 @@ export interface IProps {
95
97
  divider: { title: string; text: string };
96
98
  arrayType: string;
97
99
  site: ISite | null;
100
+ disabled?: boolean;
98
101
  }
99
102
 
100
103
  export default ArrayFieldGroup;
@@ -51,8 +51,8 @@ const CheckMark = styled.span<{
51
51
  content: "";
52
52
  position: absolute;
53
53
  display: ${(p) => (p.checked || p.indeterminate ? `blocked` : `none`)};
54
- left: 3px;
55
- top: -1px;
54
+ left: 4px;
55
+ top: 0;
56
56
  width: 4px;
57
57
  height: 10px;
58
58
  border: solid #ffffff;
@@ -8,7 +8,7 @@ import Picker from "./Picker";
8
8
  import * as S from "./style";
9
9
 
10
10
  const ColorPicker = (props: IProps): JSX.Element => {
11
- const { value, onChange, error, colors = [], handleValidation, theme, isThemePalette } = props;
11
+ const { value, onChange, error, colors = [], handleValidation, theme, isThemePalette, disabled } = props;
12
12
 
13
13
  const getCurrentColors = () => {
14
14
  if (isThemePalette) {
@@ -105,9 +105,10 @@ const ColorPicker = (props: IProps): JSX.Element => {
105
105
  error={error}
106
106
  placeholder="#FFFFFF"
107
107
  onBlur={handleOnBlur}
108
+ disabled={disabled}
108
109
  />
109
110
  <S.IconWrapper>
110
- <IconAction icon={icon} size="s" onClick={togglePicker} />
111
+ <IconAction icon={icon} size="s" onClick={togglePicker} disabled={disabled} />
111
112
  </S.IconWrapper>
112
113
  </S.InputWrapper>
113
114
  {isVisible && (
@@ -129,6 +130,7 @@ export interface IProps {
129
130
  handleValidation?: (value: string, validators: Record<string, unknown>) => void;
130
131
  theme: string;
131
132
  isThemePalette?: boolean;
133
+ disabled?: boolean;
132
134
  }
133
135
 
134
136
  export default memo(ColorPicker);
@@ -44,6 +44,10 @@ const Input = styled.input<{error?: boolean}>`
44
44
  &::placeholder {
45
45
  color: ${(p) => p.theme.color.textLowEmphasis};
46
46
  }
47
+ &:disabled {
48
+ color: ${(p) => p.theme.color.interactiveDisabled};
49
+ border-color: ${(p) => p.theme.color.interactiveDisabled};
50
+ }
47
51
  `;
48
52
 
49
53
  const IconWrapper = styled.div`
@@ -42,7 +42,7 @@ const DatePickerInput = (props: IDatePickerProps, ref: any): JSX.Element => {
42
42
  handleValidation && handleValidation(inputValue, validators);
43
43
  };
44
44
 
45
- const CalendarIcon = <IconAction icon="calendar" onClick={onClick} />;
45
+ const CalendarIcon = <IconAction icon="calendar" onClick={onClick} disabled={disabled} />;
46
46
  const CloseIcon = (
47
47
  <S.IconWrapper>
48
48
  <Icon name="close" size="16" />