@griddo/ax 1.71.0 → 1.72.0
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/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/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 +265 -0
- package/src/__tests__/components/TableFilters/NameFilter/NameFilter.test.tsx +197 -0
- package/src/__tests__/components/TableFilters/SiteFilter/SiteFilter.test.tsx +317 -0
- package/src/__tests__/components/TableFilters/StatusFilter/StatusFilter.test.tsx +197 -0
- package/src/__tests__/components/TableFilters/TranslationsFilter/TranslationsFilter.test.tsx +157 -0
- package/src/__tests__/components/TableFilters/TypeFilter/TypeFilter.test.tsx +164 -0
- package/src/__tests__/components/TableList/TableList.test.tsx +2 -2
- package/src/__tests__/components/Tabs/Tabs.test.tsx +36 -33
- package/src/__tests__/components/Tag/Tag.test.tsx +4 -2
- package/src/__tests__/components/Toast/Toast.test.tsx +4 -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/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,164 @@
|
|
|
1
|
+
import * as React from "react";
|
|
2
|
+
import { ThemeProvider } from "styled-components";
|
|
3
|
+
import { CalledWithMock, mock } from "jest-mock-extended";
|
|
4
|
+
|
|
5
|
+
import { render, screen, cleanup, fireEvent } from "@testing-library/react";
|
|
6
|
+
import TypeFilter, { ITypeFilterProps } from "@ax/components/TableFilters/TypeFilter";
|
|
7
|
+
import globalTheme from "@ax/themes/theme.json";
|
|
8
|
+
import { parseTheme } from "@ax/helpers";
|
|
9
|
+
|
|
10
|
+
afterEach(cleanup);
|
|
11
|
+
|
|
12
|
+
const defaultProps = mock<ITypeFilterProps>();
|
|
13
|
+
describe("TypeFilter component rendering", () => {
|
|
14
|
+
it("should render type filter", () => {
|
|
15
|
+
defaultProps.filters = [
|
|
16
|
+
{
|
|
17
|
+
name: "all",
|
|
18
|
+
value: "all",
|
|
19
|
+
title: "All content",
|
|
20
|
+
},
|
|
21
|
+
{
|
|
22
|
+
name: "unique",
|
|
23
|
+
value: "unique",
|
|
24
|
+
title: "Basic templates",
|
|
25
|
+
},
|
|
26
|
+
{
|
|
27
|
+
name: "structuredData",
|
|
28
|
+
value: "structuredData",
|
|
29
|
+
title: "Content types",
|
|
30
|
+
},
|
|
31
|
+
];
|
|
32
|
+
defaultProps.pointer = "type";
|
|
33
|
+
defaultProps.filterItems = jest.fn() as CalledWithMock<void, [pointer: string, filter: string]>;
|
|
34
|
+
|
|
35
|
+
render(
|
|
36
|
+
<ThemeProvider theme={parseTheme(globalTheme)}>
|
|
37
|
+
<TypeFilter {...defaultProps} />
|
|
38
|
+
</ThemeProvider>
|
|
39
|
+
);
|
|
40
|
+
|
|
41
|
+
const typeFilter = screen.getByTestId("floating-menu");
|
|
42
|
+
expect(typeFilter).toBeTruthy();
|
|
43
|
+
expect(typeFilter.textContent).toEqual("Types");
|
|
44
|
+
});
|
|
45
|
+
});
|
|
46
|
+
|
|
47
|
+
describe("TypeFilter events", () => {
|
|
48
|
+
it("should render check group on click", () => {
|
|
49
|
+
defaultProps.filters = [
|
|
50
|
+
{
|
|
51
|
+
name: "all",
|
|
52
|
+
value: "all",
|
|
53
|
+
title: "All content",
|
|
54
|
+
},
|
|
55
|
+
{
|
|
56
|
+
name: "unique",
|
|
57
|
+
value: "unique",
|
|
58
|
+
title: "Basic templates",
|
|
59
|
+
},
|
|
60
|
+
{
|
|
61
|
+
name: "structuredData",
|
|
62
|
+
value: "structuredData",
|
|
63
|
+
title: "Content types",
|
|
64
|
+
},
|
|
65
|
+
];
|
|
66
|
+
defaultProps.pointer = "type";
|
|
67
|
+
defaultProps.filterItems = jest.fn() as CalledWithMock<void, [pointer: string, filter: string]>;
|
|
68
|
+
|
|
69
|
+
render(
|
|
70
|
+
<ThemeProvider theme={parseTheme(globalTheme)}>
|
|
71
|
+
<TypeFilter {...defaultProps} />
|
|
72
|
+
</ThemeProvider>
|
|
73
|
+
);
|
|
74
|
+
|
|
75
|
+
const typeFilterButton = screen.getByTestId("floating-menu-button");
|
|
76
|
+
expect(typeFilterButton).toBeTruthy();
|
|
77
|
+
fireEvent.click(typeFilterButton);
|
|
78
|
+
const floatingMenu = screen.getByTestId("floating-menu");
|
|
79
|
+
expect(floatingMenu).toBeTruthy();
|
|
80
|
+
const checkGroupFieldGroup = screen.getByTestId("check-group-field-group");
|
|
81
|
+
expect(checkGroupFieldGroup).toBeTruthy();
|
|
82
|
+
const checkFieldLabels = screen.getAllByTestId("check-field-label");
|
|
83
|
+
expect(checkFieldLabels).toHaveLength(3);
|
|
84
|
+
});
|
|
85
|
+
|
|
86
|
+
it("should check option on click", () => {
|
|
87
|
+
defaultProps.filters = [
|
|
88
|
+
{
|
|
89
|
+
name: "all",
|
|
90
|
+
value: "all",
|
|
91
|
+
title: "All content",
|
|
92
|
+
},
|
|
93
|
+
{
|
|
94
|
+
name: "unique",
|
|
95
|
+
value: "unique",
|
|
96
|
+
title: "Basic templates",
|
|
97
|
+
},
|
|
98
|
+
{
|
|
99
|
+
name: "structuredData",
|
|
100
|
+
value: "structuredData",
|
|
101
|
+
title: "Content types",
|
|
102
|
+
},
|
|
103
|
+
];
|
|
104
|
+
defaultProps.pointer = "type";
|
|
105
|
+
const onChangeMock = jest.fn() as CalledWithMock<void, [pointer: string, filter: string]>;
|
|
106
|
+
defaultProps.filterItems = onChangeMock;
|
|
107
|
+
|
|
108
|
+
render(
|
|
109
|
+
<ThemeProvider theme={parseTheme(globalTheme)}>
|
|
110
|
+
<TypeFilter {...defaultProps} />
|
|
111
|
+
</ThemeProvider>
|
|
112
|
+
);
|
|
113
|
+
|
|
114
|
+
const typeFilterButton = screen.getByTestId("floating-menu-button");
|
|
115
|
+
expect(typeFilterButton).toBeTruthy();
|
|
116
|
+
fireEvent.click(typeFilterButton);
|
|
117
|
+
const floatingMenu = screen.getByTestId("floating-menu");
|
|
118
|
+
expect(floatingMenu).toBeTruthy();
|
|
119
|
+
const checkGroupFieldGroup = screen.getByTestId("check-group-field-group");
|
|
120
|
+
expect(checkGroupFieldGroup).toBeTruthy();
|
|
121
|
+
const checkFieldInputs = screen.getAllByTestId<HTMLInputElement>("check-field-input");
|
|
122
|
+
expect(checkFieldInputs).toHaveLength(3);
|
|
123
|
+
fireEvent.change(checkFieldInputs[1], { target: { checked: true, value: "unique" } });
|
|
124
|
+
expect(checkFieldInputs[1].checked).toBe(true);
|
|
125
|
+
});
|
|
126
|
+
|
|
127
|
+
it("should call filterItems action on change", async () => {
|
|
128
|
+
defaultProps.filters = [
|
|
129
|
+
{
|
|
130
|
+
name: "all",
|
|
131
|
+
value: "all",
|
|
132
|
+
title: "All content",
|
|
133
|
+
},
|
|
134
|
+
{
|
|
135
|
+
name: "unique",
|
|
136
|
+
value: "unique",
|
|
137
|
+
title: "Basic templates",
|
|
138
|
+
},
|
|
139
|
+
{
|
|
140
|
+
name: "structuredData",
|
|
141
|
+
value: "structuredData",
|
|
142
|
+
title: "Content types",
|
|
143
|
+
},
|
|
144
|
+
];
|
|
145
|
+
defaultProps.pointer = "type";
|
|
146
|
+
const onChangeMock = jest.fn() as CalledWithMock<void, [pointer: string, filter: string]>;
|
|
147
|
+
defaultProps.filterItems = onChangeMock;
|
|
148
|
+
|
|
149
|
+
render(
|
|
150
|
+
<ThemeProvider theme={parseTheme(globalTheme)}>
|
|
151
|
+
<TypeFilter {...defaultProps} />
|
|
152
|
+
</ThemeProvider>
|
|
153
|
+
);
|
|
154
|
+
|
|
155
|
+
const typeFilterButton = screen.getByTestId("floating-menu-button");
|
|
156
|
+
|
|
157
|
+
expect(typeFilterButton).toBeTruthy();
|
|
158
|
+
fireEvent.click(typeFilterButton);
|
|
159
|
+
const checkFieldInputs = screen.queryAllByTestId("check-field-input");
|
|
160
|
+
fireEvent.click(checkFieldInputs[1]);
|
|
161
|
+
expect(onChangeMock).toHaveBeenCalledTimes(1);
|
|
162
|
+
expect(onChangeMock).toBeCalledWith("type", "unique");
|
|
163
|
+
});
|
|
164
|
+
});
|
|
@@ -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,7 +1,7 @@
|
|
|
1
1
|
import * as React from "react";
|
|
2
2
|
import Tabs, { ITabsProps } from "@ax/components/Tabs";
|
|
3
3
|
import { ThemeProvider } from "styled-components";
|
|
4
|
-
import { parseTheme } from "@
|
|
4
|
+
import { parseTheme } from "@ax/helpers";
|
|
5
5
|
import globalTheme from "@ax/themes/theme.json";
|
|
6
6
|
import { render, screen, cleanup, fireEvent } from "@testing-library/react";
|
|
7
7
|
import { mock } from "jest-mock-extended";
|
|
@@ -65,24 +65,6 @@ describe("Tabs component rendering", () => {
|
|
|
65
65
|
expect(setSelectedTabAction).toBeCalled();
|
|
66
66
|
});
|
|
67
67
|
|
|
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
68
|
it("should render tabs row with icons if icons available", async () => {
|
|
87
69
|
defaultProps.tabs = undefined;
|
|
88
70
|
defaultProps.icons = [
|
|
@@ -139,9 +121,9 @@ describe("Tabs component rendering", () => {
|
|
|
139
121
|
expect(tooltips[1].textContent).toBe("Preview mode");
|
|
140
122
|
});
|
|
141
123
|
|
|
142
|
-
it("should
|
|
124
|
+
it("should not display icon if doesn't exist", async () => {
|
|
143
125
|
defaultProps.icons = [
|
|
144
|
-
{ name: "
|
|
126
|
+
{ name: "failed-icon", text: "Edit mode" },
|
|
145
127
|
{ name: "view", text: "Preview mode" },
|
|
146
128
|
];
|
|
147
129
|
defaultProps.active = "edit";
|
|
@@ -153,12 +135,35 @@ describe("Tabs component rendering", () => {
|
|
|
153
135
|
<Tabs {...defaultProps} />
|
|
154
136
|
</ThemeProvider>
|
|
155
137
|
);
|
|
156
|
-
const
|
|
138
|
+
const tooltips = screen.getAllByTestId("tooltip-component");
|
|
139
|
+
expect(tooltips[0]).toBeTruthy();
|
|
140
|
+
expect(tooltips[1]).toBeTruthy();
|
|
141
|
+
const tooltipIcons = screen.getAllByTestId("icon-component");
|
|
142
|
+
expect(tooltipIcons.length).toEqual(1);
|
|
143
|
+
});
|
|
144
|
+
});
|
|
145
|
+
|
|
146
|
+
describe("Tabs component events", () => {
|
|
147
|
+
it("should set tab as active on click", async () => {
|
|
148
|
+
defaultProps.tabs = ["tab1", "tab2"];
|
|
149
|
+
defaultProps.active = "tab1";
|
|
150
|
+
const setSelectedTabAction = jest.fn();
|
|
151
|
+
defaultProps.setSelectedTab = setSelectedTabAction;
|
|
152
|
+
|
|
153
|
+
render(
|
|
154
|
+
<ThemeProvider theme={parseTheme(globalTheme)}>
|
|
155
|
+
<Tabs {...defaultProps} />
|
|
156
|
+
</ThemeProvider>
|
|
157
|
+
);
|
|
158
|
+
const tabs = screen.getAllByTestId("tab");
|
|
157
159
|
fireEvent.click(tabs[1]);
|
|
158
160
|
expect(setSelectedTabAction).toBeCalled();
|
|
161
|
+
expect(tabs[0]).toHaveStyleRule("cursor", "initial");
|
|
162
|
+
expect(tabs[1]).toHaveStyleRule("cursor", "pointer");
|
|
159
163
|
});
|
|
160
164
|
|
|
161
|
-
it("should set
|
|
165
|
+
it("should call set selected tab action on click icon tab", async () => {
|
|
166
|
+
defaultProps.tabs = undefined;
|
|
162
167
|
defaultProps.icons = [
|
|
163
168
|
{ name: "edit", text: "Edit mode" },
|
|
164
169
|
{ name: "view", text: "Preview mode" },
|
|
@@ -175,13 +180,11 @@ describe("Tabs component rendering", () => {
|
|
|
175
180
|
const tabs = screen.getAllByTestId("icon-tab");
|
|
176
181
|
fireEvent.click(tabs[1]);
|
|
177
182
|
expect(setSelectedTabAction).toBeCalled();
|
|
178
|
-
expect(tabs[0]).toHaveStyleRule("cursor", "initial");
|
|
179
|
-
expect(tabs[1]).toHaveStyleRule("cursor", "pointer");
|
|
180
183
|
});
|
|
181
184
|
|
|
182
|
-
it("should
|
|
185
|
+
it("should set icon tab as active on click", async () => {
|
|
183
186
|
defaultProps.icons = [
|
|
184
|
-
{ name: "
|
|
187
|
+
{ name: "edit", text: "Edit mode" },
|
|
185
188
|
{ name: "view", text: "Preview mode" },
|
|
186
189
|
];
|
|
187
190
|
defaultProps.active = "edit";
|
|
@@ -193,10 +196,10 @@ describe("Tabs component rendering", () => {
|
|
|
193
196
|
<Tabs {...defaultProps} />
|
|
194
197
|
</ThemeProvider>
|
|
195
198
|
);
|
|
196
|
-
const
|
|
197
|
-
|
|
198
|
-
expect(
|
|
199
|
-
|
|
200
|
-
expect(
|
|
199
|
+
const tabs = screen.getAllByTestId("icon-tab");
|
|
200
|
+
fireEvent.click(tabs[1]);
|
|
201
|
+
expect(setSelectedTabAction).toBeCalled();
|
|
202
|
+
expect(tabs[0]).toHaveStyleRule("cursor", "initial");
|
|
203
|
+
expect(tabs[1]).toHaveStyleRule("cursor", "pointer");
|
|
201
204
|
});
|
|
202
|
-
});
|
|
205
|
+
});
|
|
@@ -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,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>
|
|
@@ -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 };
|
|
@@ -6,7 +6,6 @@ import * as S from "./style";
|
|
|
6
6
|
|
|
7
7
|
const CustomizeFilters = (props: ICustomizeFiltersProps): JSX.Element => {
|
|
8
8
|
const { columns, setColumns, value } = props;
|
|
9
|
-
|
|
10
9
|
const options = Object.keys(columns).map((col: string) => {
|
|
11
10
|
const disabled = value.length >= 5 && !value.includes(col);
|
|
12
11
|
return { name: col, title: columns[col].title, value: col, disabled };
|
|
@@ -31,7 +30,7 @@ const CustomizeFilters = (props: ICustomizeFiltersProps): JSX.Element => {
|
|
|
31
30
|
);
|
|
32
31
|
|
|
33
32
|
return (
|
|
34
|
-
<S.Wrapper>
|
|
33
|
+
<S.Wrapper data-testid="customize-filters-wrapper">
|
|
35
34
|
<FloatingMenu Button={Button} position="right" closeOnSelect={false}>
|
|
36
35
|
<ListTitle>Customize filters</ListTitle>
|
|
37
36
|
<S.Note>You can select up to five options</S.Note>
|
|
@@ -43,7 +42,7 @@ const CustomizeFilters = (props: ICustomizeFiltersProps): JSX.Element => {
|
|
|
43
42
|
);
|
|
44
43
|
};
|
|
45
44
|
|
|
46
|
-
interface ICustomizeFiltersProps {
|
|
45
|
+
export interface ICustomizeFiltersProps {
|
|
47
46
|
setColumns(newValue: any): void;
|
|
48
47
|
columns: Record<string, IColumn>;
|
|
49
48
|
value: string[];
|
|
@@ -4,7 +4,7 @@ import { Icon, FloatingMenu, ListTitle, ListItem } from "@ax/components";
|
|
|
4
4
|
|
|
5
5
|
import * as S from "./style";
|
|
6
6
|
|
|
7
|
-
const DateFilter = (props:
|
|
7
|
+
const DateFilter = (props: IDateFilterProps): JSX.Element => {
|
|
8
8
|
const { sortItems, sortedState } = props;
|
|
9
9
|
const { isAscending, sortedByDate } = sortedState;
|
|
10
10
|
const sortByModifiedDate = (isAscending: boolean) => sortItems("date", isAscending);
|
|
@@ -16,13 +16,13 @@ const DateFilter = (props: IStatusFilterProps): JSX.Element => {
|
|
|
16
16
|
isAscending ? <Icon name="FullArrowUp" size="16" /> : <Icon name="FullArrowDown" size="16" />;
|
|
17
17
|
|
|
18
18
|
const Header = () => (
|
|
19
|
-
<S.Date isActive={sortedByDate}>
|
|
19
|
+
<S.Date isActive={sortedByDate} data-testid="date-filter">
|
|
20
20
|
Date
|
|
21
21
|
<S.IconsWrapper>
|
|
22
22
|
{sortedByDate ? (
|
|
23
23
|
<SortedStateArrow />
|
|
24
24
|
) : (
|
|
25
|
-
<S.InteractiveArrow>
|
|
25
|
+
<S.InteractiveArrow data-testid="date-filter-interactive-arrow">
|
|
26
26
|
<Icon name="DownArrow" size="16" />
|
|
27
27
|
</S.InteractiveArrow>
|
|
28
28
|
)}
|
|
@@ -43,7 +43,7 @@ const DateFilter = (props: IStatusFilterProps): JSX.Element => {
|
|
|
43
43
|
);
|
|
44
44
|
};
|
|
45
45
|
|
|
46
|
-
interface
|
|
46
|
+
export interface IDateFilterProps {
|
|
47
47
|
sortedState: any;
|
|
48
48
|
sortItems(orderPointer: string, isAscendent: boolean): any;
|
|
49
49
|
}
|
|
@@ -104,7 +104,7 @@ const LiveFilter = (props: ILiveFilterProps): JSX.Element => {
|
|
|
104
104
|
);
|
|
105
105
|
};
|
|
106
106
|
|
|
107
|
-
interface ILiveFilterProps {
|
|
107
|
+
export interface ILiveFilterProps {
|
|
108
108
|
filterItems(pointer: string, filter: string): void;
|
|
109
109
|
value: string;
|
|
110
110
|
isStructuredData?: boolean;
|
|
@@ -19,15 +19,6 @@ 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} 0;
|
|
33
24
|
`;
|
|
@@ -35,4 +26,5 @@ const ChecksWrapper = styled.div`
|
|
|
35
26
|
const MenuWrapper = styled.div`
|
|
36
27
|
position: relative;
|
|
37
28
|
`;
|
|
38
|
-
|
|
29
|
+
|
|
30
|
+
export { LiveOptions, IconsWrapper, ChecksWrapper, MenuWrapper };
|