@@ -21609,38 +21609,31 @@ return /******/ (function(modules) { // webpackBootstrap
21609
21609
_createClass(Tree, [{
21610
21610
key: 'onCheck',
21611
21611
value: function onCheck(node) {
21612
- var checked = [].concat(_toConsumableArray(this.props.checked));
21613
- var isChecked = node.checked;
21612
+ var _props = this.props;
21613
+ var checked = _props.checked;
21614
+ var onCheck = _props.onCheck;
21614
21615
21615
- this.setCheckState(checked, node, isChecked);
21616
21616
21617
- this.props.onCheck( checked);
21617
+ onCheck( this.toggleChecked([].concat(_toConsumableArray( checked)), node, node.checked) );
21618
21618
}
21619
21619
}, {
21620
21620
key: 'onExpand',
21621
21621
value: function onExpand(node) {
21622
- var isExpanded = node.expanded;
21623
- var expanded = [].concat(_toConsumableArray(this.props.expanded));
21624
- var nodeIndex = expanded.indexOf(node.value);
21625
-
21626
- if (!isExpanded && nodeIndex > -1) {
21627
- // Node is now collapsed, remove from expanded list
21628
- expanded.splice(nodeIndex, 1);
21629
- } else if (isExpanded && nodeIndex === -1) {
21630
- // Add node to expanded list
21631
- expanded.push(node.value);
21632
- }
21622
+ var _props2 = this.props;
21623
+ var expanded = _props2.expanded;
21624
+ var onExpand = _props2.onExpand;
21625
+
21633
21626
21634
- this.props.onExpand( expanded);
21627
+ onExpand( this.toggleNode([].concat(_toConsumableArray( expanded)), node, node.expanded) );
21635
21628
}
21636
21629
}, {
21637
21630
key: 'getFormattedNodes',
21638
21631
value: function getFormattedNodes(nodes) {
21639
21632
var _this2 = this;
21640
21633
21641
- var _props = this.props;
21642
- var checked = _props .checked;
21643
- var expanded = _props .expanded;
21634
+ var _props3 = this.props;
21635
+ var checked = _props3 .checked;
21636
+ var expanded = _props3 .expanded;
21644
21637
21645
21638
21646
21639
return nodes.map(function (node) {
@@ -21676,27 +21669,34 @@ return /******/ (function(modules) { // webpackBootstrap
21676
21669
return 0;
21677
21670
}
21678
21671
}, {
21679
- key: 'setCheckState ',
21680
- value: function setCheckState (checked, node, isChecked) {
21672
+ key: 'toggleChecked ',
21673
+ value: function toggleChecked (checked, node, isChecked) {
21681
21674
var _this3 = this;
21682
21675
21683
21676
if (node.children !== null) {
21684
21677
// Percolate check status down to all children
21685
21678
node.children.forEach(function (child) {
21686
- _this3.setCheckState (checked, child, isChecked);
21679
+ _this3.toggleChecked (checked, child, isChecked);
21687
21680
});
21688
21681
} else {
21689
21682
// Set leaf to check/unchecked state
21690
- var index = checked.indexOf(node.value);
21691
-
21692
- if (index > -1) {
21693
- checked.splice(index, 1);
21694
- }
21683
+ this.toggleNode(checked, node, isChecked);
21684
+ }
21695
21685
21696
- if (isChecked) {
21697
- checked.push(node.value);
21698
- }
21686
+ return checked;
21687
+ }
21688
+ }, {
21689
+ key: 'toggleNode',
21690
+ value: function toggleNode(list, node, toggleValue) {
21691
+ var index = list.indexOf(node.value);
21692
+
21693
+ if (index > -1 && !toggleValue) {
21694
+ list.splice(index, 1);
21695
+ } else if (index === -1 && toggleValue) {
21696
+ list.push(node.value);
21699
21697
}
21698
+
21699
+ return list;
21700
21700
}
21701
21701
}, {
21702
21702
key: 'isEveryChildChecked',
@@ -21740,6 +21740,7 @@ return /******/ (function(modules) { // webpackBootstrap
21740
21740
key: key,
21741
21741
checked: checked,
21742
21742
expanded: node.expanded,
21743
+ optimisticToggle: _this6.props.optimisticToggle,
21743
21744
rawChildren: node.children,
21744
21745
title: node.title,
21745
21746
value: node.value,
@@ -21824,14 +21825,16 @@ return /******/ (function(modules) { // webpackBootstrap
21824
21825
nameAsArray: _react2.default.PropTypes.bool,
21825
21826
nodes: _react2.default.PropTypes.arrayOf(_react2.default.PropTypes.oneOfType([_react2.default.PropTypes.shape(_nodeShape2.default), _react2.default.PropTypes.shape(_extends({}, _nodeShape2.default, {
21826
21827
children: _react2.default.PropTypes.arrayOf(_nodeShape2.default)
21827
- }))]))
21828
+ }))])),
21829
+ optimisticToggle: _react2.default.PropTypes.bool
21828
21830
};
21829
21831
Tree.defaultProps = {
21830
21832
checked: [],
21831
21833
expanded: [],
21832
21834
name: undefined,
21833
21835
nameAsArray: false,
21834
- nodes: []
21836
+ nodes: [],
21837
+ optimisticToggle: true
21835
21838
};
21836
21839
exports.default = Tree;
21837
21840
@@ -21879,11 +21882,16 @@ return /******/ (function(modules) { // webpackBootstrap
21879
21882
_createClass(TreeNode, [{
21880
21883
key: 'onCheck',
21881
21884
value: function onCheck() {
21882
- var isChecked = 0;
21885
+ var isChecked = false;
21886
+
21887
+ // Toggle off state to checked
21888
+ if (this.props.checked === 0) {
21889
+ isChecked = true;
21890
+ }
21883
21891
21884
- // Toggle off/ partial check state to checked
21885
- if (this.props.checked === 0 || this.props.checked === 2) {
21886
- isChecked = 1 ;
21892
+ // Toggle partial state based on model
21893
+ if (this.props.checked === 2) {
21894
+ isChecked = this.props.optimisticToggle ;
21887
21895
}
21888
21896
21889
21897
this.props.onCheck({
@@ -21993,6 +22001,7 @@ return /******/ (function(modules) { // webpackBootstrap
21993
22001
TreeNode.propTypes = {
21994
22002
checked: _react2.default.PropTypes.number.isRequired,
21995
22003
expanded: _react2.default.PropTypes.bool.isRequired,
22004
+ optimisticToggle: _react2.default.PropTypes.bool.isRequired,
21996
22005
title: _react2.default.PropTypes.string.isRequired,
21997
22006
value: _react2.default.PropTypes.string.isRequired,
21998
22007
onCheck: _react2.default.PropTypes.func.isRequired,
0 commit comments