UNPKG

5.86 kBJavaScriptView Raw
1"use strict";
2Object.defineProperty(exports, "__esModule", { value: true });
3exports.DualListSelectorTreeItem = void 0;
4const tslib_1 = require("tslib");
5const React = tslib_1.__importStar(require("react"));
6const dual_list_selector_1 = tslib_1.__importDefault(require("@patternfly/react-styles/css/components/DualListSelector/dual-list-selector"));
7const react_styles_1 = require("@patternfly/react-styles");
8const Badge_1 = require("../Badge");
9const angle_right_icon_1 = tslib_1.__importDefault(require('@patternfly/react-icons/dist/js/icons/angle-right-icon'));
10const treeUtils_1 = require("./treeUtils");
11const DualListSelectorContext_1 = require("./DualListSelectorContext");
12const DualListSelectorTreeItemBase = (_a) => {
13 var { onOptionCheck, children, className, id, text, defaultExpanded, hasBadge, isChecked, checkProps, badgeProps, itemData, isDisabled = false,
14 // eslint-disable-next-line @typescript-eslint/no-unused-vars
15 useMemo } = _a, props = tslib_1.__rest(_a, ["onOptionCheck", "children", "className", "id", "text", "defaultExpanded", "hasBadge", "isChecked", "checkProps", "badgeProps", "itemData", "isDisabled", "useMemo"]);
16 const ref = React.useRef(null);
17 const [isExpanded, setIsExpanded] = React.useState(defaultExpanded || false);
18 const { setFocusedOption } = React.useContext(DualListSelectorContext_1.DualListSelectorListContext);
19 React.useEffect(() => {
20 setIsExpanded(defaultExpanded);
21 }, [defaultExpanded]);
22 return (React.createElement("li", Object.assign({ className: react_styles_1.css(dual_list_selector_1.default.dualListSelectorListItem, className, children && dual_list_selector_1.default.modifiers.expandable, isExpanded && dual_list_selector_1.default.modifiers.expanded, isDisabled && dual_list_selector_1.default.modifiers.disabled), id: id }, props, { "aria-selected": isChecked, role: "treeitem" }, (isExpanded && { 'aria-expanded': 'true' })),
23 React.createElement("div", { className: react_styles_1.css(dual_list_selector_1.default.dualListSelectorListItemRow, isChecked && dual_list_selector_1.default.modifiers.selected, dual_list_selector_1.default.modifiers.check) },
24 React.createElement("div", { className: react_styles_1.css(dual_list_selector_1.default.dualListSelectorItem), ref: ref, tabIndex: -1, onClick: isDisabled
25 ? undefined
26 : evt => {
27 onOptionCheck && onOptionCheck(evt, !isChecked, itemData);
28 setFocusedOption(id);
29 } },
30 React.createElement("span", { className: react_styles_1.css(dual_list_selector_1.default.dualListSelectorItemMain) },
31 children && (React.createElement("div", { className: react_styles_1.css(dual_list_selector_1.default.dualListSelectorItemToggle), onClick: e => {
32 if (children) {
33 setIsExpanded(!isExpanded);
34 }
35 e.stopPropagation();
36 }, onKeyDown: (e) => {
37 if (e.key === ' ' || e.key === 'Enter') {
38 document.activeElement.click();
39 e.preventDefault();
40 }
41 }, tabIndex: -1 },
42 React.createElement("span", { className: react_styles_1.css(dual_list_selector_1.default.dualListSelectorItemToggleIcon) },
43 React.createElement(angle_right_icon_1.default, { "aria-hidden": true })))),
44 React.createElement("span", { className: react_styles_1.css(dual_list_selector_1.default.dualListSelectorItemCheck) },
45 React.createElement("input", Object.assign({ type: "checkbox", onChange: (evt) => {
46 onOptionCheck && onOptionCheck(evt, !isChecked, itemData);
47 setFocusedOption(id);
48 }, onClick: (evt) => evt.stopPropagation(), onKeyDown: (e) => {
49 if (e.key === ' ' || e.key === 'Enter') {
50 onOptionCheck && onOptionCheck(e, !isChecked, itemData);
51 setFocusedOption(id);
52 e.preventDefault();
53 }
54 }, ref: elem => elem && (elem.indeterminate = isChecked === null), checked: isChecked || false, tabIndex: -1 }, checkProps))),
55 React.createElement("span", { className: react_styles_1.css(dual_list_selector_1.default.dualListSelectorItemText) }, text),
56 hasBadge && children && (React.createElement("span", { className: react_styles_1.css(dual_list_selector_1.default.dualListSelectorItemCount) },
57 React.createElement(Badge_1.Badge, Object.assign({}, badgeProps), treeUtils_1.flattenTree(children.props.data).length)))))),
58 isExpanded && children));
59};
60exports.DualListSelectorTreeItem = React.memo(DualListSelectorTreeItemBase, (prevProps, nextProps) => {
61 if (!nextProps.useMemo) {
62 return false;
63 }
64 if (prevProps.className !== nextProps.className ||
65 prevProps.text !== nextProps.text ||
66 prevProps.id !== nextProps.id ||
67 prevProps.defaultExpanded !== nextProps.defaultExpanded ||
68 prevProps.checkProps !== nextProps.checkProps ||
69 prevProps.hasBadge !== nextProps.hasBadge ||
70 prevProps.badgeProps !== nextProps.badgeProps ||
71 prevProps.isChecked !== nextProps.isChecked ||
72 prevProps.itemData !== nextProps.itemData) {
73 return false;
74 }
75 return true;
76});
77exports.DualListSelectorTreeItem.displayName = 'DualListSelectorTreeItem';
78//# sourceMappingURL=DualListSelectorTreeItem.js.map
\No newline at end of file