@@ -39,28 +39,15 @@ class Tree extends React.Component {
39
39
}
40
40
41
41
onCheck ( node ) {
42
- const checked = [ ...this . props . checked ] ;
43
- const isChecked = node . checked ;
42
+ const { checked, onCheck } = this . props ;
44
43
45
- this . setCheckState ( checked , node , isChecked ) ;
46
-
47
- this . props . onCheck ( checked ) ;
44
+ onCheck ( this . toggleChecked ( [ ...checked ] , node , node . checked ) ) ;
48
45
}
49
46
50
47
onExpand ( node ) {
51
- const isExpanded = node . expanded ;
52
- const expanded = [ ...this . props . expanded ] ;
53
- const nodeIndex = expanded . indexOf ( node . value ) ;
54
-
55
- if ( ! isExpanded && nodeIndex > - 1 ) {
56
- // Node is now collapsed, remove from expanded list
57
- expanded . splice ( nodeIndex , 1 ) ;
58
- } else if ( isExpanded && nodeIndex === - 1 ) {
59
- // Add node to expanded list
60
- expanded . push ( node . value ) ;
61
- }
48
+ const { expanded, onExpand } = this . props ;
62
49
63
- this . props . onExpand ( expanded ) ;
50
+ onExpand ( this . toggleNode ( [ ... expanded ] , node , node . expanded ) ) ;
64
51
}
65
52
66
53
getFormattedNodes ( nodes ) {
@@ -98,24 +85,30 @@ class Tree extends React.Component {
98
85
return 0 ;
99
86
}
100
87
101
- setCheckState ( checked , node , isChecked ) {
88
+ toggleChecked ( checked , node , isChecked ) {
102
89
if ( node . children !== null ) {
103
90
// Percolate check status down to all children
104
91
node . children . forEach ( ( child ) => {
105
- this . setCheckState ( checked , child , isChecked ) ;
92
+ this . toggleChecked ( checked , child , isChecked ) ;
106
93
} ) ;
107
94
} else {
108
95
// Set leaf to check/unchecked state
109
- const index = checked . indexOf ( node . value ) ;
96
+ this . toggleNode ( checked , node , isChecked ) ;
97
+ }
110
98
111
- if ( index > - 1 ) {
112
- checked . splice ( index , 1 ) ;
113
- }
99
+ return checked ;
100
+ }
114
101
115
- if ( isChecked ) {
116
- checked . push ( node . value ) ;
117
- }
102
+ toggleNode ( list , node , toggleValue ) {
103
+ const index = list . indexOf ( node . value ) ;
104
+
105
+ if ( index > - 1 && ! toggleValue ) {
106
+ list . splice ( index , 1 ) ;
107
+ } else if ( index === - 1 && toggleValue ) {
108
+ list . push ( node . value ) ;
118
109
}
110
+
111
+ return list ;
119
112
}
120
113
121
114
isEveryChildChecked ( node ) {
0 commit comments