@@ -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