@griddo/ax 1.67.10 → 1.68.2

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 (121) hide show
  1. package/config/jest/componentsMock.js +1528 -27
  2. package/package.json +2 -2
  3. package/src/__mocks__/reducers/app.tsx +10 -0
  4. package/src/__mocks__/reducers/sites.tsx +10 -0
  5. package/src/__tests__/{AnalyticsField.test.tsx → components/Fields/AnalyticsField/AnalyticsField.test.tsx} +5 -5
  6. package/src/__tests__/{PageAnalytics.test.tsx → components/Fields/AnalyticsField/PageAnalytics/PageAnalytics.test.tsx} +2 -2
  7. package/src/__tests__/{StructuredDataAnalytics.test.tsx → components/Fields/AnalyticsField/StructuredDataAnalytics/StructuredDataAnalytics.test.tsx} +2 -2
  8. package/src/__tests__/{ArrayFieldGroup.test.tsx → components/Fields/ArrayFieldGroup/ArrayFieldGroup.test.tsx} +2 -2
  9. package/src/__tests__/{AsyncCheckGroup.test.tsx → components/Fields/AsyncCheckGroup/AsyncCheckGroup.test.tsx} +2 -2
  10. package/src/__tests__/{AsyncSelect.test.tsx → components/Fields/AsyncSelect/AsyncSelect.test.tsx} +2 -2
  11. package/src/__tests__/{CheckField.test.tsx → components/Fields/CheckField/CheckField.test.tsx} +2 -2
  12. package/src/__tests__/{CheckGroup.test.tsx → components/Fields/CheckGroup/CheckGroup.test.tsx} +2 -2
  13. package/src/__tests__/components/Fields/ColorPicker/ColorPicker.test.tsx +195 -0
  14. package/src/__tests__/components/Fields/ComponentArray/ComponentArray.test.tsx +184 -0
  15. package/src/__tests__/components/Fields/ComponentArray/MixableComponentArray/MixableComponentArray.test.tsx +315 -0
  16. package/src/__tests__/components/Fields/ComponentArray/MixableComponentArray/PasteModuleButton/PasteModuleButton.test.tsx +95 -0
  17. package/src/__tests__/components/Fields/ComponentArray/SameComponentArray/SameComponentArray.test.tsx +225 -0
  18. package/src/__tests__/{FieldGroup.test.tsx → components/Fields/FieldGroup/FieldGroup.test.tsx} +2 -2
  19. package/src/__tests__/components/Fields/FieldsDivider/FieldsDivider.test.tsx +24 -0
  20. package/src/__tests__/components/Fields/FileField/FileField.test.tsx +135 -0
  21. package/src/__tests__/{HeadingField.test.tsx → components/Fields/HeadingField/HeadingField.test.tsx} +2 -2
  22. package/src/__tests__/components/Fields/HiddenField/HiddenField.test.tsx +76 -0
  23. package/src/__tests__/components/Fields/MultiCheckSelect/MultiCheckSelect.test.tsx +70 -0
  24. package/src/__tests__/components/Fields/NoteField/NoteField.test.tsx +67 -0
  25. package/src/__tests__/components/Fields/NumberField/NumberField.test.tsx +109 -0
  26. package/src/__tests__/components/Fields/RadioField/RadioField.test.tsx +106 -0
  27. package/src/__tests__/components/Fields/RichText/RichText.test.tsx +52 -0
  28. package/src/__tests__/components/Fields/Select/Select.test.tsx +75 -0
  29. package/src/__tests__/components/Fields/SliderField/SliderField.test.tsx +82 -0
  30. package/src/__tests__/{TagField.test.tsx → components/Fields/TagField/TagField.test.tsx} +2 -2
  31. package/src/__tests__/{TextArea.test.tsx → components/Fields/TextArea/TextArea.test.tsx} +2 -2
  32. package/src/__tests__/{TextField.test.tsx → components/Fields/TextField/TextField.test.tsx} +2 -2
  33. package/src/__tests__/components/Fields/ToggleField/ToggleField.test.tsx +100 -0
  34. package/src/__tests__/{UniqueCheck.test.tsx → components/Fields/UniqueCheck/UniqueCheck.test.tsx} +2 -2
  35. package/src/__tests__/components/Fields/UrlField/UrlField.test.tsx +446 -0
  36. package/src/__tests__/components/Fields/UrlField/mockedAxios.ts +2214 -0
  37. package/src/__tests__/components/Fields/VisualUniqueSelection/ImageSelection/ImageSelection.test.tsx +99 -0
  38. package/src/__tests__/components/Fields/VisualUniqueSelection/ScrollableSelection/ScrollableSelection.test.tsx +176 -0
  39. package/src/__tests__/components/Fields/VisualUniqueSelection/VisualUniqueSelection.test.tsx +78 -0
  40. package/src/components/ActionMenu/index.tsx +1 -0
  41. package/src/components/Browser/index.tsx +39 -47
  42. package/src/components/Browser/style.tsx +15 -15
  43. package/src/components/BrowserContent/index.tsx +78 -0
  44. package/src/components/ConfigPanel/Form/ConnectedField/NavConnectedField/index.tsx +3 -5
  45. package/src/components/ConfigPanel/Form/ConnectedField/PageConnectedField/index.tsx +2 -6
  46. package/src/components/ConfigPanel/Header/index.tsx +28 -11
  47. package/src/components/ConfigPanel/index.tsx +2 -2
  48. package/src/components/ErrorCenter/index.tsx +11 -4
  49. package/src/components/Fields/ArrayFieldGroup/index.tsx +4 -2
  50. package/src/components/Fields/ArrayFieldGroup/style.tsx +7 -0
  51. package/src/components/Fields/AsyncCheckGroup/index.tsx +1 -1
  52. package/src/components/Fields/CheckField/index.tsx +1 -1
  53. package/src/components/Fields/ColorPicker/Picker/index.tsx +9 -3
  54. package/src/components/Fields/ColorPicker/index.tsx +4 -9
  55. package/src/components/Fields/ComponentArray/MixableComponentArray/PasteModuleButton/index.tsx +2 -1
  56. package/src/components/Fields/ComponentArray/MixableComponentArray/index.tsx +27 -22
  57. package/src/components/Fields/ComponentArray/MixableComponentArray/style.tsx +3 -38
  58. package/src/components/Fields/ComponentArray/SameComponentArray/index.tsx +3 -2
  59. package/src/components/Fields/ComponentArray/SameComponentArray/style.tsx +1 -28
  60. package/src/components/Fields/ComponentArray/helpers.tsx +1 -1
  61. package/src/components/Fields/ComponentContainer/index.tsx +3 -1
  62. package/src/components/Fields/FileField/FileDragAndDrop/index.tsx +1 -1
  63. package/src/components/Fields/FileField/FileDragAndDrop/style.tsx +2 -3
  64. package/src/components/Fields/FileField/index.tsx +6 -6
  65. package/src/components/Fields/HiddenField/index.tsx +3 -3
  66. package/src/components/Fields/MultiCheckSelect/index.tsx +8 -27
  67. package/src/components/Fields/NoteField/index.tsx +3 -3
  68. package/src/components/Fields/NumberField/index.tsx +6 -3
  69. package/src/components/Fields/RadioField/index.tsx +10 -2
  70. package/src/components/Fields/ReferenceField/index.tsx +8 -1
  71. package/src/components/Fields/ReferenceField/style.tsx +5 -0
  72. package/src/components/Fields/RichText/index.tsx +1 -1
  73. package/src/components/Fields/SliderField/index.tsx +11 -7
  74. package/src/components/Fields/ToggleField/index.tsx +12 -3
  75. package/src/components/Fields/UrlField/PageFinder/SelectionListItem/index.tsx +1 -1
  76. package/src/components/Fields/UrlField/index.tsx +6 -4
  77. package/src/components/Fields/UrlField/style.tsx +4 -2
  78. package/src/components/Fields/VisualOption/index.tsx +10 -2
  79. package/src/components/Fields/VisualUniqueSelection/ImageSelection/index.tsx +2 -2
  80. package/src/components/Fields/VisualUniqueSelection/ScrollableSelection/index.tsx +4 -3
  81. package/src/components/Fields/VisualUniqueSelection/ScrollableSelection/style.tsx +1 -1
  82. package/src/components/Fields/VisualUniqueSelection/index.tsx +3 -3
  83. package/src/components/FieldsBehavior/index.tsx +4 -4
  84. package/src/components/FieldsBehavior/style.tsx +5 -12
  85. package/src/components/FloatingMenu/index.tsx +8 -4
  86. package/src/components/Loader/index.tsx +12 -8
  87. package/src/components/MainWrapper/AppBar/index.tsx +1 -0
  88. package/src/components/MainWrapper/index.tsx +1 -0
  89. package/src/components/Toast/index.tsx +1 -1
  90. package/src/components/Tooltip/index.tsx +1 -1
  91. package/src/components/index.tsx +2 -0
  92. package/src/containers/App/actions.tsx +3 -7
  93. package/src/containers/PageEditor/actions.tsx +36 -5
  94. package/src/forms/editor.tsx +35 -1
  95. package/src/forms/fields.tsx +6 -2
  96. package/src/forms/index.tsx +2 -0
  97. package/src/forms/validators.tsx +29 -8
  98. package/src/guards/error/index.tsx +1 -1
  99. package/src/helpers/containerEvaluations.tsx +32 -4
  100. package/src/helpers/index.tsx +2 -0
  101. package/src/helpers/structuredData.tsx +2 -2
  102. package/src/hooks/forms.tsx +1 -28
  103. package/src/hooks/index.tsx +1 -2
  104. package/src/modules/FramePreview/index.tsx +70 -36
  105. package/src/modules/FramePreview/style.tsx +3 -0
  106. package/src/modules/GlobalEditor/PageBrowser/index.tsx +2 -7
  107. package/src/modules/GlobalEditor/index.tsx +8 -6
  108. package/src/modules/GlobalEditor/style.tsx +1 -1
  109. package/src/modules/Navigation/Defaults/DefaultsEditor/Editor/DefaultsBrowser/index.tsx +0 -4
  110. package/src/modules/Navigation/Defaults/DefaultsEditor/index.tsx +3 -2
  111. package/src/modules/PageEditor/PageBrowser/index.tsx +1 -4
  112. package/src/modules/PageEditor/index.tsx +6 -6
  113. package/src/modules/PublicPreview/index.tsx +17 -34
  114. package/src/modules/PublicPreview/style.tsx +0 -2
  115. package/src/modules/Settings/ContentTypes/DataPacks/Config/Form/TemplateConfig/TemplateEditor/Editor/TemplateBrowser/index.tsx +0 -4
  116. package/src/modules/Sites/index.tsx +1 -1
  117. package/src/modules/StructuredData/Form/ConnectedField/index.tsx +1 -1
  118. package/src/modules/StructuredData/Form/index.tsx +3 -1
  119. package/src/modules/StructuredData/StructuredDataList/index.tsx +1 -0
  120. package/src/schemas/pages/GlobalPage.tsx +1 -0
  121. package/src/types/index.tsx +1 -0
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@griddo/ax",
3
3
  "description": "Griddo Author Experience",
4
- "version": "1.67.10",
4
+ "version": "1.68.2",
5
5
  "authors": [
6
6
  "Álvaro Sánchez' <alvaro.sanches@secuoyas.com>",
7
7
  "Carlos Torres <carlos.torres@secuoyas.com>",
@@ -221,5 +221,5 @@
221
221
  "publishConfig": {
222
222
  "access": "public"
223
223
  },
224
- "gitHead": "0036f6f3f22eb0d092654fe726253ef7323de09a"
224
+ "gitHead": "6a6e90c93a8dc31f77b2b67df24fbda20f16aadf"
225
225
  }
@@ -0,0 +1,10 @@
1
+ import { AppActionsCreators } from "@ax/containers/App/interfaces";
2
+ import { initialState } from "@ax/containers/App/reducer";
3
+
4
+ // eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types
5
+ export default (state = initialState, action: { type: AppActionsCreators }) => {
6
+ switch (action.type) {
7
+ default:
8
+ return state;
9
+ }
10
+ };
@@ -0,0 +1,10 @@
1
+ import { initialState } from "@ax/containers/Sites/reducer";
2
+ import { SitesActionsCreators } from "@ax/containers/Sites/interfaces";
3
+
4
+ // eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types
5
+ export default (state = initialState, action: { type: SitesActionsCreators }) => {
6
+ switch (action.type) {
7
+ default:
8
+ return state;
9
+ }
10
+ };
@@ -1,14 +1,14 @@
1
1
  import React from "react";
2
2
  import "@testing-library/jest-dom";
3
- import AnalyticsField from "../components/Fields/AnalyticsField/index";
3
+ import AnalyticsField from "@ax/components/Fields/AnalyticsField";
4
4
  import { IAnalytics } from "@ax/types";
5
5
  import { createStore, combineReducers } from "redux";
6
- import analyticsReducer from "../__mocks__/reducers/analyticsState";
7
- import pageEditorReducer from "../__mocks__/reducers/pageEditor";
6
+ import analyticsReducer from "../../../../__mocks__/reducers/analyticsState";
7
+ import pageEditorReducer from "../../../../__mocks__/reducers/pageEditor";
8
8
  import { ThemeProvider } from "styled-components";
9
9
  import { parseTheme } from "@griddo/core";
10
- import globalTheme from "../themes/theme.json";
11
- import { render, cleanup } from "../../config/jest/test-utils";
10
+ import globalTheme from "@ax/themes/theme.json";
11
+ import { render, cleanup } from "../../../../../config/jest/test-utils";
12
12
 
13
13
  const valuesMock = {
14
14
  contentSelect: "",
@@ -1,10 +1,10 @@
1
1
  import React from "react";
2
2
  import "@testing-library/jest-dom";
3
- import PageAnalytics from "../components/Fields/AnalyticsField/PageAnalytics";
3
+ import PageAnalytics from "@ax/components/Fields/AnalyticsField/PageAnalytics";
4
4
  import { IAnalytics } from "@ax/types";
5
5
  import { ThemeProvider } from "styled-components";
6
6
  import { parseTheme } from "@griddo/core";
7
- import globalTheme from "../themes/theme.json";
7
+ import globalTheme from "@ax/themes/theme.json";
8
8
  import { render, cleanup } from "@testing-library/react";
9
9
 
10
10
  const valuesMock = {
@@ -1,10 +1,10 @@
1
1
  import React from "react";
2
2
  import "@testing-library/jest-dom";
3
- import StructuredDataAnalytics from "../components/Fields/AnalyticsField/StructuredDataAnalytics/index";
3
+ import StructuredDataAnalytics from "@ax/components/Fields/AnalyticsField/StructuredDataAnalytics";
4
4
  import { IAnalytics } from "@ax/types";
5
5
  import { ThemeProvider } from "styled-components";
6
6
  import { parseTheme } from "@griddo/core";
7
- import globalTheme from "../themes/theme.json";
7
+ import globalTheme from "@ax/themes/theme.json";
8
8
  import { render, cleanup } from "@testing-library/react";
9
9
 
10
10
  const valuesMock = {
@@ -1,8 +1,8 @@
1
1
  import React from "react";
2
- import ArrayFieldGroup from "../components/Fields/ArrayFieldGroup/index";
2
+ import ArrayFieldGroup from "@ax/components/Fields/ArrayFieldGroup";
3
3
  import { ThemeProvider } from "styled-components";
4
4
  import { parseTheme } from "@griddo/core";
5
- import globalTheme from "../themes/theme.json";
5
+ import globalTheme from "@ax/themes/theme.json";
6
6
  import { render, screen, fireEvent, cleanup, act } from "@testing-library/react";
7
7
  import { mock } from "jest-mock-extended";
8
8
  import FieldsBehavior from "@ax/components/FieldsBehavior";
@@ -1,9 +1,9 @@
1
1
  import React from "react";
2
2
  import axios from "axios";
3
- import AsyncCheckGroup from "../components/Fields/AsyncCheckGroup/index";
3
+ import AsyncCheckGroup from "@ax/components/Fields/AsyncCheckGroup";
4
4
  import { ThemeProvider } from "styled-components";
5
5
  import { parseTheme } from "@griddo/core";
6
- import globalTheme from "../themes/theme.json";
6
+ import globalTheme from "@ax/themes/theme.json";
7
7
  import { render, screen, cleanup, act } from "@testing-library/react";
8
8
  import { ISite } from "@ax/types";
9
9
  import { mock } from "jest-mock-extended";
@@ -1,10 +1,10 @@
1
1
  import React from "react";
2
2
  import axios from "axios";
3
3
  import "@testing-library/jest-dom";
4
- import AsyncSelect from "../components/Fields/AsyncSelect/index";
4
+ import AsyncSelect from "@ax/components/Fields/AsyncSelect";
5
5
  import { ThemeProvider } from "styled-components";
6
6
  import { parseTheme } from "@griddo/core";
7
- import globalTheme from "../themes/theme.json";
7
+ import globalTheme from "@ax/themes/theme.json";
8
8
  import { render, screen, cleanup, act } from "@testing-library/react";
9
9
  import { ISite } from "@ax/types";
10
10
  import { mock } from "jest-mock-extended";
@@ -1,8 +1,8 @@
1
1
  import React from "react";
2
- import CheckField from "../components/Fields/CheckField/index";
2
+ import CheckField from "@ax/components/Fields/CheckField";
3
3
  import { ThemeProvider } from "styled-components";
4
4
  import { parseTheme } from "@griddo/core";
5
- import globalTheme from "../themes/theme.json";
5
+ import globalTheme from "@ax/themes/theme.json";
6
6
  import { render, screen, cleanup, fireEvent } from "@testing-library/react";
7
7
 
8
8
  afterEach(cleanup);
@@ -1,8 +1,8 @@
1
1
  import React from "react";
2
- import CheckGroup from "../components/Fields/CheckGroup/index";
2
+ import CheckGroup from "@ax/components/Fields/CheckGroup";
3
3
  import { ThemeProvider } from "styled-components";
4
4
  import { parseTheme } from "@griddo/core";
5
- import globalTheme from "../themes/theme.json";
5
+ import globalTheme from "@ax/themes/theme.json";
6
6
  import "@testing-library/jest-dom";
7
7
  import { Simulate } from "react-dom/test-utils";
8
8
  import { render, cleanup, fireEvent, screen } from "@testing-library/react";
@@ -0,0 +1,195 @@
1
+ import React from "react";
2
+ import "@testing-library/jest-dom";
3
+ import ColorPicker from "@ax/components/Fields/ColorPicker";
4
+ import { ThemeProvider } from "styled-components";
5
+ import { parseTheme } from "@griddo/core";
6
+ import globalTheme from "@ax/themes/theme.json";
7
+ import { render, screen, cleanup, fireEvent } from "@testing-library/react";
8
+ import { mock } from "jest-mock-extended";
9
+
10
+ afterEach(cleanup);
11
+
12
+ const defaultProps = mock<IProps>();
13
+
14
+ describe("AsyncSelect component rendering", () => {
15
+ test("should render the component AsyncSelect", () => {
16
+ defaultProps.value = "#000000";
17
+ defaultProps.theme = parseTheme(globalTheme);
18
+
19
+ render(
20
+ <ThemeProvider theme={parseTheme(globalTheme)}>
21
+ <ColorPicker {...defaultProps} />
22
+ </ThemeProvider>
23
+ );
24
+ expect(screen.getByTestId("colorPickerWrapper")).toBeTruthy();
25
+ });
26
+
27
+ test("should render the Picker", () => {
28
+ defaultProps.value = "#000000";
29
+ defaultProps.theme = parseTheme(globalTheme);
30
+ defaultProps.error = true;
31
+ render(
32
+ <ThemeProvider theme={parseTheme(globalTheme)}>
33
+ <ColorPicker {...defaultProps} />
34
+ </ThemeProvider>
35
+ );
36
+ const inputActionComponent = screen.getByTestId("iconActionComponent");
37
+ expect(inputActionComponent).toBeTruthy();
38
+ fireEvent.click(inputActionComponent);
39
+ expect(screen.findByTestId("pickerWrapper")).toBeTruthy();
40
+ });
41
+ });
42
+
43
+ describe("AsyncSelect events", () => {
44
+ test("should trigger the onChange", () => {
45
+ defaultProps.value = "#000000";
46
+ defaultProps.theme = parseTheme(globalTheme);
47
+ const onChangeMock = defaultProps.onChange as jest.MockedFunction<(newColor: string) => void>;
48
+
49
+ render(
50
+ <ThemeProvider theme={parseTheme(globalTheme)}>
51
+ <ColorPicker {...defaultProps} />
52
+ </ThemeProvider>
53
+ );
54
+ const inputComponent = screen.getByTestId("inputPickerWrapper");
55
+ expect(inputComponent).toBeTruthy();
56
+ fireEvent.change(inputComponent, { target: { value: 555 } });
57
+ expect(onChangeMock).not.toBeCalled();
58
+ fireEvent.change(inputComponent, { target: { value: "#ffffff" } });
59
+ expect(onChangeMock).toBeCalledWith("#ffffff");
60
+ fireEvent.change(inputComponent, { target: { value: "#fff" } });
61
+ expect(onChangeMock).toBeCalledWith("#ffffff");
62
+ });
63
+
64
+ test("should trigger the onChange", () => {
65
+ defaultProps.value = "#000000";
66
+ defaultProps.theme = parseTheme(globalTheme);
67
+ const handleValidationMock = defaultProps.handleValidation as jest.MockedFunction<
68
+ (value: string, validators: Record<string, unknown>) => void
69
+ >;
70
+ defaultProps.error = true;
71
+ render(
72
+ <ThemeProvider theme={parseTheme(globalTheme)}>
73
+ <ColorPicker {...defaultProps} />
74
+ </ThemeProvider>
75
+ );
76
+ const inputComponent = screen.getByTestId("inputPickerWrapper");
77
+ expect(inputComponent).toBeTruthy();
78
+ fireEvent.change(inputComponent, { target: { value: "#fff" } });
79
+ expect(handleValidationMock).toBeCalled();
80
+ });
81
+
82
+ test("should trigger the onChange of the Picker", async () => {
83
+ defaultProps.value = "#000000";
84
+ defaultProps.theme = parseTheme(globalTheme);
85
+ defaultProps.error = true;
86
+ const onChangeMock = defaultProps.onChange as jest.MockedFunction<(newColor: string) => void>;
87
+ render(
88
+ <ThemeProvider theme={parseTheme(globalTheme)}>
89
+ <ColorPicker {...defaultProps} />
90
+ </ThemeProvider>
91
+ );
92
+
93
+ const inputActionComponent = screen.getByTestId("iconActionComponent");
94
+ expect(inputActionComponent).toBeTruthy();
95
+ fireEvent.click(inputActionComponent);
96
+ const inputPicker = await screen.findByTestId("inputPicker");
97
+ expect(inputPicker).toBeTruthy();
98
+ fireEvent.change(inputPicker, { target: { value: "#fff" } });
99
+ expect(onChangeMock).toBeCalled();
100
+ });
101
+
102
+ test("should trigger the onChange of the Picker with color", async () => {
103
+ defaultProps.value = "#000000";
104
+ defaultProps.theme = parseTheme(globalTheme);
105
+ defaultProps.error = true;
106
+ defaultProps.colors = ["#fff", "#000"];
107
+ const onChangeMock = defaultProps.onChange as jest.MockedFunction<(newColor: string) => void>;
108
+ render(
109
+ <ThemeProvider theme={parseTheme(globalTheme)}>
110
+ <ColorPicker {...defaultProps} />
111
+ </ThemeProvider>
112
+ );
113
+
114
+ const inputActionComponent = screen.getByTestId("iconActionComponent");
115
+ expect(inputActionComponent).toBeTruthy();
116
+ fireEvent.click(inputActionComponent);
117
+ const inputPicker = await screen.findByTestId("inputPicker");
118
+ expect(inputPicker).toBeTruthy();
119
+ fireEvent.change(inputPicker, { target: { value: "#fff" } });
120
+ expect(onChangeMock).toBeCalled();
121
+ });
122
+
123
+ test("should not pass colors to picker", async () => {
124
+ defaultProps.value = "#000000";
125
+ defaultProps.theme = "default";
126
+ defaultProps.error = true;
127
+ defaultProps.colors = [
128
+ { color: "#f0f0f0", theme: "default" },
129
+ { color: "#fff", theme: "cms-default" },
130
+ ];
131
+
132
+ render(
133
+ <ThemeProvider theme={parseTheme(globalTheme)}>
134
+ <ColorPicker {...defaultProps} />
135
+ </ThemeProvider>
136
+ );
137
+
138
+ const inputActionComponent = screen.getByTestId("iconActionComponent");
139
+ expect(inputActionComponent).toBeTruthy();
140
+ fireEvent.click(inputActionComponent);
141
+ const gridItem = await screen.findAllByTestId("gridItem");
142
+ // is getting the default colors
143
+ expect(gridItem).toHaveLength(9);
144
+ });
145
+
146
+ test("should pass colors to picker", async () => {
147
+ defaultProps.value = "#000000";
148
+ defaultProps.theme = "default";
149
+ defaultProps.error = true;
150
+ defaultProps.colors = [
151
+ { options: ["#f0f0f0"], theme: "default" },
152
+ { color: "#fff", theme: "cms-default" },
153
+ ];
154
+
155
+ render(
156
+ <ThemeProvider theme={parseTheme(globalTheme)}>
157
+ <ColorPicker {...defaultProps} />
158
+ </ThemeProvider>
159
+ );
160
+
161
+ const inputActionComponent = screen.getByTestId("iconActionComponent");
162
+ expect(inputActionComponent).toBeTruthy();
163
+ fireEvent.click(inputActionComponent);
164
+ const gridItem = await screen.findAllByTestId("gridItem");
165
+ // it's getting the color passed
166
+ expect(gridItem).toHaveLength(1);
167
+ });
168
+
169
+ test("should trigger the handleOnBlur", async () => {
170
+ defaultProps.value = "#000000";
171
+ defaultProps.theme = parseTheme(globalTheme);
172
+ const handleValidationMock = defaultProps.handleValidation as jest.MockedFunction<
173
+ (value: string, validators: Record<string, unknown>) => void
174
+ >;
175
+
176
+ render(
177
+ <ThemeProvider theme={parseTheme(globalTheme)}>
178
+ <ColorPicker {...defaultProps} />
179
+ </ThemeProvider>
180
+ );
181
+ const inputComponent = screen.getByTestId("inputPickerWrapper");
182
+ expect(inputComponent).toBeTruthy();
183
+ fireEvent.blur(inputComponent, { target: { value: "#fff" } });
184
+ expect(handleValidationMock).toBeCalled();
185
+ });
186
+ });
187
+
188
+ export interface IProps {
189
+ value: string;
190
+ error?: boolean;
191
+ colors?: string[] | Record<string, unknown>[];
192
+ onChange: (newColor: string) => void;
193
+ handleValidation?: (value: string, validators: Record<string, unknown>) => void;
194
+ theme: string;
195
+ }
@@ -0,0 +1,184 @@
1
+ import * as React from "react";
2
+ import ComponentArraySelector from "@ax/components/Fields/ComponentArray";
3
+ import { ThemeProvider } from "styled-components";
4
+ import { parseTheme } from "@griddo/core";
5
+ import globalTheme from "@ax/themes/theme.json";
6
+ import { IModule } from "@ax/types";
7
+ import { ISameComponentArrayProps } from "@ax/components/Fields/ComponentArray/SameComponentArray";
8
+ import { render, screen, cleanup } from "@testing-library/react";
9
+ import { mock } from "jest-mock-extended";
10
+
11
+ afterEach(cleanup);
12
+
13
+ const mixableProps = mock<ISameComponentArrayProps & IMixableComponentArrayProps>();
14
+ const mixableModule = mock<IModule>();
15
+ const otherMixableModule = mock<IModule>();
16
+ // default values for MixableComponentArray
17
+ mixableModule.editorID = 1;
18
+ mixableModule.component = "HeroCard";
19
+ mixableModule.title = "Cards";
20
+ mixableModule.modules = [];
21
+ otherMixableModule.editorID = 2;
22
+ otherMixableModule.component = "HeroCard";
23
+ otherMixableModule.title = "Hero Section";
24
+ otherMixableModule.modules = [];
25
+ mixableProps.field = { type: "components" };
26
+ mixableProps.value = [mixableModule];
27
+ mixableProps.activatedModules = ["HeroSection"];
28
+ mixableProps.whiteList = [];
29
+ mixableProps.moduleCopy = null;
30
+
31
+ const sameProps = mock<ISameComponentArrayProps & IMixableComponentArrayProps>();
32
+ const sameModule = mock<IModule>();
33
+ // default values for SameComponentArray
34
+ sameModule.editorID = 4;
35
+ sameModule.component = "HeroCard";
36
+ sameModule.title = "Hero Section";
37
+ sameModule.modules = [
38
+ {
39
+ id: "ArticlesDistributor",
40
+ title: "Articles Distributor",
41
+ category: "articlesAndEvents",
42
+ thumbnails: {
43
+ "1x": "https://res.cloudinary.com/thesaurus-cms/image/upload/griddo-components/thumbnails/ArticlesDistributor",
44
+ "2x": "https://res.cloudinary.com/thesaurus-cms/image/upload/griddo-components/thumbnails/ArticlesDistributor@2x",
45
+ },
46
+ dataPacks: ["ARTICLES"],
47
+ type: {},
48
+ sectionList: {
49
+ BasicTemplate: ["mainContent"],
50
+ NewsDetail: ["closureContent"],
51
+ NewsList: ["relatedContent"],
52
+ SitemapTemplate: ["relatedContent", "closureContent"],
53
+ StoryDetail: ["mainContent", "relatedContent"],
54
+ },
55
+ },
56
+ ];
57
+ sameProps.value = [sameModule];
58
+ sameProps.activatedModules = ["HeroSection"];
59
+ sameProps.whiteList = [];
60
+ sameProps.selectedContent = {
61
+ anchorID: null,
62
+ verticalSpacing: "medium",
63
+ component: "CardCollection",
64
+ kind: "BasicCard",
65
+ title: {
66
+ content: "Title",
67
+ tag: "h2",
68
+ },
69
+ subtitle: "Subtitle",
70
+ detail: "Detail",
71
+ elements: [
72
+ {
73
+ component: "BasicCard",
74
+ title: {
75
+ content: "Title",
76
+ tag: "h4",
77
+ },
78
+ subtitle: "Lorem Ipsum",
79
+ description:
80
+ "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Morbi dignissim ut nibh eget porttitor. Nunc eleifend mollis arcu. ",
81
+ auxInfo: "Auxiliar Information",
82
+ link: {
83
+ component: "Link",
84
+ text: "Link",
85
+ url: {
86
+ url: "",
87
+ linkTo: null,
88
+ newTab: false,
89
+ noFollow: false,
90
+ size: null,
91
+ icon: null,
92
+ linkContainer: null,
93
+ },
94
+ style: "link",
95
+ editorID: 6,
96
+ parentEditorID: 5,
97
+ },
98
+ link2: {
99
+ component: "Link",
100
+ editorID: 7,
101
+ parentEditorID: 5,
102
+ },
103
+ media: {
104
+ image: {
105
+ component: "LinkableImage",
106
+ editorID: 8,
107
+ parentEditorID: 5,
108
+ },
109
+ video: {
110
+ component: "Video",
111
+ editorID: 9,
112
+ parentEditorID: 5,
113
+ },
114
+ },
115
+ editorID: 5,
116
+ parentEditorID: 4,
117
+ },
118
+ ],
119
+ groupingLink: {
120
+ component: "Link",
121
+ editorID: 20,
122
+ parentEditorID: 4,
123
+ },
124
+ layout: "L002",
125
+ theme: "default",
126
+ editorID: 4,
127
+ parentEditorID: 3,
128
+ };
129
+ sameProps.elementUniqueSelection = true;
130
+
131
+ describe("ComponentArraySelector component rendering", () => {
132
+ test("should render the component with MixableComponentArray", () => {
133
+ mixableProps.disabled = true;
134
+ mixableProps.editorID = 1;
135
+ render(
136
+ <ThemeProvider theme={parseTheme(globalTheme)}>
137
+ <ComponentArraySelector {...mixableProps} />
138
+ </ThemeProvider>
139
+ );
140
+
141
+ expect(screen.getAllByTestId("mixableComponentWrapper")).toBeTruthy();
142
+ });
143
+
144
+ test("should render the component with SameComponentArray", () => {
145
+ sameProps.field = { type: "components" };
146
+ sameProps.objKey = "elements";
147
+ sameProps.disabled = false;
148
+ sameProps.maxItems = 10;
149
+ sameProps.actions = {
150
+ addModuleAction: jest.fn(),
151
+ addComponentAction: jest.fn(),
152
+ };
153
+
154
+ render(
155
+ <ThemeProvider theme={parseTheme(globalTheme)}>
156
+ <ComponentArraySelector {...sameProps} />
157
+ </ThemeProvider>
158
+ );
159
+
160
+ expect(screen.getAllByTestId("sameComponentWrapper")).toBeTruthy();
161
+ });
162
+ });
163
+
164
+ export interface IMixableComponentArrayProps {
165
+ maxItems: number;
166
+ title: string;
167
+ whiteList: any[];
168
+ value: IModule[];
169
+ selectedContent: any;
170
+ editorID: number;
171
+ goTo: (editorID: string) => void;
172
+ actions: any;
173
+ categories?: any;
174
+ disabled?: boolean;
175
+ activatedModules: string[];
176
+ objKey: string;
177
+ field: any;
178
+ mandatory?: boolean;
179
+ theme: string;
180
+ moduleCopy: { date: string; element: Record<string, any> } | null;
181
+ availableDataPacks: Record<string, any>[];
182
+ template: any;
183
+ setHistoryPush?: (path: string, isEditor: boolean) => void;
184
+ }