@dxc-technology/halstack-react 0.0.0-509f1eb → 0.0.0-51152f3
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/HalstackContext.d.ts +16 -14
- package/action-icon/ActionIcon.d.ts +2 -2
- package/action-icon/ActionIcon.js +8 -4
- package/action-icon/ActionIcon.stories.tsx +41 -0
- package/action-icon/ActionIcon.test.js +64 -0
- package/badge/Badge.d.ts +1 -1
- package/badge/Badge.js +140 -29
- package/badge/Badge.stories.tsx +210 -0
- package/badge/Badge.test.js +30 -0
- package/badge/types.d.ts +52 -3
- package/button/Button.test.js +3 -1
- package/common/coreTokens.js +2 -2
- package/common/variables.d.ts +16 -14
- package/common/variables.js +22 -20
- package/container/Container.js +1 -1
- package/dropdown/Dropdown.js +9 -7
- package/footer/Footer.d.ts +1 -1
- package/footer/Footer.js +25 -12
- package/footer/Footer.stories.tsx +19 -0
- package/footer/Icons.d.ts +1 -0
- package/footer/Icons.js +65 -1
- package/footer/types.d.ts +6 -0
- package/layout/ApplicationLayout.d.ts +1 -1
- package/main.d.ts +3 -2
- package/main.js +8 -1
- package/nav-tabs/NavTabs.js +1 -1
- package/nav-tabs/NavTabs.stories.tsx +6 -4
- package/nav-tabs/NavTabs.test.js +3 -2
- package/nav-tabs/Tab.js +5 -4
- package/number-input/NumberInput.js +21 -2
- package/number-input/NumberInput.test.js +165 -6
- package/package.json +1 -1
- package/resultset-table/ResultsetTable.d.ts +4 -1
- package/resultset-table/ResultsetTable.js +14 -6
- package/resultset-table/ResultsetTable.stories.tsx +86 -5
- package/resultset-table/ResultsetTable.test.js +66 -0
- package/resultset-table/types.d.ts +6 -0
- package/status-light/StatusLight.d.ts +4 -0
- package/status-light/StatusLight.js +51 -0
- package/status-light/StatusLight.stories.tsx +74 -0
- package/status-light/StatusLight.test.js +25 -0
- package/status-light/types.d.ts +17 -0
- package/status-light/types.js +5 -0
- package/table/ActionsCell.d.ts +4 -0
- package/table/ActionsCell.js +55 -0
- package/table/DropdownTheme.js +58 -0
- package/table/Table.d.ts +4 -1
- package/table/Table.js +22 -5
- package/table/Table.stories.tsx +261 -2
- package/table/Table.test.js +92 -0
- package/table/types.d.ts +39 -0
- package/tabs/Tab.js +7 -4
- package/tabs/Tabs.stories.tsx +1 -1
- package/text-input/TextInput.js +28 -35
- package/text-input/TextInput.test.js +96 -79
- package/useTheme.d.ts +16 -14
- package/utils/FocusLock.js +3 -0
|
@@ -91,7 +91,9 @@ export const Chromatic = () => (
|
|
|
91
91
|
<DxcNavTabs.Tab href="#" notificationNumber={120}>
|
|
92
92
|
Tab 3
|
|
93
93
|
</DxcNavTabs.Tab>
|
|
94
|
-
<DxcNavTabs.Tab href="#"
|
|
94
|
+
<DxcNavTabs.Tab href="#" notificationNumber={12}>
|
|
95
|
+
Tab 4
|
|
96
|
+
</DxcNavTabs.Tab>
|
|
95
97
|
</DxcNavTabs>
|
|
96
98
|
</ExampleContainer>
|
|
97
99
|
<ExampleContainer>
|
|
@@ -140,7 +142,7 @@ export const Chromatic = () => (
|
|
|
140
142
|
<DxcNavTabs.Tab href="#" icon={iconSVG} notificationNumber={120}>
|
|
141
143
|
Tab 3
|
|
142
144
|
</DxcNavTabs.Tab>
|
|
143
|
-
<DxcNavTabs.Tab href="#" icon={largeIcon}>
|
|
145
|
+
<DxcNavTabs.Tab href="#" icon={largeIcon} notificationNumber={12}>
|
|
144
146
|
Tab 4
|
|
145
147
|
</DxcNavTabs.Tab>
|
|
146
148
|
</DxcNavTabs>
|
|
@@ -157,7 +159,7 @@ export const Chromatic = () => (
|
|
|
157
159
|
<DxcNavTabs.Tab href="#" icon={largeIcon} notificationNumber={120}>
|
|
158
160
|
Tab 3
|
|
159
161
|
</DxcNavTabs.Tab>
|
|
160
|
-
<DxcNavTabs.Tab href="#" icon={iconSVG}>
|
|
162
|
+
<DxcNavTabs.Tab href="#" icon={iconSVG} notificationNumber={12}>
|
|
161
163
|
Tab 4
|
|
162
164
|
</DxcNavTabs.Tab>
|
|
163
165
|
</DxcNavTabs>
|
|
@@ -264,7 +266,7 @@ export const Chromatic = () => (
|
|
|
264
266
|
<DxcNavTabs.Tab href="#" icon={iconSVG} notificationNumber={120}>
|
|
265
267
|
Tab 3
|
|
266
268
|
</DxcNavTabs.Tab>
|
|
267
|
-
<DxcNavTabs.Tab href="#" icon={iconSVG}>
|
|
269
|
+
<DxcNavTabs.Tab href="#" icon={iconSVG} notificationNumber={12}>
|
|
268
270
|
Tab 4
|
|
269
271
|
</DxcNavTabs.Tab>
|
|
270
272
|
</DxcNavTabs>
|
package/nav-tabs/NavTabs.test.js
CHANGED
|
@@ -49,9 +49,10 @@ describe("Tabs component tests", function () {
|
|
|
49
49
|
icon: "/testIcon.png"
|
|
50
50
|
}, "Tab 3"))),
|
|
51
51
|
getByText = _render2.getByText,
|
|
52
|
-
getByRole = _render2.getByRole
|
|
52
|
+
getByRole = _render2.getByRole,
|
|
53
|
+
queryByText = _render2.queryByText;
|
|
53
54
|
expect(getByText("10")).toBeTruthy();
|
|
54
|
-
expect(
|
|
55
|
+
expect(queryByText("20")).toBeFalsy();
|
|
55
56
|
expect(getByText("+99")).toBeTruthy();
|
|
56
57
|
expect(getByRole("img")).toBeTruthy();
|
|
57
58
|
});
|
package/nav-tabs/Tab.js
CHANGED
|
@@ -86,12 +86,13 @@ var DxcTab = /*#__PURE__*/(0, _react.forwardRef)(function (_ref, _ref2) {
|
|
|
86
86
|
textAlign: "center",
|
|
87
87
|
letterSpacing: "0.025em",
|
|
88
88
|
lineHeight: "1.715em"
|
|
89
|
-
}, children), notificationNumber && /*#__PURE__*/_react["default"].createElement(_Badge["default"], {
|
|
90
|
-
|
|
91
|
-
|
|
89
|
+
}, children), notificationNumber && !disabled && /*#__PURE__*/_react["default"].createElement(_Badge["default"], {
|
|
90
|
+
mode: "notification",
|
|
91
|
+
size: "small",
|
|
92
|
+
label: typeof notificationNumber === "number" && notificationNumber
|
|
92
93
|
}))));
|
|
93
94
|
});
|
|
94
|
-
var TabContainer = _styledComponents["default"].div(_templateObject || (_templateObject = (0, _taggedTemplateLiteral2["default"])(["\n align-items: stretch;\n border-bottom: 2px solid ", ";\n padding: 0.5rem;\n
|
|
95
|
+
var TabContainer = _styledComponents["default"].div(_templateObject || (_templateObject = (0, _taggedTemplateLiteral2["default"])(["\n align-items: stretch;\n border-bottom: 2px solid ", ";\n padding: 0.5rem;\n z-index: 1;\n svg {\n color: ", ";\n }\n &[aria-selected=\"true\"] {\n svg {\n color: ", ";\n }\n }\n &[aria-disabled=\"true\"] {\n svg {\n color: ", ";\n }\n }\n"])), function (props) {
|
|
95
96
|
return props.active ? props.theme.selectedUnderlineColor : 'transparent';
|
|
96
97
|
}, function (props) {
|
|
97
98
|
return props.theme.unselectedIconColor;
|
|
@@ -1,15 +1,18 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
3
|
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
+
var _typeof = require("@babel/runtime/helpers/typeof");
|
|
4
5
|
Object.defineProperty(exports, "__esModule", {
|
|
5
6
|
value: true
|
|
6
7
|
});
|
|
7
8
|
exports["default"] = exports.NumberInputContext = void 0;
|
|
8
9
|
var _taggedTemplateLiteral2 = _interopRequireDefault(require("@babel/runtime/helpers/taggedTemplateLiteral"));
|
|
9
|
-
var _react =
|
|
10
|
+
var _react = _interopRequireWildcard(require("react"));
|
|
10
11
|
var _styledComponents = _interopRequireDefault(require("styled-components"));
|
|
11
12
|
var _TextInput = _interopRequireDefault(require("../text-input/TextInput"));
|
|
12
13
|
var _templateObject;
|
|
14
|
+
function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(e) { return e ? t : r; })(e); }
|
|
15
|
+
function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != _typeof(e) && "function" != typeof e) return { "default": e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && Object.prototype.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n["default"] = e, t && t.set(e, n), n; }
|
|
13
16
|
var NumberInputContext = exports.NumberInputContext = /*#__PURE__*/_react["default"].createContext(null);
|
|
14
17
|
var DxcNumberInput = /*#__PURE__*/_react["default"].forwardRef(function (_ref, ref) {
|
|
15
18
|
var label = _ref.label,
|
|
@@ -34,6 +37,20 @@ var DxcNumberInput = /*#__PURE__*/_react["default"].forwardRef(function (_ref, r
|
|
|
34
37
|
margin = _ref.margin,
|
|
35
38
|
size = _ref.size,
|
|
36
39
|
tabIndex = _ref.tabIndex;
|
|
40
|
+
var numberInputRef = _react["default"].useRef(null);
|
|
41
|
+
(0, _react.useEffect)(function () {
|
|
42
|
+
var _numberInputRef$curre;
|
|
43
|
+
var input = (_numberInputRef$curre = numberInputRef.current) === null || _numberInputRef$curre === void 0 ? void 0 : _numberInputRef$curre.getElementsByTagName("input")[0];
|
|
44
|
+
var preventDefault = function preventDefault(event) {
|
|
45
|
+
event.preventDefault();
|
|
46
|
+
};
|
|
47
|
+
input === null || input === void 0 ? void 0 : input.addEventListener("wheel", preventDefault, {
|
|
48
|
+
passive: false
|
|
49
|
+
});
|
|
50
|
+
return function () {
|
|
51
|
+
input === null || input === void 0 ? void 0 : input.removeEventListener("wheel", preventDefault);
|
|
52
|
+
};
|
|
53
|
+
}, []);
|
|
37
54
|
return /*#__PURE__*/_react["default"].createElement(NumberInputContext.Provider, {
|
|
38
55
|
value: {
|
|
39
56
|
typeNumber: "number",
|
|
@@ -41,7 +58,9 @@ var DxcNumberInput = /*#__PURE__*/_react["default"].forwardRef(function (_ref, r
|
|
|
41
58
|
maxNumber: max,
|
|
42
59
|
stepNumber: step
|
|
43
60
|
}
|
|
44
|
-
}, /*#__PURE__*/_react["default"].createElement(NumberInputContainer,
|
|
61
|
+
}, /*#__PURE__*/_react["default"].createElement(NumberInputContainer, {
|
|
62
|
+
ref: numberInputRef
|
|
63
|
+
}, /*#__PURE__*/_react["default"].createElement(_TextInput["default"], {
|
|
45
64
|
label: label,
|
|
46
65
|
name: name,
|
|
47
66
|
defaultValue: defaultValue,
|
|
@@ -769,12 +769,171 @@ describe("Number input component tests", function () {
|
|
|
769
769
|
});
|
|
770
770
|
expect(number.value).toBe("5");
|
|
771
771
|
});
|
|
772
|
-
test("
|
|
772
|
+
test("Value is unchanged when using the scroll wheel in mouse in a disabled input", function () {
|
|
773
773
|
var _render30 = (0, _react2.render)( /*#__PURE__*/_react["default"].createElement(_NumberInput["default"], {
|
|
774
|
+
disabled: true,
|
|
775
|
+
label: "Number input label",
|
|
776
|
+
min: 5,
|
|
777
|
+
max: 20,
|
|
778
|
+
step: 5,
|
|
779
|
+
defaultValue: 10
|
|
780
|
+
})),
|
|
781
|
+
getByLabelText = _render30.getByLabelText;
|
|
782
|
+
var number = getByLabelText("Number input label");
|
|
783
|
+
_react2.fireEvent.wheel(number, {
|
|
784
|
+
deltaY: -100
|
|
785
|
+
});
|
|
786
|
+
expect(number.value).toBe("10");
|
|
787
|
+
_react2.fireEvent.wheel(number, {
|
|
788
|
+
deltaY: 100
|
|
789
|
+
});
|
|
790
|
+
expect(number.value).toBe("10");
|
|
791
|
+
_react2.fireEvent.wheel(number, {
|
|
792
|
+
deltaY: -100
|
|
793
|
+
});
|
|
794
|
+
expect(number.value).toBe("10");
|
|
795
|
+
_react2.fireEvent.wheel(number, {
|
|
796
|
+
deltaY: 100
|
|
797
|
+
});
|
|
798
|
+
expect(number.value).toBe("10");
|
|
799
|
+
});
|
|
800
|
+
test("Value is unchanged when using the arrows in keyboard in a disabled input", function () {
|
|
801
|
+
var _render31 = (0, _react2.render)( /*#__PURE__*/_react["default"].createElement(_NumberInput["default"], {
|
|
802
|
+
disabled: true,
|
|
803
|
+
label: "Number input label",
|
|
804
|
+
min: 5,
|
|
805
|
+
max: 20,
|
|
806
|
+
step: 5,
|
|
807
|
+
defaultValue: 10
|
|
808
|
+
})),
|
|
809
|
+
getByLabelText = _render31.getByLabelText;
|
|
810
|
+
var number = getByLabelText("Number input label");
|
|
811
|
+
_react2.fireEvent.keyDown(number, {
|
|
812
|
+
keyCode: 38
|
|
813
|
+
});
|
|
814
|
+
expect(number.value).toBe("10");
|
|
815
|
+
_react2.fireEvent.keyDown(number, {
|
|
816
|
+
keyCode: 40
|
|
817
|
+
});
|
|
818
|
+
expect(number.value).toBe("10");
|
|
819
|
+
_react2.fireEvent.keyDown(number, {
|
|
820
|
+
keyCode: 38
|
|
821
|
+
});
|
|
822
|
+
expect(number.value).toBe("10");
|
|
823
|
+
_react2.fireEvent.keyDown(number, {
|
|
824
|
+
keyCode: 40
|
|
825
|
+
});
|
|
826
|
+
expect(number.value).toBe("10");
|
|
827
|
+
});
|
|
828
|
+
test("Value is unchanged when using the scroll wheel in mouse in a read-only input", function () {
|
|
829
|
+
var _render32 = (0, _react2.render)( /*#__PURE__*/_react["default"].createElement(_NumberInput["default"], {
|
|
830
|
+
readOnly: true,
|
|
831
|
+
label: "Number input label",
|
|
832
|
+
min: 5,
|
|
833
|
+
max: 20,
|
|
834
|
+
step: 5,
|
|
835
|
+
defaultValue: 10
|
|
836
|
+
})),
|
|
837
|
+
getByLabelText = _render32.getByLabelText;
|
|
838
|
+
var number = getByLabelText("Number input label");
|
|
839
|
+
_react2.fireEvent.wheel(number, {
|
|
840
|
+
deltaY: -100
|
|
841
|
+
});
|
|
842
|
+
expect(number.value).toBe("10");
|
|
843
|
+
_react2.fireEvent.wheel(number, {
|
|
844
|
+
deltaY: 100
|
|
845
|
+
});
|
|
846
|
+
expect(number.value).toBe("10");
|
|
847
|
+
_react2.fireEvent.wheel(number, {
|
|
848
|
+
deltaY: -100
|
|
849
|
+
});
|
|
850
|
+
expect(number.value).toBe("10");
|
|
851
|
+
_react2.fireEvent.wheel(number, {
|
|
852
|
+
deltaY: 100
|
|
853
|
+
});
|
|
854
|
+
expect(number.value).toBe("10");
|
|
855
|
+
});
|
|
856
|
+
test("Value is unchanged when using the arrows in keyboard in a read-only input", function () {
|
|
857
|
+
var _render33 = (0, _react2.render)( /*#__PURE__*/_react["default"].createElement(_NumberInput["default"], {
|
|
858
|
+
readOnly: true,
|
|
859
|
+
label: "Number input label",
|
|
860
|
+
min: 5,
|
|
861
|
+
max: 20,
|
|
862
|
+
step: 5,
|
|
863
|
+
defaultValue: 10
|
|
864
|
+
})),
|
|
865
|
+
getByLabelText = _render33.getByLabelText;
|
|
866
|
+
var number = getByLabelText("Number input label");
|
|
867
|
+
_react2.fireEvent.keyDown(number, {
|
|
868
|
+
keyCode: 38
|
|
869
|
+
});
|
|
870
|
+
expect(number.value).toBe("10");
|
|
871
|
+
_react2.fireEvent.keyDown(number, {
|
|
872
|
+
keyCode: 40
|
|
873
|
+
});
|
|
874
|
+
expect(number.value).toBe("10");
|
|
875
|
+
_react2.fireEvent.keyDown(number, {
|
|
876
|
+
keyCode: 38
|
|
877
|
+
});
|
|
878
|
+
expect(number.value).toBe("10");
|
|
879
|
+
_react2.fireEvent.keyDown(number, {
|
|
880
|
+
keyCode: 40
|
|
881
|
+
});
|
|
882
|
+
expect(number.value).toBe("10");
|
|
883
|
+
});
|
|
884
|
+
test("Increment and decrement the value with min, max and step using the scroll wheel in mouse", function () {
|
|
885
|
+
var _render34 = (0, _react2.render)( /*#__PURE__*/_react["default"].createElement(_NumberInput["default"], {
|
|
886
|
+
label: "Number input label",
|
|
887
|
+
min: 5,
|
|
888
|
+
max: 20,
|
|
889
|
+
step: 5
|
|
890
|
+
})),
|
|
891
|
+
getByLabelText = _render34.getByLabelText;
|
|
892
|
+
var number = getByLabelText("Number input label");
|
|
893
|
+
_userEvent["default"].type(number, "1");
|
|
894
|
+
_react2.fireEvent.wheel(number, {
|
|
895
|
+
deltaY: -100
|
|
896
|
+
});
|
|
897
|
+
expect(number.value).toBe("5");
|
|
898
|
+
_react2.fireEvent.wheel(number, {
|
|
899
|
+
deltaY: -100
|
|
900
|
+
});
|
|
901
|
+
expect(number.value).toBe("10");
|
|
902
|
+
_react2.fireEvent.wheel(number, {
|
|
903
|
+
deltaY: -100
|
|
904
|
+
});
|
|
905
|
+
expect(number.value).toBe("15");
|
|
906
|
+
_react2.fireEvent.wheel(number, {
|
|
907
|
+
deltaY: -100
|
|
908
|
+
});
|
|
909
|
+
expect(number.value).toBe("20");
|
|
910
|
+
_react2.fireEvent.wheel(number, {
|
|
911
|
+
deltaY: -100
|
|
912
|
+
});
|
|
913
|
+
expect(number.value).toBe("20");
|
|
914
|
+
_react2.fireEvent.wheel(number, {
|
|
915
|
+
deltaY: 100
|
|
916
|
+
});
|
|
917
|
+
expect(number.value).toBe("15");
|
|
918
|
+
_react2.fireEvent.wheel(number, {
|
|
919
|
+
deltaY: 100
|
|
920
|
+
});
|
|
921
|
+
expect(number.value).toBe("10");
|
|
922
|
+
_react2.fireEvent.wheel(number, {
|
|
923
|
+
deltaY: 100
|
|
924
|
+
});
|
|
925
|
+
expect(number.value).toBe("5");
|
|
926
|
+
_react2.fireEvent.wheel(number, {
|
|
927
|
+
deltaY: 100
|
|
928
|
+
});
|
|
929
|
+
expect(number.value).toBe("5");
|
|
930
|
+
});
|
|
931
|
+
test("Number has correct accessibility attributes", function () {
|
|
932
|
+
var _render35 = (0, _react2.render)( /*#__PURE__*/_react["default"].createElement(_NumberInput["default"], {
|
|
774
933
|
label: "Number input label"
|
|
775
934
|
})),
|
|
776
|
-
getByLabelText =
|
|
777
|
-
getAllByRole =
|
|
935
|
+
getByLabelText = _render35.getByLabelText,
|
|
936
|
+
getAllByRole = _render35.getAllByRole;
|
|
778
937
|
var number = getByLabelText("Number input label");
|
|
779
938
|
expect(number.getAttribute("type")).toBe("number");
|
|
780
939
|
expect(number.getAttribute("aria-autocomplete")).toBeNull();
|
|
@@ -786,7 +945,7 @@ describe("Number input component tests", function () {
|
|
|
786
945
|
expect(increment.getAttribute("aria-label")).toBe("Increment value");
|
|
787
946
|
});
|
|
788
947
|
test("Number input submits correct values inside a form and actions don't trigger the submit event", /*#__PURE__*/(0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee18() {
|
|
789
|
-
var handlerOnSubmit,
|
|
948
|
+
var handlerOnSubmit, _render36, getByText, getAllByRole, less, more, submit;
|
|
790
949
|
return _regenerator["default"].wrap(function _callee18$(_context18) {
|
|
791
950
|
while (1) switch (_context18.prev = _context18.next) {
|
|
792
951
|
case 0:
|
|
@@ -798,14 +957,14 @@ describe("Number input component tests", function () {
|
|
|
798
957
|
data: "0"
|
|
799
958
|
});
|
|
800
959
|
});
|
|
801
|
-
|
|
960
|
+
_render36 = (0, _react2.render)( /*#__PURE__*/_react["default"].createElement("form", {
|
|
802
961
|
onSubmit: handlerOnSubmit
|
|
803
962
|
}, /*#__PURE__*/_react["default"].createElement(_NumberInput["default"], {
|
|
804
963
|
label: "Number input label",
|
|
805
964
|
name: "data"
|
|
806
965
|
}), /*#__PURE__*/_react["default"].createElement("button", {
|
|
807
966
|
type: "submit"
|
|
808
|
-
}, "Submit"))), getByText =
|
|
967
|
+
}, "Submit"))), getByText = _render36.getByText, getAllByRole = _render36.getAllByRole;
|
|
809
968
|
less = getAllByRole("button")[0];
|
|
810
969
|
more = getAllByRole("button")[1];
|
|
811
970
|
submit = getByText("Submit");
|
package/package.json
CHANGED
|
@@ -1,4 +1,7 @@
|
|
|
1
1
|
/// <reference types="react" />
|
|
2
2
|
import ResultsetTablePropsType from "./types";
|
|
3
|
-
declare const DxcResultsetTable:
|
|
3
|
+
declare const DxcResultsetTable: {
|
|
4
|
+
({ columns, rows, showGoToPage, itemsPerPage, itemsPerPageOptions, itemsPerPageFunction, margin, tabIndex, mode, }: ResultsetTablePropsType): JSX.Element;
|
|
5
|
+
ActionsCell: ({ actions }: import("../table/types").ActionCellsPropsType) => JSX.Element;
|
|
6
|
+
};
|
|
4
7
|
export default DxcResultsetTable;
|
|
@@ -12,11 +12,13 @@ var _typeof2 = _interopRequireDefault(require("@babel/runtime/helpers/typeof"));
|
|
|
12
12
|
var _react = _interopRequireWildcard(require("react"));
|
|
13
13
|
var _styledComponents = _interopRequireWildcard(require("styled-components"));
|
|
14
14
|
var _variables = require("../common/variables");
|
|
15
|
-
var
|
|
15
|
+
var _ActionsCell = _interopRequireDefault(require("../table/ActionsCell"));
|
|
16
16
|
var _Paginator = _interopRequireDefault(require("../paginator/Paginator"));
|
|
17
|
+
var _Table = _interopRequireDefault(require("../table/Table"));
|
|
17
18
|
var _useTheme = _interopRequireDefault(require("../useTheme"));
|
|
18
19
|
var _Icons = _interopRequireDefault(require("./Icons"));
|
|
19
20
|
var _utils = require("../common/utils");
|
|
21
|
+
var _coreTokens = _interopRequireDefault(require("../common/coreTokens"));
|
|
20
22
|
var _templateObject, _templateObject2, _templateObject3;
|
|
21
23
|
function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(e) { return e ? t : r; })(e); }
|
|
22
24
|
function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != _typeof3(e) && "function" != typeof e) return { "default": e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && Object.prototype.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n["default"] = e, t && t.set(e, n), n; }
|
|
@@ -57,7 +59,9 @@ var DxcResultsetTable = function DxcResultsetTable(_ref) {
|
|
|
57
59
|
itemsPerPageFunction = _ref.itemsPerPageFunction,
|
|
58
60
|
margin = _ref.margin,
|
|
59
61
|
_ref$tabIndex = _ref.tabIndex,
|
|
60
|
-
tabIndex = _ref$tabIndex === void 0 ? 0 : _ref$tabIndex
|
|
62
|
+
tabIndex = _ref$tabIndex === void 0 ? 0 : _ref$tabIndex,
|
|
63
|
+
_ref$mode = _ref.mode,
|
|
64
|
+
mode = _ref$mode === void 0 ? "default" : _ref$mode;
|
|
61
65
|
var colorsTheme = (0, _useTheme["default"])();
|
|
62
66
|
var _useState = (0, _react.useState)(1),
|
|
63
67
|
_useState2 = (0, _slicedToArray2["default"])(_useState, 2),
|
|
@@ -98,7 +102,9 @@ var DxcResultsetTable = function DxcResultsetTable(_ref) {
|
|
|
98
102
|
theme: colorsTheme.table
|
|
99
103
|
}, /*#__PURE__*/_react["default"].createElement(DxcResultsetTableContainer, {
|
|
100
104
|
margin: margin
|
|
101
|
-
}, /*#__PURE__*/_react["default"].createElement(_Table["default"],
|
|
105
|
+
}, /*#__PURE__*/_react["default"].createElement(_Table["default"], {
|
|
106
|
+
mode: mode
|
|
107
|
+
}, /*#__PURE__*/_react["default"].createElement("thead", null, /*#__PURE__*/_react["default"].createElement("tr", null, columns.map(function (column, index) {
|
|
102
108
|
return /*#__PURE__*/_react["default"].createElement("th", {
|
|
103
109
|
key: "tableHeader_".concat(index),
|
|
104
110
|
"aria-sort": column.isSortable ? sortColumnIndex === index ? sortOrder : "none" : undefined
|
|
@@ -109,7 +115,8 @@ var DxcResultsetTable = function DxcResultsetTable(_ref) {
|
|
|
109
115
|
column.isSortable && changeSorting(index);
|
|
110
116
|
},
|
|
111
117
|
tabIndex: column.isSortable ? tabIndex : -1,
|
|
112
|
-
isSortable: column.isSortable
|
|
118
|
+
isSortable: column.isSortable,
|
|
119
|
+
mode: mode
|
|
113
120
|
}, /*#__PURE__*/_react["default"].createElement("span", null, column.displayValue), column.isSortable && /*#__PURE__*/_react["default"].createElement(SortIcon, null, sortColumnIndex === index ? sortOrder === "ascending" ? _Icons["default"].arrowUp : _Icons["default"].arrowDown : _Icons["default"].bothArrows)));
|
|
114
121
|
}))), /*#__PURE__*/_react["default"].createElement("tbody", null, filteredResultset.map(function (cells, index) {
|
|
115
122
|
return /*#__PURE__*/_react["default"].createElement("tr", {
|
|
@@ -146,9 +153,9 @@ var DxcResultsetTableContainer = _styledComponents["default"].div(_templateObjec
|
|
|
146
153
|
}, function (props) {
|
|
147
154
|
return props.margin && (0, _typeof2["default"])(props.margin) === "object" && props.margin.left ? _variables.spaces[props.margin.left] : "";
|
|
148
155
|
});
|
|
149
|
-
var HeaderContainer = _styledComponents["default"].span(_templateObject2 || (_templateObject2 = (0, _taggedTemplateLiteral2["default"])(["\n display: flex;\n align-items: center;\n justify-content: ", ";\n gap:
|
|
156
|
+
var HeaderContainer = _styledComponents["default"].span(_templateObject2 || (_templateObject2 = (0, _taggedTemplateLiteral2["default"])(["\n display: flex;\n align-items: center;\n justify-content: ", ";\n gap: ", ";\n width: fit-content;\n border: 1px solid transparent;\n border-radius: 2px;\n cursor: ", ";\n\n ", "\n"])), function (props) {
|
|
150
157
|
return props.theme.headerTextAlign === "center" ? "center" : props.theme.headerTextAlign === "right" ? "flex-end" : "flex-start";
|
|
151
|
-
}, function (props) {
|
|
158
|
+
}, _coreTokens["default"].spacing_8, function (props) {
|
|
152
159
|
return props.isSortable ? "pointer" : "default";
|
|
153
160
|
}, function (props) {
|
|
154
161
|
return props.isSortable && "&:focus {\n outline: #0095ff solid 2px;\n }";
|
|
@@ -156,4 +163,5 @@ var HeaderContainer = _styledComponents["default"].span(_templateObject2 || (_te
|
|
|
156
163
|
var SortIcon = _styledComponents["default"].span(_templateObject3 || (_templateObject3 = (0, _taggedTemplateLiteral2["default"])(["\n display: flex;\n height: 14px;\n width: 14px;\n color: ", ";\n\n svg {\n height: 100%;\n width: 100%;\n }\n"])), function (props) {
|
|
157
164
|
return props.theme.sortIconColor;
|
|
158
165
|
});
|
|
166
|
+
DxcResultsetTable.ActionsCell = _ActionsCell["default"];
|
|
159
167
|
var _default = exports["default"] = DxcResultsetTable;
|
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
import React from "react";
|
|
2
2
|
import DxcResultsetTable from "./ResultsetTable";
|
|
3
|
-
import DxcButton from "../button/Button";
|
|
4
3
|
import Title from "../../.storybook/components/Title";
|
|
5
4
|
import ExampleContainer from "../../.storybook/components/ExampleContainer";
|
|
6
5
|
import { userEvent, within } from "@storybook/testing-library";
|
|
@@ -13,7 +12,7 @@ export default {
|
|
|
13
12
|
|
|
14
13
|
const deleteIcon = (
|
|
15
14
|
<svg xmlns="http://www.w3.org/2000/svg" height="24" viewBox="0 0 24 24" width="24">
|
|
16
|
-
<path d="M6 19c0 1.1.9 2 2 2h8c1.1 0 2-.9 2-2V7H6v12zM19 4h-3.5l-1-1h-5l-1 1H5v2h14V4z" />
|
|
15
|
+
<path fill="currentColor" d="M6 19c0 1.1.9 2 2 2h8c1.1 0 2-.9 2-2V7H6v12zM19 4h-3.5l-1-1h-5l-1 1H5v2h14V4z" />
|
|
17
16
|
<path d="M0 0h24v24H0z" fill="none" />
|
|
18
17
|
</svg>
|
|
19
18
|
);
|
|
@@ -29,17 +28,66 @@ const rows = [
|
|
|
29
28
|
[{ displayValue: "006" }, { displayValue: "Cris" }, { displayValue: "Paris" }],
|
|
30
29
|
];
|
|
31
30
|
|
|
31
|
+
const actions = [
|
|
32
|
+
{
|
|
33
|
+
title: "icon",
|
|
34
|
+
onClick: (value?) => {
|
|
35
|
+
console.log(value);
|
|
36
|
+
},
|
|
37
|
+
options: [
|
|
38
|
+
{
|
|
39
|
+
value: "1",
|
|
40
|
+
label: "Amazon with a very long text",
|
|
41
|
+
},
|
|
42
|
+
{
|
|
43
|
+
value: "2",
|
|
44
|
+
label: "Ebay",
|
|
45
|
+
},
|
|
46
|
+
{
|
|
47
|
+
value: "3",
|
|
48
|
+
label: "Apple",
|
|
49
|
+
},
|
|
50
|
+
],
|
|
51
|
+
},
|
|
52
|
+
{
|
|
53
|
+
icon: "https://www.freepnglogos.com/uploads/facebook-logo-design-1.png",
|
|
54
|
+
title: "icon",
|
|
55
|
+
onClick: () => {},
|
|
56
|
+
},
|
|
57
|
+
{
|
|
58
|
+
icon: deleteIcon,
|
|
59
|
+
title: "icon",
|
|
60
|
+
onClick: () => {},
|
|
61
|
+
disabled: true,
|
|
62
|
+
},
|
|
63
|
+
{
|
|
64
|
+
icon: deleteIcon,
|
|
65
|
+
title: "icon",
|
|
66
|
+
onClick: () => {},
|
|
67
|
+
},
|
|
68
|
+
];
|
|
69
|
+
|
|
32
70
|
const rowsIcon = [
|
|
33
71
|
[
|
|
34
72
|
{ displayValue: "001", sortValue: "001" },
|
|
35
73
|
{ displayValue: "Peter" },
|
|
36
|
-
{
|
|
74
|
+
{
|
|
75
|
+
displayValue: <DxcResultsetTable.ActionsCell actions={actions} />,
|
|
76
|
+
},
|
|
77
|
+
],
|
|
78
|
+
[
|
|
79
|
+
{ displayValue: "002", sortValue: "002" },
|
|
80
|
+
{ displayValue: "Louis" },
|
|
81
|
+
{
|
|
82
|
+
displayValue: <DxcResultsetTable.ActionsCell actions={actions} />,
|
|
83
|
+
},
|
|
37
84
|
],
|
|
38
|
-
[{ displayValue: "002", sortValue: "002" }, { displayValue: "Louis" }, { displayValue: "" }],
|
|
39
85
|
[
|
|
40
86
|
{ displayValue: "003", sortValue: "003" },
|
|
41
87
|
{ displayValue: "Mark" },
|
|
42
|
-
{
|
|
88
|
+
{
|
|
89
|
+
displayValue: <DxcResultsetTable.ActionsCell actions={actions} />,
|
|
90
|
+
},
|
|
43
91
|
],
|
|
44
92
|
];
|
|
45
93
|
|
|
@@ -206,6 +254,25 @@ export const Chromatic = () => (
|
|
|
206
254
|
<DxcResultsetTable columns={columnsSortable} rows={longValues} />
|
|
207
255
|
</SmallContainer>
|
|
208
256
|
</ExampleContainer>
|
|
257
|
+
<ExampleContainer>
|
|
258
|
+
<Title title="Reduced sortable table" theme="light" level={4} />
|
|
259
|
+
<DxcResultsetTable columns={columnsSortable} rows={rowsSortable} mode="reduced" />
|
|
260
|
+
</ExampleContainer>
|
|
261
|
+
{/* PENDING SMALL ICON VERSION */}
|
|
262
|
+
<ExampleContainer>
|
|
263
|
+
<Title title="Reduced with items per page option" theme="light" level={4} />
|
|
264
|
+
<DxcResultsetTable columns={columns} rows={rows} itemsPerPage={2} itemsPerPageOptions={[2, 3]} mode="reduced" />
|
|
265
|
+
</ExampleContainer>
|
|
266
|
+
<ExampleContainer>
|
|
267
|
+
<Title title="Reduced scroll resultset table" theme="light" level={4} />
|
|
268
|
+
<DxcResultsetTable columns={longColumns} rows={longRows} mode="reduced" />
|
|
269
|
+
</ExampleContainer>
|
|
270
|
+
<ExampleContainer>
|
|
271
|
+
<SmallContainer>
|
|
272
|
+
<Title title="Reduced small container and text overflow" theme="light" level={4} />
|
|
273
|
+
<DxcResultsetTable columns={columnsSortable} rows={longValues} mode="reduced" />
|
|
274
|
+
</SmallContainer>
|
|
275
|
+
</ExampleContainer>
|
|
209
276
|
<Title title="Margins" theme="light" level={2} />
|
|
210
277
|
<ExampleContainer>
|
|
211
278
|
<Title title="Xxsmall" theme="light" level={4} />
|
|
@@ -298,3 +365,17 @@ LastPage.play = async ({ canvasElement }) => {
|
|
|
298
365
|
const nextButton = canvas.getAllByRole("button")[3];
|
|
299
366
|
await userEvent.click(nextButton);
|
|
300
367
|
};
|
|
368
|
+
|
|
369
|
+
const ResultsetActionsCellDropdown = () => (
|
|
370
|
+
<ExampleContainer>
|
|
371
|
+
<Title title="Dropdown Action" theme="light" level={4} />
|
|
372
|
+
<DxcResultsetTable columns={columns} rows={rowsIcon} itemsPerPage={2} />
|
|
373
|
+
</ExampleContainer>
|
|
374
|
+
);
|
|
375
|
+
|
|
376
|
+
export const DropdownAction = ResultsetActionsCellDropdown.bind({});
|
|
377
|
+
DropdownAction.play = async ({ canvasElement }) => {
|
|
378
|
+
const canvas = within(canvasElement);
|
|
379
|
+
const dropdown = canvas.getAllByRole("button")[5];
|
|
380
|
+
await userEvent.click(dropdown);
|
|
381
|
+
};
|
|
@@ -39,6 +39,18 @@ global.ResizeObserver = /*#__PURE__*/function () {
|
|
|
39
39
|
}]);
|
|
40
40
|
return ResizeObserver;
|
|
41
41
|
}();
|
|
42
|
+
var icon = /*#__PURE__*/_react["default"].createElement("svg", {
|
|
43
|
+
xmlns: "http://www.w3.org/2000/svg",
|
|
44
|
+
height: "24px",
|
|
45
|
+
viewBox: "0 0 24 24",
|
|
46
|
+
width: "24px",
|
|
47
|
+
fill: "currentColor"
|
|
48
|
+
}, /*#__PURE__*/_react["default"].createElement("path", {
|
|
49
|
+
d: "M0 0h24v24H0V0zm0 0h24v24H0V0z",
|
|
50
|
+
fill: "none"
|
|
51
|
+
}), /*#__PURE__*/_react["default"].createElement("path", {
|
|
52
|
+
d: "M1 9l2 2c4.97-4.97 13.03-4.97 18 0l2-2C16.93 2.93 7.08 2.93 1 9zm8 8l3 3 3-3c-1.65-1.66-4.34-1.66-6 0zm-4-4l2 2c2.76-2.76 7.24-2.76 10 0l2-2C15.14 9.14 8.87 9.14 5 13z"
|
|
53
|
+
}));
|
|
42
54
|
var columns = [{
|
|
43
55
|
displayValue: "Id",
|
|
44
56
|
isSortable: false
|
|
@@ -302,4 +314,58 @@ describe("Resultset table component tests", function () {
|
|
|
302
314
|
_react2.fireEvent.click(lastButton);
|
|
303
315
|
expect(getAllByRole("row").length - 1).toEqual(1);
|
|
304
316
|
});
|
|
317
|
+
test("Resultset table with ActionsCell", function () {
|
|
318
|
+
var onSelectOption = jest.fn();
|
|
319
|
+
var onClick = jest.fn();
|
|
320
|
+
var actions = [{
|
|
321
|
+
icon: icon,
|
|
322
|
+
title: "icon1",
|
|
323
|
+
onClick: onSelectOption,
|
|
324
|
+
options: [{
|
|
325
|
+
value: "1",
|
|
326
|
+
label: "Amazon"
|
|
327
|
+
}, {
|
|
328
|
+
value: "2",
|
|
329
|
+
label: "Ebay"
|
|
330
|
+
}, {
|
|
331
|
+
value: "3",
|
|
332
|
+
label: "Aliexpress"
|
|
333
|
+
}]
|
|
334
|
+
}, {
|
|
335
|
+
icon: icon,
|
|
336
|
+
title: "icon2",
|
|
337
|
+
onClick: onClick
|
|
338
|
+
}];
|
|
339
|
+
var actionRows = [[{
|
|
340
|
+
displayValue: "001",
|
|
341
|
+
sortValue: "001"
|
|
342
|
+
}, {
|
|
343
|
+
displayValue: "Peter",
|
|
344
|
+
sortValue: "Peter"
|
|
345
|
+
}, {
|
|
346
|
+
displayValue: /*#__PURE__*/_react["default"].createElement(_ResultsetTable["default"].ActionsCell, {
|
|
347
|
+
actions: actions
|
|
348
|
+
}),
|
|
349
|
+
sortValue: "Actions"
|
|
350
|
+
}]];
|
|
351
|
+
var _render8 = (0, _react2.render)( /*#__PURE__*/_react["default"].createElement(_ResultsetTable["default"], {
|
|
352
|
+
columns: columns,
|
|
353
|
+
rows: actionRows,
|
|
354
|
+
itemsPerPage: 3
|
|
355
|
+
})),
|
|
356
|
+
getAllByRole = _render8.getAllByRole,
|
|
357
|
+
getByRole = _render8.getByRole,
|
|
358
|
+
getByText = _render8.getByText;
|
|
359
|
+
var dropdown = getAllByRole("button")[2];
|
|
360
|
+
(0, _react2.act)(function () {
|
|
361
|
+
_userEvent["default"].click(dropdown);
|
|
362
|
+
});
|
|
363
|
+
expect(getByRole("menu")).toBeTruthy();
|
|
364
|
+
var option = getByText("Aliexpress");
|
|
365
|
+
_userEvent["default"].click(option);
|
|
366
|
+
expect(onSelectOption).toHaveBeenCalledWith("3");
|
|
367
|
+
var action = getAllByRole("button")[1];
|
|
368
|
+
_userEvent["default"].click(action);
|
|
369
|
+
expect(onClick).toHaveBeenCalled();
|
|
370
|
+
});
|
|
305
371
|
});
|
|
@@ -63,5 +63,11 @@ type Props = {
|
|
|
63
63
|
* Value of the tabindex attribute applied to the sortable icon.
|
|
64
64
|
*/
|
|
65
65
|
tabIndex?: number;
|
|
66
|
+
/**
|
|
67
|
+
* Determines the visual style and layout
|
|
68
|
+
* - "default": The default mode with big spacing
|
|
69
|
+
* - "reduced": A reduced mode with minimal spacing for dense tables
|
|
70
|
+
*/
|
|
71
|
+
mode?: "default" | "reduced";
|
|
66
72
|
};
|
|
67
73
|
export default Props;
|