@@ -109,6 +109,18 @@ class CheckboxTree extends React.Component {
109
109
return 0 ;
110
110
}
111
111
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
+
112
124
toggleChecked ( node , isChecked , noCascade ) {
113
125
if ( node . children === null || noCascade ) {
114
126
// Set the check status of a leaf node or an uncoupled parent
@@ -184,13 +196,13 @@ class CheckboxTree extends React.Component {
184
196
} ) ;
185
197
}
186
198
187
- renderTreeNodes ( nodes ) {
199
+ renderTreeNodes ( nodes , parent = { } ) {
188
200
const { disabled, expandDisabled, noCascade, optimisticToggle, showNodeIcon } = this . props ;
189
201
const treeNodes = nodes . map ( ( node ) => {
190
202
const key = `${ node . value } ` ;
191
203
const checked = this . getCheckState ( node , noCascade ) ;
192
204
const children = this . renderChildNodes ( node ) ;
193
- const nodeDisabled = ! ! ( disabled || node . disabled ) ;
205
+ const nodeDisabled = this . getDisabledState ( node , parent , disabled , noCascade ) ;
194
206
195
207
return (
196
208
< TreeNode
@@ -224,7 +236,7 @@ class CheckboxTree extends React.Component {
224
236
225
237
renderChildNodes ( node ) {
226
238
if ( node . children !== null && node . expanded ) {
227
- return this . renderTreeNodes ( node . children ) ;
239
+ return this . renderTreeNodes ( node . children , node ) ;
228
240
}
229
241
230
242
return null ;
0 commit comments