@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.
- package/package.json +2 -2
- package/src/Style/index.tsx +1 -1
- package/src/__tests__/components/ElementsTooltip/ElementsTooltip.test.tsx +1 -1
- package/src/__tests__/components/EmptyState/EmptyState.test.tsx +1 -1
- package/src/__tests__/components/ErrorToast/ErrorToast.test.tsx +56 -0
- package/src/__tests__/components/FieldContainer/FieldContainer.test.tsx +82 -0
- package/src/__tests__/components/Fields/AnalyticsField/AnalyticsField.test.tsx +1 -1
- package/src/__tests__/components/Fields/AnalyticsField/PageAnalytics/PageAnalytics.test.tsx +1 -1
- package/src/__tests__/components/Fields/AnalyticsField/StructuredDataAnalytics/StructuredDataAnalytics.test.tsx +1 -1
- package/src/__tests__/components/Fields/ArrayFieldGroup/ArrayFieldGroup.test.tsx +2 -2
- package/src/__tests__/components/Fields/AsyncCheckGroup/AsyncCheckGroup.test.tsx +3 -3
- package/src/__tests__/components/Fields/AsyncSelect/AsyncSelect.test.tsx +1 -1
- package/src/__tests__/components/Fields/CheckField/CheckField.test.tsx +6 -6
- package/src/__tests__/components/Fields/CheckGroup/CheckGroup.test.tsx +15 -15
- package/src/__tests__/components/Fields/ColorPicker/ColorPicker.test.tsx +6 -6
- package/src/__tests__/components/Fields/ComponentArray/ComponentArray.test.tsx +1 -1
- package/src/__tests__/components/Fields/ComponentArray/MixableComponentArray/MixableComponentArray.test.tsx +7 -7
- package/src/__tests__/components/Fields/ComponentArray/MixableComponentArray/PasteModuleButton/PasteModuleButton.test.tsx +9 -9
- package/src/__tests__/components/Fields/ComponentArray/SameComponentArray/SameComponentArray.test.tsx +5 -5
- package/src/__tests__/components/Fields/ComponentContainer/ComponentContainer.test.tsx +1 -1
- package/src/__tests__/components/Fields/ConditionalField/ConditionalField.test.tsx +1 -1
- package/src/__tests__/components/Fields/DateField/DateField.test.tsx +1 -1
- package/src/__tests__/components/Fields/FieldGroup/FieldGroup.test.tsx +1 -1
- package/src/__tests__/components/Fields/FieldsDivider/FieldsDivider.test.tsx +1 -1
- package/src/__tests__/components/Fields/FileField/FileField.test.tsx +3 -3
- package/src/__tests__/components/Fields/HeadingField/HeadingField.test.tsx +6 -6
- package/src/__tests__/components/Fields/HiddenField/HiddenField.test.tsx +1 -1
- package/src/__tests__/components/Fields/ImageField/ImageField.test.tsx +3 -3
- package/src/__tests__/components/Fields/MultiCheckSelect/MultiCheckSelect.test.tsx +1 -1
- package/src/__tests__/components/Fields/MultiCheckSelectGroup/MultiCheckSelectGroup.test.tsx +2 -2
- package/src/__tests__/components/Fields/NoteField/NoteField.test.tsx +1 -1
- package/src/__tests__/components/Fields/NumberField/NumberField.test.tsx +1 -1
- package/src/__tests__/components/Fields/RadioField/RadioField.test.tsx +1 -1
- package/src/__tests__/components/Fields/ReferenceField/ReferenceField.test.tsx +96 -8
- package/src/__tests__/components/Fields/RichText/RichText.test.tsx +1 -1
- package/src/__tests__/components/Fields/Select/Select.test.tsx +2 -2
- package/src/__tests__/components/Fields/SliderField/SliderField.test.tsx +1 -1
- package/src/__tests__/components/Fields/TagField/TagField.test.tsx +1 -1
- package/src/__tests__/components/Fields/TextArea/TextArea.test.tsx +1 -1
- package/src/__tests__/components/Fields/TextField/TextField.test.tsx +6 -6
- package/src/__tests__/components/Fields/TimeField/HourInput/HourInput.test.tsx +1 -1
- package/src/__tests__/components/Fields/TimeField/TimeField.test.tsx +1 -1
- package/src/__tests__/components/Fields/ToggleField/ToggleField.test.tsx +1 -1
- package/src/__tests__/components/Fields/Tooltip/Tooltip.test.tsx +3 -2
- package/src/__tests__/components/Fields/UniqueCheck/UniqueCheck.test.tsx +3 -3
- package/src/__tests__/components/Fields/UrlField/UrlField.test.tsx +4 -4
- package/src/__tests__/components/Fields/VisualUniqueSelection/ImageSelection/ImageSelection.test.tsx +1 -1
- package/src/__tests__/components/Fields/VisualUniqueSelection/ScrollableSelection/ScrollableSelection.test.tsx +3 -3
- package/src/__tests__/components/Fields/VisualUniqueSelection/VisualUniqueSelection.test.tsx +1 -1
- package/src/__tests__/components/Fields/Wysiwyg/Wysiwyg.test.tsx +1 -1
- package/src/__tests__/components/FieldsBehavior/FieldsBehavior.test.tsx +149 -0
- package/src/__tests__/components/Pagination/Pagination.test.tsx +243 -0
- package/src/__tests__/components/SubNav/SubNav.test.tsx +37 -0
- package/src/__tests__/components/TableCounter/TableCounter.test.tsx +51 -0
- package/src/__tests__/components/TableFilters/CategoryFilter/CategoryFilter.test.tsx +241 -0
- package/src/__tests__/components/TableFilters/CustomizeFilters/CustomizeFilters.test.tsx +131 -0
- package/src/__tests__/components/TableFilters/DateFilter/DateFilter.test.tsx +148 -0
- package/src/__tests__/components/TableFilters/LiveFilter/LiveFilter.test.tsx +266 -0
- package/src/__tests__/components/TableFilters/NameFilter/NameFilter.test.tsx +196 -0
- package/src/__tests__/components/TableFilters/SiteFilter/SiteFilter.test.tsx +318 -0
- package/src/__tests__/components/TableFilters/StatusFilter/StatusFilter.test.tsx +195 -0
- package/src/__tests__/components/TableFilters/TranslationsFilter/TranslationsFilter.test.tsx +157 -0
- package/src/__tests__/components/TableFilters/TypeFilter/TypeFilter.test.tsx +165 -0
- package/src/__tests__/components/TableList/TableList.test.tsx +2 -2
- package/src/__tests__/components/Tabs/Tabs.test.tsx +42 -36
- package/src/__tests__/components/Tag/Tag.test.tsx +4 -2
- package/src/__tests__/components/Toast/Toast.test.tsx +4 -2
- package/src/components/ErrorToast/index.tsx +2 -2
- package/src/components/FieldContainer/index.tsx +3 -3
- package/src/components/Fields/CheckField/index.tsx +3 -3
- package/src/components/Fields/CheckGroup/index.tsx +2 -2
- package/src/components/Fields/HeadingField/index.tsx +1 -1
- package/src/components/Fields/Select/index.tsx +1 -1
- package/src/components/Fields/TextField/index.tsx +2 -7
- package/src/components/FieldsBehavior/index.tsx +1 -1
- package/src/components/FloatingMenu/index.tsx +1 -1
- package/src/components/IconAction/index.tsx +1 -1
- package/src/components/Lists/index.tsx +1 -1
- package/src/components/Pagination/index.tsx +4 -4
- package/src/components/SubNav/index.tsx +3 -3
- package/src/components/SubNav/style.tsx +1 -3
- package/src/components/TableCounter/index.tsx +7 -2
- package/src/components/TableFilters/CategoryFilter/index.tsx +2 -2
- package/src/components/TableFilters/CategoryFilter/style.tsx +1 -10
- package/src/components/TableFilters/CustomizeFilters/index.tsx +2 -3
- package/src/components/TableFilters/DateFilter/index.tsx +4 -4
- package/src/components/TableFilters/LiveFilter/index.tsx +1 -1
- package/src/components/TableFilters/LiveFilter/style.tsx +2 -10
- package/src/components/TableFilters/NameFilter/index.tsx +4 -4
- package/src/components/TableFilters/SiteFilter/index.tsx +16 -13
- package/src/components/TableFilters/SiteFilter/style.tsx +1 -10
- package/src/components/TableFilters/StatusFilter/index.tsx +3 -3
- package/src/components/TableFilters/TranslationsFilter/index.tsx +4 -7
- package/src/components/TableFilters/TranslationsFilter/style.tsx +1 -10
- package/src/components/TableFilters/TypeFilter/index.tsx +2 -2
- package/src/components/TableFilters/TypeFilter/style.tsx +1 -10
- package/src/components/Tooltip/index.tsx +1 -1
- package/src/helpers/index.tsx +3 -0
- 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 "@
|
|
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
|
-
|
|
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
|
-
|
|
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
|
|
127
|
+
it("should not display icon if doesn't exist", async () => {
|
|
143
128
|
defaultProps.icons = [
|
|
144
|
-
{ name: "
|
|
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
|
|
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
|
|
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
|
|
188
|
+
it("should set icon tab as active on click", async () => {
|
|
183
189
|
defaultProps.icons = [
|
|
184
|
-
{ name: "
|
|
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
|
|
197
|
-
|
|
198
|
-
expect(
|
|
199
|
-
|
|
200
|
-
expect(
|
|
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 "@
|
|
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 "@
|
|
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("
|
|
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:
|
|
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
|
|
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=
|
|
27
|
+
<S.Label data-testid="check-field-label" disabled={disabled}>
|
|
28
28
|
{icon ? (
|
|
29
|
-
<S.IconLabelWrapper data-testid=
|
|
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=
|
|
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="
|
|
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="
|
|
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="
|
|
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="
|
|
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="
|
|
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="
|
|
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
|
)}
|
|
@@ -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:
|
|
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
|
|
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
|
|
|
@@ -2,9 +2,14 @@ import React from "react";
|
|
|
2
2
|
|
|
3
3
|
import * as S from "./style";
|
|
4
4
|
|
|
5
|
-
const TableCounter = (props:
|
|
5
|
+
const TableCounter = (props: ITableCounter) => {
|
|
6
6
|
const { totalItems } = props;
|
|
7
|
-
|
|
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,
|
|
27
|
+
export { HeaderWrapper, IconsWrapper, ChecksWrapper };
|