Skip to content

Commit 58b5ebe

Browse files
committed
Make node.disabled respect cascading behavior
1 parent e2d229b commit 58b5ebe

File tree

1 file changed

+15
-3
lines changed

1 file changed

+15
-3
lines changed

src/js/CheckboxTree.js

Lines changed: 15 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -109,6 +109,18 @@ class CheckboxTree extends React.Component {
109109
return 0;
110110
}
111111

112+
getDisabledState(node, parent, disabledProp, noCascade) {
113+
if (disabledProp) {
114+
return true;
115+
}
116+
117+
if (!noCascade && parent.disabled) {
118+
return true;
119+
}
120+
121+
return Boolean(node.disabled);
122+
}
123+
112124
toggleChecked(node, isChecked, noCascade) {
113125
if (node.children === null || noCascade) {
114126
// Set the check status of a leaf node or an uncoupled parent
@@ -184,13 +196,13 @@ class CheckboxTree extends React.Component {
184196
});
185197
}
186198

187-
renderTreeNodes(nodes) {
199+
renderTreeNodes(nodes, parent = {}) {
188200
const { disabled, expandDisabled, noCascade, optimisticToggle, showNodeIcon } = this.props;
189201
const treeNodes = nodes.map((node) => {
190202
const key = `${node.value}`;
191203
const checked = this.getCheckState(node, noCascade);
192204
const children = this.renderChildNodes(node);
193-
const nodeDisabled = !!(disabled || node.disabled);
205+
const nodeDisabled = this.getDisabledState(node, parent, disabled, noCascade);
194206

195207
return (
196208
<TreeNode
@@ -224,7 +236,7 @@ class CheckboxTree extends React.Component {
224236

225237
renderChildNodes(node) {
226238
if (node.children !== null && node.expanded) {
227-
return this.renderTreeNodes(node.children);
239+
return this.renderTreeNodes(node.children, node);
228240
}
229241

230242
return null;

0 commit comments

Comments
 (0)