@griddo/ax 1.71.0 → 1.72.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 (99) hide show
  1. package/package.json +2 -2
  2. package/src/Style/index.tsx +1 -1
  3. package/src/__tests__/components/ElementsTooltip/ElementsTooltip.test.tsx +1 -1
  4. package/src/__tests__/components/EmptyState/EmptyState.test.tsx +1 -1
  5. package/src/__tests__/components/ErrorToast/ErrorToast.test.tsx +56 -0
  6. package/src/__tests__/components/FieldContainer/FieldContainer.test.tsx +82 -0
  7. package/src/__tests__/components/Fields/AnalyticsField/AnalyticsField.test.tsx +1 -1
  8. package/src/__tests__/components/Fields/AnalyticsField/PageAnalytics/PageAnalytics.test.tsx +1 -1
  9. package/src/__tests__/components/Fields/AnalyticsField/StructuredDataAnalytics/StructuredDataAnalytics.test.tsx +1 -1
  10. package/src/__tests__/components/Fields/ArrayFieldGroup/ArrayFieldGroup.test.tsx +2 -2
  11. package/src/__tests__/components/Fields/AsyncCheckGroup/AsyncCheckGroup.test.tsx +3 -3
  12. package/src/__tests__/components/Fields/AsyncSelect/AsyncSelect.test.tsx +1 -1
  13. package/src/__tests__/components/Fields/CheckField/CheckField.test.tsx +6 -6
  14. package/src/__tests__/components/Fields/CheckGroup/CheckGroup.test.tsx +15 -15
  15. package/src/__tests__/components/Fields/ColorPicker/ColorPicker.test.tsx +6 -6
  16. package/src/__tests__/components/Fields/ComponentArray/ComponentArray.test.tsx +1 -1
  17. package/src/__tests__/components/Fields/ComponentArray/MixableComponentArray/MixableComponentArray.test.tsx +7 -7
  18. package/src/__tests__/components/Fields/ComponentArray/MixableComponentArray/PasteModuleButton/PasteModuleButton.test.tsx +9 -9
  19. package/src/__tests__/components/Fields/ComponentArray/SameComponentArray/SameComponentArray.test.tsx +5 -5
  20. package/src/__tests__/components/Fields/ComponentContainer/ComponentContainer.test.tsx +1 -1
  21. package/src/__tests__/components/Fields/ConditionalField/ConditionalField.test.tsx +1 -1
  22. package/src/__tests__/components/Fields/DateField/DateField.test.tsx +1 -1
  23. package/src/__tests__/components/Fields/FieldGroup/FieldGroup.test.tsx +1 -1
  24. package/src/__tests__/components/Fields/FieldsDivider/FieldsDivider.test.tsx +1 -1
  25. package/src/__tests__/components/Fields/FileField/FileField.test.tsx +3 -3
  26. package/src/__tests__/components/Fields/HeadingField/HeadingField.test.tsx +6 -6
  27. package/src/__tests__/components/Fields/HiddenField/HiddenField.test.tsx +1 -1
  28. package/src/__tests__/components/Fields/ImageField/ImageField.test.tsx +3 -3
  29. package/src/__tests__/components/Fields/MultiCheckSelect/MultiCheckSelect.test.tsx +1 -1
  30. package/src/__tests__/components/Fields/MultiCheckSelectGroup/MultiCheckSelectGroup.test.tsx +2 -2
  31. package/src/__tests__/components/Fields/NoteField/NoteField.test.tsx +1 -1
  32. package/src/__tests__/components/Fields/NumberField/NumberField.test.tsx +1 -1
  33. package/src/__tests__/components/Fields/RadioField/RadioField.test.tsx +1 -1
  34. package/src/__tests__/components/Fields/ReferenceField/ReferenceField.test.tsx +96 -8
  35. package/src/__tests__/components/Fields/RichText/RichText.test.tsx +1 -1
  36. package/src/__tests__/components/Fields/Select/Select.test.tsx +2 -2
  37. package/src/__tests__/components/Fields/SliderField/SliderField.test.tsx +1 -1
  38. package/src/__tests__/components/Fields/TagField/TagField.test.tsx +1 -1
  39. package/src/__tests__/components/Fields/TextArea/TextArea.test.tsx +1 -1
  40. package/src/__tests__/components/Fields/TextField/TextField.test.tsx +6 -6
  41. package/src/__tests__/components/Fields/TimeField/HourInput/HourInput.test.tsx +1 -1
  42. package/src/__tests__/components/Fields/TimeField/TimeField.test.tsx +1 -1
  43. package/src/__tests__/components/Fields/ToggleField/ToggleField.test.tsx +1 -1
  44. package/src/__tests__/components/Fields/Tooltip/Tooltip.test.tsx +3 -2
  45. package/src/__tests__/components/Fields/UniqueCheck/UniqueCheck.test.tsx +3 -3
  46. package/src/__tests__/components/Fields/UrlField/UrlField.test.tsx +4 -4
  47. package/src/__tests__/components/Fields/VisualUniqueSelection/ImageSelection/ImageSelection.test.tsx +1 -1
  48. package/src/__tests__/components/Fields/VisualUniqueSelection/ScrollableSelection/ScrollableSelection.test.tsx +3 -3
  49. package/src/__tests__/components/Fields/VisualUniqueSelection/VisualUniqueSelection.test.tsx +1 -1
  50. package/src/__tests__/components/Fields/Wysiwyg/Wysiwyg.test.tsx +1 -1
  51. package/src/__tests__/components/FieldsBehavior/FieldsBehavior.test.tsx +149 -0
  52. package/src/__tests__/components/Pagination/Pagination.test.tsx +243 -0
  53. package/src/__tests__/components/SubNav/SubNav.test.tsx +37 -0
  54. package/src/__tests__/components/TableCounter/TableCounter.test.tsx +51 -0
  55. package/src/__tests__/components/TableFilters/CategoryFilter/CategoryFilter.test.tsx +241 -0
  56. package/src/__tests__/components/TableFilters/CustomizeFilters/CustomizeFilters.test.tsx +131 -0
  57. package/src/__tests__/components/TableFilters/DateFilter/DateFilter.test.tsx +148 -0
  58. package/src/__tests__/components/TableFilters/LiveFilter/LiveFilter.test.tsx +266 -0
  59. package/src/__tests__/components/TableFilters/NameFilter/NameFilter.test.tsx +196 -0
  60. package/src/__tests__/components/TableFilters/SiteFilter/SiteFilter.test.tsx +318 -0
  61. package/src/__tests__/components/TableFilters/StatusFilter/StatusFilter.test.tsx +195 -0
  62. package/src/__tests__/components/TableFilters/TranslationsFilter/TranslationsFilter.test.tsx +157 -0
  63. package/src/__tests__/components/TableFilters/TypeFilter/TypeFilter.test.tsx +165 -0
  64. package/src/__tests__/components/TableList/TableList.test.tsx +2 -2
  65. package/src/__tests__/components/Tabs/Tabs.test.tsx +42 -36
  66. package/src/__tests__/components/Tag/Tag.test.tsx +4 -2
  67. package/src/__tests__/components/Toast/Toast.test.tsx +4 -2
  68. package/src/components/ErrorToast/index.tsx +2 -2
  69. package/src/components/FieldContainer/index.tsx +3 -3
  70. package/src/components/Fields/CheckField/index.tsx +3 -3
  71. package/src/components/Fields/CheckGroup/index.tsx +2 -2
  72. package/src/components/Fields/HeadingField/index.tsx +1 -1
  73. package/src/components/Fields/Select/index.tsx +1 -1
  74. package/src/components/Fields/TextField/index.tsx +2 -7
  75. package/src/components/FieldsBehavior/index.tsx +1 -1
  76. package/src/components/FloatingMenu/index.tsx +1 -1
  77. package/src/components/IconAction/index.tsx +1 -1
  78. package/src/components/Lists/index.tsx +1 -1
  79. package/src/components/Pagination/index.tsx +4 -4
  80. package/src/components/SubNav/index.tsx +3 -3
  81. package/src/components/SubNav/style.tsx +1 -3
  82. package/src/components/TableCounter/index.tsx +7 -2
  83. package/src/components/TableFilters/CategoryFilter/index.tsx +2 -2
  84. package/src/components/TableFilters/CategoryFilter/style.tsx +1 -10
  85. package/src/components/TableFilters/CustomizeFilters/index.tsx +2 -3
  86. package/src/components/TableFilters/DateFilter/index.tsx +4 -4
  87. package/src/components/TableFilters/LiveFilter/index.tsx +1 -1
  88. package/src/components/TableFilters/LiveFilter/style.tsx +2 -10
  89. package/src/components/TableFilters/NameFilter/index.tsx +4 -4
  90. package/src/components/TableFilters/SiteFilter/index.tsx +16 -13
  91. package/src/components/TableFilters/SiteFilter/style.tsx +1 -10
  92. package/src/components/TableFilters/StatusFilter/index.tsx +3 -3
  93. package/src/components/TableFilters/TranslationsFilter/index.tsx +4 -7
  94. package/src/components/TableFilters/TranslationsFilter/style.tsx +1 -10
  95. package/src/components/TableFilters/TypeFilter/index.tsx +2 -2
  96. package/src/components/TableFilters/TypeFilter/style.tsx +1 -10
  97. package/src/components/Tooltip/index.tsx +1 -1
  98. package/src/helpers/index.tsx +3 -0
  99. package/src/helpers/parseTheme.js +456 -0
@@ -0,0 +1,165 @@
1
+ import * as React from "react";
2
+
3
+ import { ThemeProvider } from "styled-components";
4
+ import { CalledWithMock, mock } from "jest-mock-extended";
5
+ import { render, screen, cleanup, fireEvent } from "@testing-library/react";
6
+
7
+ import TypeFilter, { ITypeFilterProps } from "@ax/components/TableFilters/TypeFilter";
8
+ import globalTheme from "@ax/themes/theme.json";
9
+ import { parseTheme } from "@ax/helpers";
10
+
11
+ afterEach(cleanup);
12
+
13
+ const defaultProps = mock<ITypeFilterProps>();
14
+ describe("TypeFilter component rendering", () => {
15
+ it("should render type filter", () => {
16
+ defaultProps.filters = [
17
+ {
18
+ name: "all",
19
+ value: "all",
20
+ title: "All content",
21
+ },
22
+ {
23
+ name: "unique",
24
+ value: "unique",
25
+ title: "Basic templates",
26
+ },
27
+ {
28
+ name: "structuredData",
29
+ value: "structuredData",
30
+ title: "Content types",
31
+ },
32
+ ];
33
+ defaultProps.pointer = "type";
34
+ defaultProps.filterItems = jest.fn() as CalledWithMock<void, [pointer: string, filter: string]>;
35
+
36
+ render(
37
+ <ThemeProvider theme={parseTheme(globalTheme)}>
38
+ <TypeFilter {...defaultProps} />
39
+ </ThemeProvider>
40
+ );
41
+
42
+ const typeFilter = screen.getByTestId("floating-menu");
43
+ expect(typeFilter).toBeTruthy();
44
+ expect(typeFilter.textContent).toEqual("Types");
45
+ });
46
+ });
47
+
48
+ describe("TypeFilter events", () => {
49
+ it("should render check group on click", () => {
50
+ defaultProps.filters = [
51
+ {
52
+ name: "all",
53
+ value: "all",
54
+ title: "All content",
55
+ },
56
+ {
57
+ name: "unique",
58
+ value: "unique",
59
+ title: "Basic templates",
60
+ },
61
+ {
62
+ name: "structuredData",
63
+ value: "structuredData",
64
+ title: "Content types",
65
+ },
66
+ ];
67
+ defaultProps.pointer = "type";
68
+ defaultProps.filterItems = jest.fn() as CalledWithMock<void, [pointer: string, filter: string]>;
69
+
70
+ render(
71
+ <ThemeProvider theme={parseTheme(globalTheme)}>
72
+ <TypeFilter {...defaultProps} />
73
+ </ThemeProvider>
74
+ );
75
+
76
+ const typeFilterButton = screen.getByTestId("floating-menu-button");
77
+ expect(typeFilterButton).toBeTruthy();
78
+ fireEvent.click(typeFilterButton);
79
+ const floatingMenu = screen.getByTestId("floating-menu");
80
+ expect(floatingMenu).toBeTruthy();
81
+ const checkGroupFieldGroup = screen.getByTestId("check-group-field-group");
82
+ expect(checkGroupFieldGroup).toBeTruthy();
83
+ const checkFieldLabels = screen.getAllByTestId("check-field-label");
84
+ expect(checkFieldLabels).toHaveLength(3);
85
+ });
86
+
87
+ it("should check option on click", () => {
88
+ defaultProps.filters = [
89
+ {
90
+ name: "all",
91
+ value: "all",
92
+ title: "All content",
93
+ },
94
+ {
95
+ name: "unique",
96
+ value: "unique",
97
+ title: "Basic templates",
98
+ },
99
+ {
100
+ name: "structuredData",
101
+ value: "structuredData",
102
+ title: "Content types",
103
+ },
104
+ ];
105
+ defaultProps.pointer = "type";
106
+ const onChangeMock = jest.fn() as CalledWithMock<void, [pointer: string, filter: string]>;
107
+ defaultProps.filterItems = onChangeMock;
108
+
109
+ render(
110
+ <ThemeProvider theme={parseTheme(globalTheme)}>
111
+ <TypeFilter {...defaultProps} />
112
+ </ThemeProvider>
113
+ );
114
+
115
+ const typeFilterButton = screen.getByTestId("floating-menu-button");
116
+ expect(typeFilterButton).toBeTruthy();
117
+ fireEvent.click(typeFilterButton);
118
+ const floatingMenu = screen.getByTestId("floating-menu");
119
+ expect(floatingMenu).toBeTruthy();
120
+ const checkGroupFieldGroup = screen.getByTestId("check-group-field-group");
121
+ expect(checkGroupFieldGroup).toBeTruthy();
122
+ const checkFieldInputs = screen.getAllByTestId<HTMLInputElement>("check-field-input");
123
+ expect(checkFieldInputs).toHaveLength(3);
124
+ fireEvent.change(checkFieldInputs[1], { target: { checked: true, value: "unique" } });
125
+ expect(checkFieldInputs[1].checked).toBe(true);
126
+ });
127
+
128
+ it("should call filterItems action on change", async () => {
129
+ defaultProps.filters = [
130
+ {
131
+ name: "all",
132
+ value: "all",
133
+ title: "All content",
134
+ },
135
+ {
136
+ name: "unique",
137
+ value: "unique",
138
+ title: "Basic templates",
139
+ },
140
+ {
141
+ name: "structuredData",
142
+ value: "structuredData",
143
+ title: "Content types",
144
+ },
145
+ ];
146
+ defaultProps.pointer = "type";
147
+ const onChangeMock = jest.fn() as CalledWithMock<void, [pointer: string, filter: string]>;
148
+ defaultProps.filterItems = onChangeMock;
149
+
150
+ render(
151
+ <ThemeProvider theme={parseTheme(globalTheme)}>
152
+ <TypeFilter {...defaultProps} />
153
+ </ThemeProvider>
154
+ );
155
+
156
+ const typeFilterButton = screen.getByTestId("floating-menu-button");
157
+
158
+ expect(typeFilterButton).toBeTruthy();
159
+ fireEvent.click(typeFilterButton);
160
+ const checkFieldInputs = screen.queryAllByTestId("check-field-input");
161
+ fireEvent.click(checkFieldInputs[1]);
162
+ expect(onChangeMock).toHaveBeenCalledTimes(1);
163
+ expect(onChangeMock).toBeCalledWith("type", "unique");
164
+ });
165
+ });
@@ -1,6 +1,6 @@
1
1
  import * as React from "react";
2
2
  import { ThemeProvider } from "styled-components";
3
- import { parseTheme } from "@griddo/core";
3
+ import { parseTheme } from "@ax/helpers";
4
4
  import { mock } from "jest-mock-extended";
5
5
  import configureStore from "redux-mock-store";
6
6
 
@@ -101,7 +101,7 @@ describe("TableList", () => {
101
101
  });
102
102
 
103
103
  it("should display paginator when totalItems is greater than itemsPerPage", async () => {
104
- defaultProps.pagination = { currPage: 1, itemsPerPage: 50, setPage: setPage, totalItems: 60 }
104
+ defaultProps.pagination = { currPage: 1, itemsPerPage: 50, setPage: setPage, totalItems: 60 };
105
105
  defaultProps.hasFixedHeader = true;
106
106
  const store = mockStore(initialStore);
107
107
  const initialState = { ...initialStore, ...defaultProps };
@@ -1,11 +1,14 @@
1
1
  import * as React from "react";
2
- import Tabs, { ITabsProps } from "@ax/components/Tabs";
2
+
3
+ import "jest-styled-components";
3
4
  import { ThemeProvider } from "styled-components";
4
- import { parseTheme } from "@griddo/core";
5
- import globalTheme from "@ax/themes/theme.json";
6
- import { render, screen, cleanup, fireEvent } from "@testing-library/react";
7
5
  import { mock } from "jest-mock-extended";
8
- import "jest-styled-components";
6
+
7
+ import { render, screen, cleanup, fireEvent } from "@testing-library/react";
8
+
9
+ import { parseTheme } from "@ax/helpers";
10
+ import globalTheme from "@ax/themes/theme.json";
11
+ import Tabs, { ITabsProps } from "@ax/components/Tabs";
9
12
 
10
13
  afterEach(cleanup);
11
14
 
@@ -65,24 +68,6 @@ describe("Tabs component rendering", () => {
65
68
  expect(setSelectedTabAction).toBeCalled();
66
69
  });
67
70
 
68
- it("should set tab as active on click", async () => {
69
- defaultProps.tabs = ["tab1", "tab2"];
70
- defaultProps.active = "tab1";
71
- const setSelectedTabAction = jest.fn();
72
- defaultProps.setSelectedTab = setSelectedTabAction;
73
-
74
- render(
75
- <ThemeProvider theme={parseTheme(globalTheme)}>
76
- <Tabs {...defaultProps} />
77
- </ThemeProvider>
78
- );
79
- const tabs = screen.getAllByTestId("tab");
80
- fireEvent.click(tabs[1]);
81
- expect(setSelectedTabAction).toBeCalled();
82
- expect(tabs[0]).toHaveStyleRule("cursor", "initial");
83
- expect(tabs[1]).toHaveStyleRule("cursor", "pointer");
84
- });
85
-
86
71
  it("should render tabs row with icons if icons available", async () => {
87
72
  defaultProps.tabs = undefined;
88
73
  defaultProps.icons = [
@@ -139,9 +124,9 @@ describe("Tabs component rendering", () => {
139
124
  expect(tooltips[1].textContent).toBe("Preview mode");
140
125
  });
141
126
 
142
- it("should call set selected tab action on click icon tab", async () => {
127
+ it("should not display icon if doesn't exist", async () => {
143
128
  defaultProps.icons = [
144
- { name: "edit", text: "Edit mode" },
129
+ { name: "failed-icon", text: "Edit mode" },
145
130
  { name: "view", text: "Preview mode" },
146
131
  ];
147
132
  defaultProps.active = "edit";
@@ -153,12 +138,35 @@ describe("Tabs component rendering", () => {
153
138
  <Tabs {...defaultProps} />
154
139
  </ThemeProvider>
155
140
  );
156
- const tabs = screen.getAllByTestId("icon-tab");
141
+ const tooltips = screen.getAllByTestId("tooltip-component");
142
+ expect(tooltips[0]).toBeTruthy();
143
+ expect(tooltips[1]).toBeTruthy();
144
+ const tooltipIcons = screen.getAllByTestId("icon-component");
145
+ expect(tooltipIcons.length).toEqual(1);
146
+ });
147
+ });
148
+
149
+ describe("Tabs component events", () => {
150
+ it("should set tab as active on click", async () => {
151
+ defaultProps.tabs = ["tab1", "tab2"];
152
+ defaultProps.active = "tab1";
153
+ const setSelectedTabAction = jest.fn();
154
+ defaultProps.setSelectedTab = setSelectedTabAction;
155
+
156
+ render(
157
+ <ThemeProvider theme={parseTheme(globalTheme)}>
158
+ <Tabs {...defaultProps} />
159
+ </ThemeProvider>
160
+ );
161
+ const tabs = screen.getAllByTestId("tab");
157
162
  fireEvent.click(tabs[1]);
158
163
  expect(setSelectedTabAction).toBeCalled();
164
+ expect(tabs[0]).toHaveStyleRule("cursor", "initial");
165
+ expect(tabs[1]).toHaveStyleRule("cursor", "pointer");
159
166
  });
160
167
 
161
- it("should set icon tab as active on click", async () => {
168
+ it("should call set selected tab action on click icon tab", async () => {
169
+ defaultProps.tabs = undefined;
162
170
  defaultProps.icons = [
163
171
  { name: "edit", text: "Edit mode" },
164
172
  { name: "view", text: "Preview mode" },
@@ -175,13 +183,11 @@ describe("Tabs component rendering", () => {
175
183
  const tabs = screen.getAllByTestId("icon-tab");
176
184
  fireEvent.click(tabs[1]);
177
185
  expect(setSelectedTabAction).toBeCalled();
178
- expect(tabs[0]).toHaveStyleRule("cursor", "initial");
179
- expect(tabs[1]).toHaveStyleRule("cursor", "pointer");
180
186
  });
181
187
 
182
- it("should not display icon if doesn't exist", async () => {
188
+ it("should set icon tab as active on click", async () => {
183
189
  defaultProps.icons = [
184
- { name: "failed-icon", text: "Edit mode" },
190
+ { name: "edit", text: "Edit mode" },
185
191
  { name: "view", text: "Preview mode" },
186
192
  ];
187
193
  defaultProps.active = "edit";
@@ -193,10 +199,10 @@ describe("Tabs component rendering", () => {
193
199
  <Tabs {...defaultProps} />
194
200
  </ThemeProvider>
195
201
  );
196
- const tooltips = screen.getAllByTestId("tooltip-component");
197
- expect(tooltips[0]).toBeTruthy();
198
- expect(tooltips[1]).toBeTruthy();
199
- const tooltipIcons = screen.getAllByTestId("icon-component");
200
- expect(tooltipIcons.length).toEqual(1);
202
+ const tabs = screen.getAllByTestId("icon-tab");
203
+ fireEvent.click(tabs[1]);
204
+ expect(setSelectedTabAction).toBeCalled();
205
+ expect(tabs[0]).toHaveStyleRule("cursor", "initial");
206
+ expect(tabs[1]).toHaveStyleRule("cursor", "pointer");
201
207
  });
202
208
  });
@@ -4,7 +4,7 @@ import { ThemeProvider } from "styled-components";
4
4
  import { mock } from "jest-mock-extended";
5
5
 
6
6
  import { render, screen, cleanup, fireEvent } from "@testing-library/react";
7
- import { parseTheme } from "@griddo/core";
7
+ import { parseTheme } from "@ax/helpers";
8
8
 
9
9
  import globalTheme from "@ax/themes/theme.json";
10
10
  import Tag, { ITagProps } from "@ax/components/Tag";
@@ -100,7 +100,9 @@ describe("Tag component rendering", () => {
100
100
  const deleteIconWrapper = screen.getByTestId("delete-icon-wrapper");
101
101
  expect(deleteIconWrapper).toBeTruthy();
102
102
  });
103
+ });
103
104
 
105
+ describe("Tag component events", () => {
104
106
  it("should called deleteAction when click delete button", () => {
105
107
  defaultProps.type = "fixed";
106
108
  defaultProps.text = "Modules";
@@ -135,4 +137,4 @@ describe("Tag component rendering", () => {
135
137
  const styles = getComputedStyle(tagFixed);
136
138
  expect(styles.backgroundColor).toEqual("rgba(80, 87, 255, 0.16)");
137
139
  });
138
- });
140
+ });
@@ -3,7 +3,7 @@ import * as React from "react";
3
3
  import { ThemeProvider } from "styled-components";
4
4
  import { mock } from "jest-mock-extended";
5
5
  import { render, screen, cleanup, fireEvent } from "@testing-library/react";
6
- import { parseTheme } from "@griddo/core";
6
+ import { parseTheme } from "@ax/helpers";
7
7
 
8
8
  import Toast, { IToastProps } from "@ax/components/Toast";
9
9
  import globalTheme from "@ax/themes/theme.json";
@@ -54,7 +54,9 @@ describe("Toast component rendering", () => {
54
54
  const button = screen.queryByTestId("button-line-inverse");
55
55
  expect(button).toBeFalsy();
56
56
  });
57
+ });
57
58
 
59
+ describe("Toast component events", () => {
58
60
  it("should render the undo button when action", () => {
59
61
  defaultProps.message = "1 module copied to clipboard";
60
62
  defaultProps.action = jest.fn();
@@ -92,7 +94,7 @@ describe("Toast component rendering", () => {
92
94
  );
93
95
 
94
96
  const toastWrapper = screen.getByTestId("toast-wrapper");
95
- const closeButton = screen.getByTestId("iconActionComponent");
97
+ const closeButton = screen.getByTestId("icon-action-component");
96
98
  expect(closeButton).toBeTruthy();
97
99
  fireEvent.click(closeButton);
98
100
  expect(toastWrapper.classList.contains("close-animation")).toBeTruthy();
@@ -5,11 +5,11 @@ import * as S from "./style";
5
5
  const ErrorToast = (props: IProps) => {
6
6
  const { size } = props;
7
7
  return (
8
- <S.ErrorWrapper id="error" size={size}/>
8
+ <S.ErrorWrapper id="error" data-testid="error-wrapper" size={size}/>
9
9
  );
10
10
  };
11
11
 
12
- interface IProps {
12
+ export interface IProps {
13
13
  size?: string;
14
14
  }
15
15
 
@@ -5,7 +5,7 @@ import { getNullValue, getDefaultSchema, getDefaultTemplate } from "@ax/helpers"
5
5
 
6
6
  import { FieldsBehavior, HiddenField } from "@ax/components";
7
7
 
8
- const FieldContainer = (props: IProps) => {
8
+ const FieldContainer = (props: IFieldContainerProps) => {
9
9
  const { selectedContent, updateValue, field, goTo, objKey, lang } = props;
10
10
 
11
11
  const { type, key, title, hideable, slugTo } = field;
@@ -28,9 +28,9 @@ const FieldContainer = (props: IProps) => {
28
28
  };
29
29
 
30
30
  const hasMultipleOptions = field.whiteList && field.whiteList.length > 1;
31
-
32
31
  const nullValue = isContainer ? getNullValue(containerValue, hasMultipleOptions) : null;
33
32
  const hasNullValue = JSON.stringify(containerValue) === JSON.stringify(nullValue);
33
+
34
34
  const getField = () => <FieldsBehavior {...fieldProps} key={key} />;
35
35
 
36
36
  const getDefaultValue = () => {
@@ -56,7 +56,7 @@ const FieldContainer = (props: IProps) => {
56
56
 
57
57
  export default FieldContainer;
58
58
 
59
- interface IProps {
59
+ export interface IFieldContainerProps {
60
60
  key: string;
61
61
  field: any;
62
62
  selectedContent: any;
@@ -24,9 +24,9 @@ const CheckField = ({
24
24
 
25
25
  return (
26
26
  <S.Wrapper>
27
- <S.Label data-testid={"checkFieldLabel"} disabled={disabled}>
27
+ <S.Label data-testid="check-field-label" disabled={disabled}>
28
28
  {icon ? (
29
- <S.IconLabelWrapper data-testid={"checkFieldIconLabel"}>
29
+ <S.IconLabelWrapper data-testid="check-field-icon-label">
30
30
  <S.IconWrapper>
31
31
  <Icon name={icon} />
32
32
  </S.IconWrapper>
@@ -36,7 +36,7 @@ const CheckField = ({
36
36
  title
37
37
  )}
38
38
  <S.Input
39
- data-testid={"checkFieldInput"}
39
+ data-testid="check-field-input"
40
40
  type="checkbox"
41
41
  name={`${name}`}
42
42
  value={value || ""}
@@ -38,7 +38,7 @@ const CheckGroup = (props: ICheckGroupProps): JSX.Element => {
38
38
  const checks = options
39
39
  ? options.map((item: ICheckFieldProps) => (
40
40
  <CheckField
41
- data-testid="CheckGroupCheckfield"
41
+ data-testid="check-group-checkfield"
42
42
  key={item.name}
43
43
  onChange={handleChange}
44
44
  checked={valueArray.includes(item.name)}
@@ -52,7 +52,7 @@ const CheckGroup = (props: ICheckGroupProps): JSX.Element => {
52
52
  ))
53
53
  : "";
54
54
 
55
- return <S.FieldGroup data-testid="CheckGroupFieldgroup">{checks}</S.FieldGroup>;
55
+ return <S.FieldGroup data-testid="check-group-field-group">{checks}</S.FieldGroup>;
56
56
  };
57
57
 
58
58
  interface ICheckGroupProps {
@@ -16,7 +16,7 @@ const HeadingField = (props: IHeadingFieldProps): JSX.Element => {
16
16
  <>
17
17
  <TextField {...props} value={contentValue} onChange={handleChange} />
18
18
  {showAdvanced && (
19
- <S.AdvancedWrapper data-testid="textFieldAdvancedWrapper">
19
+ <S.AdvancedWrapper data-testid="text-field-advanced-wrapper">
20
20
  <FieldsBehavior fieldType="Select" options={options} value={value.tag} onChange={handleSelectChange} />
21
21
  </S.AdvancedWrapper>
22
22
  )}
@@ -47,7 +47,7 @@ const Select = (props: ISelectProps): JSX.Element => {
47
47
  const searchable = type === "inline" ? false : true;
48
48
 
49
49
  return (
50
- <div data-testid="selectComponent">
50
+ <div data-testid="select-component">
51
51
  <S.StyledSelect
52
52
  name={name}
53
53
  value={getObjectValue(value, optionValues)}
@@ -78,7 +78,7 @@ const TextField = (props: ITextFieldProps): JSX.Element => {
78
78
  const inputValue = !autoComplete ? state : value || "";
79
79
 
80
80
  return (
81
- <S.FieldWrapper data-testid="textFieldContainer" error={error} className={className}>
81
+ <S.FieldWrapper data-testid="text-field-container" error={error} className={className}>
82
82
  {prefix && <Prefix />}
83
83
  <S.Input
84
84
  data-testid="inputComponent"
@@ -104,12 +104,7 @@ const TextField = (props: ITextFieldProps): JSX.Element => {
104
104
  )}
105
105
  {hasButton && (
106
106
  <S.IconWrapper data-testid="iconWrapperComponent" readonly={readonly} error={error}>
107
- <IconAction
108
- icon={icon || ""}
109
- onClick={onClickIcon}
110
- disabled={disabled}
111
- size="s"
112
- />
107
+ <IconAction icon={icon || ""} onClick={onClickIcon} disabled={disabled} size="s" />
113
108
  </S.IconWrapper>
114
109
  )}
115
110
  </S.FieldWrapper>
@@ -80,7 +80,7 @@ const FieldsBehavior = (props: any): JSX.Element => {
80
80
 
81
81
  return (
82
82
  <S.Wrapper className={wrapperClass} showTitle={showTitle} id={objKey}>
83
- <S.Content error={errorField} data-testid="contentWrapper">
83
+ <S.Content error={errorField} data-testid="fields-behavior-wrapper">
84
84
  <Field
85
85
  {...props}
86
86
  showAdvanced={showAdvanced}
@@ -68,7 +68,7 @@ const FloatingMenu = (props: IProps) => {
68
68
  <Button />
69
69
  </S.ButtonWrapper>
70
70
  {isOpen && (
71
- <S.MenuWrapper isInAppBar={isInAppBar} ref={menuOptions} position={position} offset={offset}>
71
+ <S.MenuWrapper isInAppBar={isInAppBar} ref={menuOptions} position={position} offset={offset} data-testid="floating-menu-wrapper">
72
72
  <S.Menu>{children}</S.Menu>
73
73
  </S.MenuWrapper>
74
74
  )}
@@ -14,7 +14,7 @@ const IconAction = (props: IIconActionProps): JSX.Element => {
14
14
 
15
15
  return (
16
16
  <S.Button
17
- data-testid="iconActionComponent"
17
+ data-testid="icon-action-component"
18
18
  disabled={disabled}
19
19
  onClick={handleOnClick}
20
20
  size={size}
@@ -7,7 +7,7 @@ const ListItem = (props: ListItemProps): JSX.Element => {
7
7
  const { isSelected, children, onClick } = props;
8
8
 
9
9
  return (
10
- <S.StyledListItem isSelected={isSelected} onClick={onClick}>
10
+ <S.StyledListItem isSelected={isSelected} onClick={onClick} data-testid="list-item">
11
11
  {children}
12
12
  {isSelected && <Icon name="Done" size="16" />}
13
13
  </S.StyledListItem>
@@ -4,7 +4,7 @@ import { IconAction } from "@ax/components";
4
4
 
5
5
  import * as S from "./style";
6
6
 
7
- const Pagination = (props: IProps) => {
7
+ const Pagination = (props: IPaginationProps) => {
8
8
  const { itemsPerPage, totalItems, setPage, currPage, size } = props;
9
9
 
10
10
  const lastPage = Math.ceil(totalItems / itemsPerPage);
@@ -33,11 +33,11 @@ const Pagination = (props: IProps) => {
33
33
  setPage(nextPage);
34
34
  };
35
35
 
36
- const CurrentPage = size === "S" ? currPage : <S.Input type="text" value={currPage} onChange={_handleChange} />;
36
+ const CurrentPage = size === "S" ? currPage : <S.Input data-testid="pagination-text-input" type="text" value={currPage} onChange={_handleChange} />;
37
37
 
38
38
  return (
39
39
  <S.Wrapper data-testid="pagination-wrapper">
40
- <S.Literal size={size}>
40
+ <S.Literal size={size} data-testid="pagination-label">
41
41
  Page {CurrentPage} of {lastPage}
42
42
  </S.Literal>
43
43
  <IconAction icon="left-arrow" onClick={handlePrev} disabled={isFirstPage} />
@@ -46,7 +46,7 @@ const Pagination = (props: IProps) => {
46
46
  );
47
47
  };
48
48
 
49
- interface IProps {
49
+ export interface IPaginationProps {
50
50
  setPage?: any;
51
51
  itemsPerPage: number;
52
52
  totalItems: number;
@@ -4,13 +4,13 @@ import * as S from "./style";
4
4
 
5
5
  const SubNav = ({ children }: ISubNavProps): JSX.Element => {
6
6
  return (
7
- <S.Wrapper>
8
- <S.SubNav>{children}</S.SubNav>
7
+ <S.Wrapper data-testid="sub-nav-wrapper">
8
+ <S.SubNav data-testid="sub-nav">{children}</S.SubNav>
9
9
  </S.Wrapper>
10
10
  );
11
11
  };
12
12
 
13
- interface ISubNavProps {
13
+ export interface ISubNavProps {
14
14
  children: any;
15
15
  }
16
16
 
@@ -25,6 +25,4 @@ const SubNav = styled.div`
25
25
  }
26
26
  `;
27
27
 
28
- const Item = styled.article``;
29
-
30
- export { Wrapper, SubNav, Item };
28
+ export { Wrapper, SubNav };
@@ -2,9 +2,14 @@ import React from "react";
2
2
 
3
3
  import * as S from "./style";
4
4
 
5
- const TableCounter = (props: any) => {
5
+ const TableCounter = (props: ITableCounter) => {
6
6
  const { totalItems } = props;
7
- return (<S.ResultsCount>{`${totalItems} results`}</S.ResultsCount>)
7
+ const resultsLabel = totalItems === 1 ? "result" : "results";
8
+ return <S.ResultsCount data-testid="table-counter">{`${totalItems} ${resultsLabel}`}</S.ResultsCount>;
8
9
  };
9
10
 
11
+ export interface ITableCounter {
12
+ totalItems: number;
13
+ }
14
+
10
15
  export default TableCounter;
@@ -75,7 +75,7 @@ const CategoryFilter = (props: ICategoryFilterProps): JSX.Element => {
75
75
 
76
76
  return (
77
77
  <FloatingMenu Button={Header} position="left" closeOnSelect={false} isCheckGroup={true}>
78
- <ListTitle>Filter by Category</ListTitle>
78
+ <ListTitle data-testid="category-filter-title">Filter by Category</ListTitle>
79
79
  <S.ChecksWrapper>
80
80
  <CheckGroup options={options} value={selectedValue} onChange={setQuery} selectAllOption={selectAllOption} />
81
81
  </S.ChecksWrapper>
@@ -83,7 +83,7 @@ const CategoryFilter = (props: ICategoryFilterProps): JSX.Element => {
83
83
  );
84
84
  };
85
85
 
86
- interface ICategoryFilterProps {
86
+ export interface ICategoryFilterProps {
87
87
  filterItems(pointer: string, filter: string): void;
88
88
  value: string;
89
89
  structuredData: any;
@@ -19,18 +19,9 @@ const IconsWrapper = styled.div`
19
19
  }
20
20
  `;
21
21
 
22
- const InteractiveArrow = styled.div`
23
- display: flex;
24
- svg {
25
- path {
26
- fill: ${(p) => p.theme.color.interactive01};
27
- }
28
- }
29
- `;
30
-
31
22
  const ChecksWrapper = styled.div`
32
23
  padding: ${(p) => p.theme.spacing.xs} ${(p) => p.theme.spacing.s};
33
24
  overflow-y: auto;
34
25
  `;
35
26
 
36
- export { HeaderWrapper, IconsWrapper, InteractiveArrow, ChecksWrapper };
27
+ export { HeaderWrapper, IconsWrapper, ChecksWrapper };