1 | "use strict";
|
2 | Object.defineProperty(exports, "__esModule", { value: true });
|
3 | exports.DualListSelectorTreeItem = void 0;
|
4 | const tslib_1 = require("tslib");
|
5 | const React = tslib_1.__importStar(require("react"));
|
6 | const dual_list_selector_1 = tslib_1.__importDefault(require("@patternfly/react-styles/css/components/DualListSelector/dual-list-selector"));
|
7 | const react_styles_1 = require("@patternfly/react-styles");
|
8 | const Badge_1 = require("../Badge");
|
9 | const angle_right_icon_1 = tslib_1.__importDefault(require('@patternfly/react-icons/dist/js/icons/angle-right-icon'));
|
10 | const treeUtils_1 = require("./treeUtils");
|
11 | const DualListSelectorContext_1 = require("./DualListSelectorContext");
|
12 | const DualListSelectorTreeItemBase = (_a) => {
|
13 | var { onOptionCheck, children, className, id, text, defaultExpanded, hasBadge, isChecked, checkProps, badgeProps, itemData, isDisabled = false,
|
14 |
|
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 | };
|
60 | exports.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 | });
|
77 | exports.DualListSelectorTreeItem.displayName = 'DualListSelectorTreeItem';
|
78 |
|
\ | No newline at end of file |