diff --git a/src/js/CheckboxTree.js b/src/js/CheckboxTree.js index 2e2a99ae..3d67a8af 100644 --- a/src/js/CheckboxTree.js +++ b/src/js/CheckboxTree.js @@ -1,6 +1,6 @@ import classNames from 'classnames'; import isEqual from 'lodash/isEqual'; -import nanoid from 'nanoid'; +import { nanoid } from 'nanoid'; import PropTypes from 'prop-types'; import React from 'react'; @@ -193,6 +193,10 @@ class CheckboxTree extends React.Component { } isEveryChildChecked(node) { + if (!node.children || node.children.length === 0) { + return this.state.model.getNode(node.value).checked; + } + return node.children.every( (child) => this.state.model.getNode(child.value).checkState === 1, ); diff --git a/src/js/NodeModel.js b/src/js/NodeModel.js index 82797d56..4d2f2450 100644 --- a/src/js/NodeModel.js +++ b/src/js/NodeModel.js @@ -57,7 +57,7 @@ class NodeModel { } nodeHasChildren(node) { - return Array.isArray(node.children); + return Array.isArray(node.children) && node.children.length > 0; } getDisabledState(node, parent, disabledProp, noCascade) { @@ -163,6 +163,10 @@ class NodeModel { } isEveryChildChecked(node) { + if (!node.children || node.children.length === 0) { + return this.getNode(node.value).checked; + } + return node.children.every((child) => this.getNode(child.value).checked); } diff --git a/test/CheckboxTree.js b/test/CheckboxTree.js index 4c7f3c26..43576441 100644 --- a/test/CheckboxTree.js +++ b/test/CheckboxTree.js @@ -351,8 +351,8 @@ describe('', () => { />, ); - assert.equal(true, wrapper.find(TreeNode).prop('isParent')); - assert.equal(false, wrapper.find(TreeNode).prop('isLeaf')); + assert.equal(false, wrapper.find(TreeNode).prop('isParent')); + assert.equal(true, wrapper.find(TreeNode).prop('isLeaf')); }); it('should render a node with a non-empty "children" array as a parent', () => {