@dxc-technology/halstack-react 0.0.0-d238e47 → 0.0.0-d30020b
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/BackgroundColorContext.d.ts +10 -0
- package/BackgroundColorContext.js +1 -4
- package/ThemeContext.d.ts +15 -0
- package/ThemeContext.js +5 -8
- package/V3Select/V3Select.js +2 -2
- package/V3Textarea/V3Textarea.js +2 -2
- package/accordion/Accordion.d.ts +1 -1
- package/accordion/Accordion.js +11 -22
- package/accordion/Accordion.stories.tsx +307 -0
- package/accordion/types.d.ts +4 -8
- package/accordion-group/AccordionGroup.js +2 -2
- package/accordion-group/AccordionGroup.stories.tsx +225 -0
- package/accordion-group/types.d.ts +4 -8
- package/alert/Alert.js +2 -2
- package/badge/Badge.js +1 -1
- package/bleed/Bleed.d.ts +3 -0
- package/bleed/Bleed.js +84 -0
- package/bleed/Bleed.stories.tsx +342 -0
- package/bleed/types.d.ts +13 -0
- package/bleed/types.js +5 -0
- package/box/Box.js +2 -2
- package/button/Button.d.ts +1 -1
- package/button/Button.js +9 -17
- package/button/Button.stories.tsx +6 -8
- package/button/types.d.ts +3 -7
- package/card/Card.js +1 -1
- package/card/Card.stories.tsx +1 -1
- package/checkbox/Checkbox.js +2 -2
- package/checkbox/types.d.ts +1 -1
- package/chip/Chip.d.ts +4 -0
- package/chip/Chip.js +16 -76
- package/chip/Chip.stories.tsx +6 -8
- package/chip/types.d.ts +45 -0
- package/chip/types.js +5 -0
- package/common/variables.js +57 -23
- package/date/Date.js +1 -1
- package/date-input/DateInput.js +10 -13
- package/dialog/Dialog.js +4 -3
- package/dropdown/Dropdown.d.ts +1 -1
- package/dropdown/Dropdown.js +13 -35
- package/dropdown/Dropdown.stories.tsx +249 -0
- package/dropdown/types.d.ts +6 -15
- package/file-input/FileInput.d.ts +1 -1
- package/file-input/FileInput.js +160 -81
- package/file-input/FileInput.stories.tsx +507 -0
- package/file-input/FileItem.js +8 -6
- package/file-input/types.d.ts +32 -7
- package/footer/Footer.d.ts +1 -1
- package/footer/Footer.js +28 -36
- package/footer/{Footer.stories.jsx → Footer.stories.tsx} +1 -22
- package/footer/Icons.d.ts +2 -0
- package/footer/Icons.js +3 -3
- package/footer/types.d.ts +21 -17
- package/header/Header.js +2 -2
- package/header/Icons.d.ts +2 -0
- package/heading/Heading.js +1 -1
- package/heading/Heading.stories.tsx +3 -2
- package/input-text/InputText.js +2 -2
- package/inset/Inset.d.ts +3 -0
- package/inset/Inset.js +84 -0
- package/inset/Inset.stories.tsx +229 -0
- package/inset/types.d.ts +13 -0
- package/inset/types.js +5 -0
- package/layout/ApplicationLayout.d.ts +10 -0
- package/layout/ApplicationLayout.js +17 -21
- package/layout/ApplicationLayout.stories.tsx +171 -0
- package/layout/types.d.ts +57 -0
- package/layout/types.js +5 -0
- package/link/Link.js +8 -16
- package/link/Link.stories.tsx +6 -1
- package/link/types.d.ts +5 -9
- package/list/List.d.ts +4 -0
- package/list/List.js +47 -0
- package/list/List.stories.tsx +95 -0
- package/list/types.d.ts +7 -0
- package/list/types.js +5 -0
- package/main.d.ts +8 -3
- package/main.js +42 -2
- package/number-input/NumberInput.js +3 -6
- package/package.json +4 -2
- package/paginator/Paginator.js +2 -8
- package/password-input/PasswordInput.js +19 -18
- package/password-input/PasswordInput.stories.tsx +3 -3
- package/password-input/types.d.ts +13 -11
- package/progress-bar/ProgressBar.js +4 -4
- package/radio/Radio.js +2 -2
- package/radio-group/Radio.d.ts +4 -0
- package/radio-group/Radio.js +140 -0
- package/radio-group/RadioGroup.d.ts +4 -0
- package/radio-group/RadioGroup.js +273 -0
- package/radio-group/RadioGroup.stories.tsx +79 -0
- package/radio-group/RadioGroup.test.js +248 -0
- package/radio-group/types.d.ts +36 -0
- package/radio-group/types.js +5 -0
- package/resultsetTable/ResultsetTable.d.ts +1 -1
- package/resultsetTable/ResultsetTable.js +9 -4
- package/resultsetTable/ResultsetTable.stories.tsx +275 -0
- package/resultsetTable/types.d.ts +6 -2
- package/row/Row.d.ts +3 -0
- package/row/Row.js +127 -0
- package/row/Row.stories.tsx +237 -0
- package/row/types.d.ts +10 -0
- package/row/types.js +5 -0
- package/select/Select.d.ts +4 -0
- package/select/Select.js +20 -22
- package/select/types.d.ts +170 -0
- package/select/types.js +5 -0
- package/sidenav/Sidenav.js +2 -2
- package/sidenav/Sidenav.stories.tsx +18 -1
- package/slider/Slider.js +2 -2
- package/spinner/Spinner.js +2 -2
- package/spinner/Spinner.stories.jsx +1 -0
- package/stack/Stack.d.ts +3 -0
- package/stack/Stack.js +97 -0
- package/stack/Stack.stories.tsx +164 -0
- package/stack/types.d.ts +9 -0
- package/stack/types.js +5 -0
- package/switch/Switch.js +2 -2
- package/switch/Switch.stories.tsx +1 -1
- package/table/Table.js +2 -2
- package/table/Table.stories.jsx +2 -1
- package/tabs/Tabs.js +8 -8
- package/tabs/Tabs.stories.tsx +120 -0
- package/tabs/types.d.ts +23 -15
- package/tag/Tag.d.ts +1 -1
- package/tag/Tag.js +7 -12
- package/tag/Tag.stories.tsx +15 -22
- package/tag/types.d.ts +23 -14
- package/text/Text.d.ts +7 -0
- package/text/Text.js +30 -0
- package/text/Text.stories.tsx +19 -0
- package/text-input/TextInput.js +50 -41
- package/text-input/TextInput.stories.tsx +456 -0
- package/text-input/types.d.ts +14 -12
- package/textarea/Textarea.d.ts +4 -0
- package/textarea/Textarea.js +27 -60
- package/textarea/Textarea.stories.jsx +4 -3
- package/textarea/types.d.ts +130 -0
- package/textarea/types.js +5 -0
- package/toggle/Toggle.js +1 -1
- package/toggle-group/ToggleGroup.d.ts +4 -0
- package/toggle-group/ToggleGroup.js +16 -45
- package/toggle-group/ToggleGroup.stories.tsx +23 -28
- package/toggle-group/types.d.ts +97 -0
- package/toggle-group/types.js +5 -0
- package/upload/buttons-upload/ButtonsUpload.js +2 -2
- package/upload/dragAndDropArea/DragAndDropArea.js +2 -2
- package/upload/file-upload/FileToUpload.js +1 -1
- package/upload/files-upload/FilesToUpload.js +1 -1
- package/upload/transaction/Transaction.js +2 -2
- package/upload/transactions/Transactions.js +1 -1
- package/useTheme.d.ts +2 -0
- package/useTheme.js +1 -1
- package/wizard/Wizard.js +59 -9
- package/wizard/{Wizard.stories.jsx → Wizard.stories.tsx} +0 -0
- package/wizard/types.d.ts +3 -7
- package/chip/index.d.ts +0 -22
- package/select/index.d.ts +0 -131
- package/textarea/index.d.ts +0 -117
- package/toggle-group/index.d.ts +0 -21
- package/wizard/Icons.js +0 -65
|
@@ -0,0 +1,248 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
+
|
|
5
|
+
var _react = _interopRequireDefault(require("react"));
|
|
6
|
+
|
|
7
|
+
var _RadioGroup = _interopRequireDefault(require("./RadioGroup"));
|
|
8
|
+
|
|
9
|
+
var _react2 = require("@testing-library/react");
|
|
10
|
+
|
|
11
|
+
var _userEvent = _interopRequireDefault(require("@testing-library/user-event"));
|
|
12
|
+
|
|
13
|
+
var single_options = [{
|
|
14
|
+
label: "Option 01",
|
|
15
|
+
value: "1"
|
|
16
|
+
}, {
|
|
17
|
+
label: "Option 02",
|
|
18
|
+
value: "2"
|
|
19
|
+
}, {
|
|
20
|
+
label: "Option 03",
|
|
21
|
+
value: "3"
|
|
22
|
+
}, {
|
|
23
|
+
label: "Option 04",
|
|
24
|
+
value: "4"
|
|
25
|
+
}, {
|
|
26
|
+
label: "Option 05",
|
|
27
|
+
value: "5"
|
|
28
|
+
}, {
|
|
29
|
+
label: "Option 06",
|
|
30
|
+
value: "6"
|
|
31
|
+
}, {
|
|
32
|
+
label: "Option 07",
|
|
33
|
+
value: "7"
|
|
34
|
+
}, {
|
|
35
|
+
label: "Option 08",
|
|
36
|
+
value: "8"
|
|
37
|
+
}, {
|
|
38
|
+
label: "Option 09",
|
|
39
|
+
value: "9"
|
|
40
|
+
}, {
|
|
41
|
+
label: "Option 10",
|
|
42
|
+
value: "10"
|
|
43
|
+
}];
|
|
44
|
+
describe("Radio Group component tests", function () {
|
|
45
|
+
test("Controlled - Not optional constraint - undefined", function () {
|
|
46
|
+
var onChange = jest.fn();
|
|
47
|
+
var onBlur = jest.fn();
|
|
48
|
+
|
|
49
|
+
var _render = (0, _react2.render)( /*#__PURE__*/_react["default"].createElement(_RadioGroup["default"], {
|
|
50
|
+
label: "test-select-label",
|
|
51
|
+
options: single_options,
|
|
52
|
+
onChange: onChange,
|
|
53
|
+
onBlur: onBlur
|
|
54
|
+
})),
|
|
55
|
+
getByRole = _render.getByRole,
|
|
56
|
+
getAllByRole = _render.getAllByRole;
|
|
57
|
+
|
|
58
|
+
var radioGroup = getByRole("radiogroup");
|
|
59
|
+
expect(radioGroup.getAttribute("aria-required")).toBe("true");
|
|
60
|
+
|
|
61
|
+
_react2.fireEvent.focus(radioGroup);
|
|
62
|
+
|
|
63
|
+
_react2.fireEvent.blur(radioGroup);
|
|
64
|
+
|
|
65
|
+
expect(onBlur).toHaveBeenCalled();
|
|
66
|
+
expect(onBlur).toHaveBeenCalledWith({
|
|
67
|
+
error: "This field is required. Please, choose an option."
|
|
68
|
+
});
|
|
69
|
+
|
|
70
|
+
_userEvent["default"].click(radioGroup);
|
|
71
|
+
|
|
72
|
+
_userEvent["default"].click(getAllByRole("radio")[0]);
|
|
73
|
+
|
|
74
|
+
expect(onChange).toHaveBeenCalled();
|
|
75
|
+
expect(onChange).toHaveBeenCalledWith("1");
|
|
76
|
+
|
|
77
|
+
_react2.fireEvent.focus(radioGroup);
|
|
78
|
+
|
|
79
|
+
_react2.fireEvent.blur(radioGroup);
|
|
80
|
+
|
|
81
|
+
expect(onBlur).toHaveBeenCalled();
|
|
82
|
+
expect(onBlur).toHaveBeenCalledWith({
|
|
83
|
+
value: "1"
|
|
84
|
+
});
|
|
85
|
+
});
|
|
86
|
+
test("Controlled - Not optional constraint - empty string", function () {
|
|
87
|
+
var onChange = jest.fn();
|
|
88
|
+
var onBlur = jest.fn();
|
|
89
|
+
|
|
90
|
+
var _render2 = (0, _react2.render)( /*#__PURE__*/_react["default"].createElement(_RadioGroup["default"], {
|
|
91
|
+
label: "test-select-label",
|
|
92
|
+
value: "",
|
|
93
|
+
options: single_options,
|
|
94
|
+
onChange: onChange,
|
|
95
|
+
onBlur: onBlur
|
|
96
|
+
})),
|
|
97
|
+
getByRole = _render2.getByRole,
|
|
98
|
+
getAllByRole = _render2.getAllByRole;
|
|
99
|
+
|
|
100
|
+
var radioGroup = getByRole("radiogroup");
|
|
101
|
+
expect(radioGroup.getAttribute("aria-required")).toBe("true");
|
|
102
|
+
|
|
103
|
+
_react2.fireEvent.focus(radioGroup);
|
|
104
|
+
|
|
105
|
+
_react2.fireEvent.blur(radioGroup);
|
|
106
|
+
|
|
107
|
+
expect(onBlur).toHaveBeenCalled();
|
|
108
|
+
expect(onBlur).toHaveBeenCalledWith({
|
|
109
|
+
value: "",
|
|
110
|
+
error: "This field is required. Please, choose an option."
|
|
111
|
+
});
|
|
112
|
+
|
|
113
|
+
_userEvent["default"].click(getAllByRole("radio")[0]);
|
|
114
|
+
|
|
115
|
+
expect(onChange).toHaveBeenCalled();
|
|
116
|
+
expect(onChange).toHaveBeenCalledWith("1");
|
|
117
|
+
});
|
|
118
|
+
test("Controlled - Optional constraint", function () {
|
|
119
|
+
var onChange = jest.fn();
|
|
120
|
+
var onBlur = jest.fn();
|
|
121
|
+
|
|
122
|
+
var _render3 = (0, _react2.render)( /*#__PURE__*/_react["default"].createElement(_RadioGroup["default"], {
|
|
123
|
+
label: "test-radio-group-label",
|
|
124
|
+
helperText: "test-radio-group-helper-text",
|
|
125
|
+
options: single_options,
|
|
126
|
+
onChange: onChange,
|
|
127
|
+
onBlur: onBlur,
|
|
128
|
+
optional: true
|
|
129
|
+
})),
|
|
130
|
+
getByRole = _render3.getByRole;
|
|
131
|
+
|
|
132
|
+
var radioGroup = getByRole("radiogroup");
|
|
133
|
+
expect(radioGroup.getAttribute("aria-required")).toBe("false");
|
|
134
|
+
|
|
135
|
+
_react2.fireEvent.focus(radioGroup);
|
|
136
|
+
|
|
137
|
+
_react2.fireEvent.blur(radioGroup);
|
|
138
|
+
|
|
139
|
+
expect(onBlur).toHaveBeenCalled();
|
|
140
|
+
expect(onBlur).toHaveBeenCalledWith({});
|
|
141
|
+
expect(radioGroup.getAttribute("aria-invalid")).toBe("false");
|
|
142
|
+
});
|
|
143
|
+
test("Select an option - Click on radio input label", function () {
|
|
144
|
+
var onChange = jest.fn();
|
|
145
|
+
|
|
146
|
+
var _render4 = (0, _react2.render)( /*#__PURE__*/_react["default"].createElement(_RadioGroup["default"], {
|
|
147
|
+
label: "test-radio-group-label",
|
|
148
|
+
helperText: "test-radio-group-helper-text",
|
|
149
|
+
options: single_options,
|
|
150
|
+
onChange: onChange
|
|
151
|
+
})),
|
|
152
|
+
getByText = _render4.getByText,
|
|
153
|
+
getAllByRole = _render4.getAllByRole;
|
|
154
|
+
|
|
155
|
+
var radio = getByText("Option 10");
|
|
156
|
+
|
|
157
|
+
_userEvent["default"].click(radio);
|
|
158
|
+
|
|
159
|
+
expect(onChange).toHaveBeenCalled();
|
|
160
|
+
expect(onChange).toHaveBeenCalledWith("10");
|
|
161
|
+
expect(getAllByRole("radio")[9].getAttribute("aria-checked")).toBe("true");
|
|
162
|
+
});
|
|
163
|
+
test("Select an option - Click on radio input", function () {
|
|
164
|
+
var onChange = jest.fn();
|
|
165
|
+
|
|
166
|
+
var _render5 = (0, _react2.render)( /*#__PURE__*/_react["default"].createElement(_RadioGroup["default"], {
|
|
167
|
+
label: "test-radio-group-label",
|
|
168
|
+
helperText: "test-radio-group-helper-text",
|
|
169
|
+
options: single_options,
|
|
170
|
+
onChange: onChange
|
|
171
|
+
})),
|
|
172
|
+
getAllByRole = _render5.getAllByRole;
|
|
173
|
+
|
|
174
|
+
var radio = getAllByRole("radio")[6];
|
|
175
|
+
|
|
176
|
+
_userEvent["default"].click(radio);
|
|
177
|
+
|
|
178
|
+
expect(onChange).toHaveBeenCalled();
|
|
179
|
+
expect(onChange).toHaveBeenCalledWith("7");
|
|
180
|
+
expect(radio.getAttribute("aria-checked")).toBe("true");
|
|
181
|
+
});
|
|
182
|
+
test("Select an option - Tab and Enter key", function () {
|
|
183
|
+
var onChange = jest.fn();
|
|
184
|
+
|
|
185
|
+
var _render6 = (0, _react2.render)( /*#__PURE__*/_react["default"].createElement(_RadioGroup["default"], {
|
|
186
|
+
label: "test-radio-group-label",
|
|
187
|
+
helperText: "test-radio-group-helper-text",
|
|
188
|
+
options: single_options,
|
|
189
|
+
onChange: onChange
|
|
190
|
+
})),
|
|
191
|
+
getByRole = _render6.getByRole,
|
|
192
|
+
getAllByRole = _render6.getAllByRole;
|
|
193
|
+
|
|
194
|
+
var radioGroup = getByRole("radiogroup");
|
|
195
|
+
var radio = getAllByRole("radio")[0];
|
|
196
|
+
|
|
197
|
+
_react2.fireEvent.keyDown(radioGroup, {
|
|
198
|
+
key: "Tab",
|
|
199
|
+
code: "Tab",
|
|
200
|
+
keyCode: 9,
|
|
201
|
+
charCode: 9
|
|
202
|
+
});
|
|
203
|
+
|
|
204
|
+
_react2.fireEvent.keyDown(radioGroup, {
|
|
205
|
+
key: "Enter",
|
|
206
|
+
code: "Enter",
|
|
207
|
+
keyCode: 13,
|
|
208
|
+
charCode: 13
|
|
209
|
+
});
|
|
210
|
+
|
|
211
|
+
expect(onChange).toHaveBeenCalled();
|
|
212
|
+
expect(onChange).toHaveBeenCalledWith("1");
|
|
213
|
+
expect(radio.getAttribute("aria-checked")).toBe("true");
|
|
214
|
+
});
|
|
215
|
+
test("Select an option - Tab and Space key", function () {
|
|
216
|
+
var onChange = jest.fn();
|
|
217
|
+
|
|
218
|
+
var _render7 = (0, _react2.render)( /*#__PURE__*/_react["default"].createElement(_RadioGroup["default"], {
|
|
219
|
+
label: "test-radio-group-label",
|
|
220
|
+
helperText: "test-radio-group-helper-text",
|
|
221
|
+
options: single_options,
|
|
222
|
+
onChange: onChange
|
|
223
|
+
})),
|
|
224
|
+
getByRole = _render7.getByRole,
|
|
225
|
+
getAllByRole = _render7.getAllByRole;
|
|
226
|
+
|
|
227
|
+
var radioGroup = getByRole("radiogroup");
|
|
228
|
+
var radio = getAllByRole("radio")[0];
|
|
229
|
+
|
|
230
|
+
_react2.fireEvent.keyDown(radioGroup, {
|
|
231
|
+
key: "Tab",
|
|
232
|
+
code: "Tab",
|
|
233
|
+
keyCode: 9,
|
|
234
|
+
charCode: 9
|
|
235
|
+
});
|
|
236
|
+
|
|
237
|
+
_react2.fireEvent.keyDown(radioGroup, {
|
|
238
|
+
key: "Space",
|
|
239
|
+
code: "Space",
|
|
240
|
+
keyCode: 32,
|
|
241
|
+
charCode: 32
|
|
242
|
+
});
|
|
243
|
+
|
|
244
|
+
expect(onChange).toHaveBeenCalled();
|
|
245
|
+
expect(onChange).toHaveBeenCalledWith("1");
|
|
246
|
+
expect(radio.getAttribute("aria-checked")).toBe("true");
|
|
247
|
+
});
|
|
248
|
+
});
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
export declare type Option = {
|
|
2
|
+
value: string;
|
|
3
|
+
label: string;
|
|
4
|
+
disabled?: boolean;
|
|
5
|
+
};
|
|
6
|
+
declare type RadioGroupProps = {
|
|
7
|
+
label: string;
|
|
8
|
+
name?: string;
|
|
9
|
+
helperText?: string;
|
|
10
|
+
options: Option[];
|
|
11
|
+
disabled?: boolean;
|
|
12
|
+
optional?: boolean;
|
|
13
|
+
optionalItemLabel?: string;
|
|
14
|
+
readonly?: boolean;
|
|
15
|
+
stacking?: "row" | "column";
|
|
16
|
+
defaultValue?: string;
|
|
17
|
+
value?: string;
|
|
18
|
+
onChange?: (value?: string) => void;
|
|
19
|
+
onBlur?: (val: {
|
|
20
|
+
value?: string;
|
|
21
|
+
error?: string;
|
|
22
|
+
}) => void;
|
|
23
|
+
error?: string;
|
|
24
|
+
};
|
|
25
|
+
export declare type RefType = HTMLDivElement;
|
|
26
|
+
export declare type RadioProps = {
|
|
27
|
+
option: Option;
|
|
28
|
+
currentValue?: string;
|
|
29
|
+
onClick: () => void;
|
|
30
|
+
onFocus: () => void;
|
|
31
|
+
error?: string;
|
|
32
|
+
disabled: boolean;
|
|
33
|
+
focused: boolean;
|
|
34
|
+
readonly: boolean;
|
|
35
|
+
};
|
|
36
|
+
export default RadioGroupProps;
|
|
@@ -1,4 +1,4 @@
|
|
|
1
1
|
/// <reference types="react" />
|
|
2
2
|
import ResultsetTablePropsType from "./types";
|
|
3
|
-
declare const DxcResultsetTable: ({ columns, rows, itemsPerPage, itemsPerPageOptions, itemsPerPageFunction, margin, tabIndex, }: ResultsetTablePropsType) => JSX.Element;
|
|
3
|
+
declare const DxcResultsetTable: ({ columns, rows, showGoToPage, itemsPerPage, itemsPerPageOptions, itemsPerPageFunction, margin, tabIndex, }: ResultsetTablePropsType) => JSX.Element;
|
|
4
4
|
export default DxcResultsetTable;
|
|
@@ -25,7 +25,7 @@ var _Table = _interopRequireDefault(require("../table/Table"));
|
|
|
25
25
|
|
|
26
26
|
var _Paginator = _interopRequireDefault(require("../paginator/Paginator"));
|
|
27
27
|
|
|
28
|
-
var _useTheme = _interopRequireDefault(require("../useTheme
|
|
28
|
+
var _useTheme = _interopRequireDefault(require("../useTheme"));
|
|
29
29
|
|
|
30
30
|
var _templateObject, _templateObject2, _templateObject3, _templateObject4, _templateObject5, _templateObject6, _templateObject7, _templateObject8, _templateObject9;
|
|
31
31
|
|
|
@@ -113,6 +113,8 @@ var BothArrows = function BothArrows() {
|
|
|
113
113
|
var DxcResultsetTable = function DxcResultsetTable(_ref) {
|
|
114
114
|
var columns = _ref.columns,
|
|
115
115
|
rows = _ref.rows,
|
|
116
|
+
_ref$showGoToPage = _ref.showGoToPage,
|
|
117
|
+
showGoToPage = _ref$showGoToPage === void 0 ? true : _ref$showGoToPage,
|
|
116
118
|
_ref$itemsPerPage = _ref.itemsPerPage,
|
|
117
119
|
itemsPerPage = _ref$itemsPerPage === void 0 ? 5 : _ref$itemsPerPage,
|
|
118
120
|
itemsPerPageOptions = _ref.itemsPerPageOptions,
|
|
@@ -183,7 +185,8 @@ var DxcResultsetTable = function DxcResultsetTable(_ref) {
|
|
|
183
185
|
onClick: function onClick() {
|
|
184
186
|
return column.isSortable && changeSorting(index);
|
|
185
187
|
},
|
|
186
|
-
tabIndex: column.isSortable ? tabIndex : -1
|
|
188
|
+
tabIndex: column.isSortable ? tabIndex : -1,
|
|
189
|
+
isSortable: column.isSortable
|
|
187
190
|
}, /*#__PURE__*/_react["default"].createElement(TitleDiv, {
|
|
188
191
|
isSortable: column.isSortable
|
|
189
192
|
}, column.displayValue), column.isSortable && /*#__PURE__*/_react["default"].createElement(SortIcon, null, getIconForSortableColumn(index))));
|
|
@@ -201,7 +204,7 @@ var DxcResultsetTable = function DxcResultsetTable(_ref) {
|
|
|
201
204
|
itemsPerPageOptions: itemsPerPageOptions,
|
|
202
205
|
itemsPerPageFunction: itemsPerPageFunction,
|
|
203
206
|
currentPage: page,
|
|
204
|
-
showGoToPage:
|
|
207
|
+
showGoToPage: showGoToPage,
|
|
205
208
|
onPageChange: goToPage,
|
|
206
209
|
tabIndex: tabIndex
|
|
207
210
|
}))));
|
|
@@ -225,8 +228,10 @@ var TitleDiv = _styledComponents["default"].div(_templateObject5 || (_templateOb
|
|
|
225
228
|
|
|
226
229
|
var TableHeader = _styledComponents["default"].th(_templateObject6 || (_templateObject6 = (0, _taggedTemplateLiteral2["default"])([""])));
|
|
227
230
|
|
|
228
|
-
var HeaderContainer = _styledComponents["default"].div(_templateObject7 || (_templateObject7 = (0, _taggedTemplateLiteral2["default"])(["\n display: flex;\n align-items: center;\n justify-content: ", ";\n width:
|
|
231
|
+
var HeaderContainer = _styledComponents["default"].div(_templateObject7 || (_templateObject7 = (0, _taggedTemplateLiteral2["default"])(["\n display: flex;\n align-items: center;\n justify-content: ", ";\n width: fit-content;\n :focus {\n ", "\n }\n"])), function (props) {
|
|
229
232
|
return props.theme.headerTextAlign === "center" ? "center" : props.theme.headerTextAlign === "right" ? "flex-end" : "flex-start";
|
|
233
|
+
}, function (props) {
|
|
234
|
+
return props.isSortable && "outline: #0095ff solid 2px; \n outline-offset: 4px;";
|
|
230
235
|
});
|
|
231
236
|
|
|
232
237
|
var HeaderRow = _styledComponents["default"].thead(_templateObject8 || (_templateObject8 = (0, _taggedTemplateLiteral2["default"])(["\n height: 60px;\n"])));
|
|
@@ -0,0 +1,275 @@
|
|
|
1
|
+
import React from "react";
|
|
2
|
+
import DxcResultsetTable from "./ResultsetTable";
|
|
3
|
+
import DxcButton from "../button/Button";
|
|
4
|
+
import Title from "../../.storybook/components/Title";
|
|
5
|
+
import ExampleContainer from "../../.storybook/components/ExampleContainer";
|
|
6
|
+
import { userEvent, within } from "@storybook/testing-library";
|
|
7
|
+
|
|
8
|
+
export default {
|
|
9
|
+
title: "Resultset Table",
|
|
10
|
+
component: DxcResultsetTable,
|
|
11
|
+
};
|
|
12
|
+
|
|
13
|
+
const deleteIcon = (
|
|
14
|
+
<svg xmlns="http://www.w3.org/2000/svg" height="24" viewBox="0 0 24 24" width="24">
|
|
15
|
+
<path d="M6 19c0 1.1.9 2 2 2h8c1.1 0 2-.9 2-2V7H6v12zM19 4h-3.5l-1-1h-5l-1 1H5v2h14V4z" />
|
|
16
|
+
<path d="M0 0h24v24H0z" fill="none" />
|
|
17
|
+
</svg>
|
|
18
|
+
);
|
|
19
|
+
|
|
20
|
+
const columns = [{ displayValue: "Id" }, { displayValue: "Name" }, { displayValue: "City" }];
|
|
21
|
+
|
|
22
|
+
const rows = [
|
|
23
|
+
[{ displayValue: "001" }, { displayValue: "Peter" }, { displayValue: "Miami" }],
|
|
24
|
+
[{ displayValue: "002" }, { displayValue: "Louis" }, { displayValue: "London" }],
|
|
25
|
+
[{ displayValue: "003" }, { displayValue: "Lana" }, { displayValue: "Amsterdam" }],
|
|
26
|
+
[{ displayValue: "004" }, { displayValue: "Rick" }, { displayValue: "London" }],
|
|
27
|
+
[{ displayValue: "005" }, { displayValue: "Mark" }, { displayValue: "Miami" }],
|
|
28
|
+
[{ displayValue: "006" }, { displayValue: "Cris" }, { displayValue: "Paris" }],
|
|
29
|
+
];
|
|
30
|
+
|
|
31
|
+
const rowsIcon = [
|
|
32
|
+
[
|
|
33
|
+
{ displayValue: "001", sortValue: "001" },
|
|
34
|
+
{ displayValue: "Peter" },
|
|
35
|
+
{ displayValue: <DxcButton icon={deleteIcon} /> },
|
|
36
|
+
],
|
|
37
|
+
[{ displayValue: "002", sortValue: "002" }, { displayValue: "Louis" }, { displayValue: "" }],
|
|
38
|
+
[
|
|
39
|
+
{ displayValue: "003", sortValue: "003" },
|
|
40
|
+
{ displayValue: "Mark" },
|
|
41
|
+
{ displayValue: <DxcButton icon={deleteIcon} /> },
|
|
42
|
+
],
|
|
43
|
+
];
|
|
44
|
+
|
|
45
|
+
const columnsSortable = [
|
|
46
|
+
{ displayValue: "Id", isSortable: true },
|
|
47
|
+
{ displayValue: "Name", isSortable: true },
|
|
48
|
+
{ displayValue: "City", isSortable: false },
|
|
49
|
+
];
|
|
50
|
+
|
|
51
|
+
const rowsSortable = [
|
|
52
|
+
[
|
|
53
|
+
{ displayValue: "001", sortValue: "001" },
|
|
54
|
+
{ displayValue: "Peter", sortValue: "Peter" },
|
|
55
|
+
{ displayValue: "Miami", sortValue: "Miami" },
|
|
56
|
+
],
|
|
57
|
+
[
|
|
58
|
+
{ displayValue: "002", sortValue: "002" },
|
|
59
|
+
{ displayValue: "Louis", sortValue: "Louis" },
|
|
60
|
+
{ displayValue: "London", sortValue: "London" },
|
|
61
|
+
],
|
|
62
|
+
[
|
|
63
|
+
{ displayValue: "003", sortValue: "003" },
|
|
64
|
+
{ displayValue: "Aida", sortValue: "Aida" },
|
|
65
|
+
{ displayValue: "Wroclaw", sortValue: "Wroclaw" },
|
|
66
|
+
],
|
|
67
|
+
[
|
|
68
|
+
{ displayValue: "004", sortValue: "004" },
|
|
69
|
+
{ displayValue: "Lana", sortValue: "Lana" },
|
|
70
|
+
{ displayValue: "Amsterdam", sortValue: "Amsterdam" },
|
|
71
|
+
],
|
|
72
|
+
];
|
|
73
|
+
|
|
74
|
+
const longColumns = [
|
|
75
|
+
{ displayValue: "Column1" },
|
|
76
|
+
{ displayValue: "Column2" },
|
|
77
|
+
{ displayValue: "Column3" },
|
|
78
|
+
{ displayValue: "Column4" },
|
|
79
|
+
{ displayValue: "Column5" },
|
|
80
|
+
{ displayValue: "Column6" },
|
|
81
|
+
{ displayValue: "Column7" },
|
|
82
|
+
{ displayValue: "Column8" },
|
|
83
|
+
{ displayValue: "Column9" },
|
|
84
|
+
{ displayValue: "Column10" },
|
|
85
|
+
{ displayValue: "Column11" },
|
|
86
|
+
{ displayValue: "Column12" },
|
|
87
|
+
{ displayValue: "Column13" },
|
|
88
|
+
{ displayValue: "Column14" },
|
|
89
|
+
{ displayValue: "Column15" },
|
|
90
|
+
{ displayValue: "Column16" },
|
|
91
|
+
{ displayValue: "Column17" },
|
|
92
|
+
{ displayValue: "Column18" },
|
|
93
|
+
{ displayValue: "Column19" },
|
|
94
|
+
{ displayValue: "Column20" },
|
|
95
|
+
];
|
|
96
|
+
|
|
97
|
+
const longRows = [
|
|
98
|
+
[
|
|
99
|
+
{ displayValue: "001", sortValue: "001" },
|
|
100
|
+
{ displayValue: "Peter", sortValue: "Peter" },
|
|
101
|
+
{ displayValue: "Miami", sortValue: "Miami" },
|
|
102
|
+
{ displayValue: "001", sortValue: "001" },
|
|
103
|
+
{ displayValue: "Peter", sortValue: "Peter" },
|
|
104
|
+
{ displayValue: "Miami", sortValue: "Miami" },
|
|
105
|
+
{ displayValue: "Miami", sortValue: "Miami" },
|
|
106
|
+
{ displayValue: "001", sortValue: "001" },
|
|
107
|
+
{ displayValue: "Peter", sortValue: "Peter" },
|
|
108
|
+
{ displayValue: "Miami", sortValue: "Miami" },
|
|
109
|
+
{ displayValue: "002", sortValue: "002" },
|
|
110
|
+
{ displayValue: "Louis", sortValue: "Louis" },
|
|
111
|
+
{ displayValue: "London", sortValue: "London" },
|
|
112
|
+
{ displayValue: "002", sortValue: "002" },
|
|
113
|
+
{ displayValue: "Louis", sortValue: "Louis" },
|
|
114
|
+
{ displayValue: "London", sortValue: "London" },
|
|
115
|
+
{ displayValue: "002", sortValue: "002" },
|
|
116
|
+
{ displayValue: "Louis", sortValue: "Louis" },
|
|
117
|
+
{ displayValue: "London", sortValue: "London" },
|
|
118
|
+
{ displayValue: "London", sortValue: "London" },
|
|
119
|
+
],
|
|
120
|
+
[
|
|
121
|
+
{ displayValue: "002", sortValue: "002" },
|
|
122
|
+
{ displayValue: "Louis", sortValue: "Louis" },
|
|
123
|
+
{ displayValue: "London", sortValue: "London" },
|
|
124
|
+
{ displayValue: "002", sortValue: "002" },
|
|
125
|
+
{ displayValue: "Louis", sortValue: "Louis" },
|
|
126
|
+
{ displayValue: "London", sortValue: "London" },
|
|
127
|
+
{ displayValue: "002", sortValue: "002" },
|
|
128
|
+
{ displayValue: "Louis", sortValue: "Louis" },
|
|
129
|
+
{ displayValue: "London", sortValue: "London" },
|
|
130
|
+
{ displayValue: "London", sortValue: "London" },
|
|
131
|
+
{ displayValue: "002", sortValue: "002" },
|
|
132
|
+
{ displayValue: "Louis", sortValue: "Louis" },
|
|
133
|
+
{ displayValue: "London", sortValue: "London" },
|
|
134
|
+
{ displayValue: "002", sortValue: "002" },
|
|
135
|
+
{ displayValue: "Louis", sortValue: "Louis" },
|
|
136
|
+
{ displayValue: "London", sortValue: "London" },
|
|
137
|
+
{ displayValue: "002", sortValue: "002" },
|
|
138
|
+
{ displayValue: "Louis", sortValue: "Louis" },
|
|
139
|
+
{ displayValue: "London", sortValue: "London" },
|
|
140
|
+
{ displayValue: "London", sortValue: "London" },
|
|
141
|
+
],
|
|
142
|
+
[
|
|
143
|
+
{ displayValue: "002", sortValue: "002" },
|
|
144
|
+
{ displayValue: "Louis", sortValue: "Louis" },
|
|
145
|
+
{ displayValue: "London", sortValue: "London" },
|
|
146
|
+
{ displayValue: "002", sortValue: "002" },
|
|
147
|
+
{ displayValue: "Louis", sortValue: "Louis" },
|
|
148
|
+
{ displayValue: "London", sortValue: "London" },
|
|
149
|
+
{ displayValue: "002", sortValue: "002" },
|
|
150
|
+
{ displayValue: "Louis", sortValue: "Louis" },
|
|
151
|
+
{ displayValue: "London", sortValue: "London" },
|
|
152
|
+
{ displayValue: "London", sortValue: "London" },
|
|
153
|
+
{ displayValue: "002", sortValue: "002" },
|
|
154
|
+
{ displayValue: "Louis", sortValue: "Louis" },
|
|
155
|
+
{ displayValue: "London", sortValue: "London" },
|
|
156
|
+
{ displayValue: "002", sortValue: "002" },
|
|
157
|
+
{ displayValue: "Louis", sortValue: "Louis" },
|
|
158
|
+
{ displayValue: "London", sortValue: "London" },
|
|
159
|
+
{ displayValue: "002", sortValue: "002" },
|
|
160
|
+
{ displayValue: "Louis", sortValue: "Louis" },
|
|
161
|
+
{ displayValue: "London", sortValue: "London" },
|
|
162
|
+
{ displayValue: "London", sortValue: "London" },
|
|
163
|
+
],
|
|
164
|
+
];
|
|
165
|
+
|
|
166
|
+
export const Chromatic = () => (
|
|
167
|
+
<>
|
|
168
|
+
<ExampleContainer>
|
|
169
|
+
<Title title="Sortable table" theme="light" level={4} />
|
|
170
|
+
<DxcResultsetTable columns={columnsSortable} rows={rowsSortable}></DxcResultsetTable>
|
|
171
|
+
</ExampleContainer>
|
|
172
|
+
<ExampleContainer>
|
|
173
|
+
<Title title="With action" theme="light" level={4} />
|
|
174
|
+
<DxcResultsetTable columns={columns} rows={rowsIcon}></DxcResultsetTable>
|
|
175
|
+
</ExampleContainer>
|
|
176
|
+
<ExampleContainer>
|
|
177
|
+
<Title title="With items per page option" theme="light" level={4} />
|
|
178
|
+
<DxcResultsetTable
|
|
179
|
+
columns={columns}
|
|
180
|
+
rows={rows}
|
|
181
|
+
itemsPerPage={2}
|
|
182
|
+
itemsPerPageOptions={[2, 3]}
|
|
183
|
+
></DxcResultsetTable>
|
|
184
|
+
</ExampleContainer>
|
|
185
|
+
<ExampleContainer>
|
|
186
|
+
<Title title="Scroll resultset table" theme="light" level={4} />
|
|
187
|
+
<DxcResultsetTable columns={longColumns} rows={longRows}></DxcResultsetTable>
|
|
188
|
+
</ExampleContainer>
|
|
189
|
+
<Title title="Margins" theme="light" level={2} />
|
|
190
|
+
<ExampleContainer>
|
|
191
|
+
<Title title="Xxsmall" theme="light" level={4} />
|
|
192
|
+
<DxcResultsetTable columns={columns} rows={rows} margin={"xxsmall"}></DxcResultsetTable>
|
|
193
|
+
</ExampleContainer>
|
|
194
|
+
<ExampleContainer>
|
|
195
|
+
<Title title="Xsmall" theme="light" level={4} />
|
|
196
|
+
<DxcResultsetTable columns={columns} rows={rows} margin={"xsmall"}></DxcResultsetTable>
|
|
197
|
+
</ExampleContainer>
|
|
198
|
+
<ExampleContainer>
|
|
199
|
+
<Title title="Small" theme="light" level={4} />
|
|
200
|
+
<DxcResultsetTable columns={columns} rows={rows} margin={"small"}></DxcResultsetTable>
|
|
201
|
+
</ExampleContainer>
|
|
202
|
+
<ExampleContainer>
|
|
203
|
+
<Title title="Medium" theme="light" level={4} />
|
|
204
|
+
<DxcResultsetTable columns={columns} rows={rows} margin={"medium"}></DxcResultsetTable>
|
|
205
|
+
</ExampleContainer>
|
|
206
|
+
<ExampleContainer>
|
|
207
|
+
<Title title="Large" theme="light" level={4} />
|
|
208
|
+
<DxcResultsetTable columns={columns} rows={rows} margin={"large"}></DxcResultsetTable>
|
|
209
|
+
</ExampleContainer>
|
|
210
|
+
<ExampleContainer>
|
|
211
|
+
<Title title="Xlarge" theme="light" level={4} />
|
|
212
|
+
<DxcResultsetTable columns={columns} rows={rows} margin={"xlarge"}></DxcResultsetTable>
|
|
213
|
+
</ExampleContainer>
|
|
214
|
+
<ExampleContainer>
|
|
215
|
+
<Title title="Xxlarge" theme="light" level={4} />
|
|
216
|
+
<DxcResultsetTable columns={columns} rows={rows} margin={"xxlarge"}></DxcResultsetTable>
|
|
217
|
+
<hr />
|
|
218
|
+
</ExampleContainer>
|
|
219
|
+
</>
|
|
220
|
+
);
|
|
221
|
+
|
|
222
|
+
const ResultsetTableAsc = () => (
|
|
223
|
+
<ExampleContainer>
|
|
224
|
+
<Title title="Ascendant sorting" theme="light" level={4} />
|
|
225
|
+
<DxcResultsetTable columns={columnsSortable} rows={rowsSortable}></DxcResultsetTable>
|
|
226
|
+
</ExampleContainer>
|
|
227
|
+
);
|
|
228
|
+
|
|
229
|
+
export const AscendentSorting = ResultsetTableAsc.bind({});
|
|
230
|
+
AscendentSorting.play = async ({ canvasElement }) => {
|
|
231
|
+
const canvas = within(canvasElement);
|
|
232
|
+
await userEvent.click(canvas.queryByText("Name"));
|
|
233
|
+
};
|
|
234
|
+
|
|
235
|
+
const ResultsetTableDesc = () => (
|
|
236
|
+
<ExampleContainer>
|
|
237
|
+
<Title title="Descendant sorting" theme="light" level={4} />
|
|
238
|
+
<DxcResultsetTable columns={columnsSortable} rows={rowsSortable}></DxcResultsetTable>
|
|
239
|
+
</ExampleContainer>
|
|
240
|
+
);
|
|
241
|
+
|
|
242
|
+
export const DescendantSorting = ResultsetTableDesc.bind({});
|
|
243
|
+
DescendantSorting.play = async ({ canvasElement }) => {
|
|
244
|
+
const canvas = within(canvasElement);
|
|
245
|
+
await userEvent.click(canvas.queryByText("Name"));
|
|
246
|
+
await userEvent.click(canvas.queryByText("Name"));
|
|
247
|
+
};
|
|
248
|
+
|
|
249
|
+
const ResultsetTableMiddle = () => (
|
|
250
|
+
<ExampleContainer>
|
|
251
|
+
<Title title="Middle page" theme="light" level={4} />
|
|
252
|
+
<DxcResultsetTable columns={columns} rows={rows} itemsPerPage={2}></DxcResultsetTable>
|
|
253
|
+
</ExampleContainer>
|
|
254
|
+
);
|
|
255
|
+
|
|
256
|
+
export const MiddlePage = ResultsetTableMiddle.bind({});
|
|
257
|
+
MiddlePage.play = async ({ canvasElement }) => {
|
|
258
|
+
const canvas = within(canvasElement);
|
|
259
|
+
const nextButton = canvas.getAllByRole("button")[2];
|
|
260
|
+
await userEvent.click(nextButton);
|
|
261
|
+
};
|
|
262
|
+
|
|
263
|
+
const ResultsetTableLast = () => (
|
|
264
|
+
<ExampleContainer>
|
|
265
|
+
<Title title="Last page" theme="light" level={4} />
|
|
266
|
+
<DxcResultsetTable columns={columns} rows={rows} itemsPerPage={2}></DxcResultsetTable>
|
|
267
|
+
</ExampleContainer>
|
|
268
|
+
);
|
|
269
|
+
|
|
270
|
+
export const LastPage = ResultsetTableLast.bind({});
|
|
271
|
+
LastPage.play = async ({ canvasElement }) => {
|
|
272
|
+
const canvas = within(canvasElement);
|
|
273
|
+
const nextButton = canvas.getAllByRole("button")[3];
|
|
274
|
+
await userEvent.click(nextButton);
|
|
275
|
+
};
|
|
@@ -31,12 +31,16 @@ declare type Props = {
|
|
|
31
31
|
/**
|
|
32
32
|
* An array of objects representing the columns of the table.
|
|
33
33
|
*/
|
|
34
|
-
columns:
|
|
34
|
+
columns: Column[];
|
|
35
35
|
/**
|
|
36
36
|
* An array of objects representing the rows of the table, you will have
|
|
37
37
|
* as many objects as columns in the table.
|
|
38
38
|
*/
|
|
39
|
-
rows:
|
|
39
|
+
rows: Row[][];
|
|
40
|
+
/**
|
|
41
|
+
* If true, a select component for navigation between pages will be displayed.
|
|
42
|
+
*/
|
|
43
|
+
showGoToPage?: boolean;
|
|
40
44
|
/**
|
|
41
45
|
* Number of items per page.
|
|
42
46
|
*/
|
package/row/Row.d.ts
ADDED