1
1
import React , { Fragment , Component } from "react" ;
2
2
import PropTypes from "prop-types" ;
3
3
import classNames from "classnames" ;
4
- import { isLoading , isLeaf , isExpanded , arrayFill , closest } from "./utils" ;
4
+ import { arrayFill , closest } from "./utils" ;
5
5
import TreeContext from "./TreeContext" ;
6
6
7
- export default class NodeItem extends Component {
7
+ class NodeItem extends Component {
8
8
static contextType = TreeContext ;
9
9
10
- static propTypes = {
11
- node : PropTypes . object ,
12
- data : PropTypes . object ,
13
- } ;
14
-
15
- static defaultProps = { } ;
16
-
17
10
getTree ( ) {
18
11
return this . context . tree ;
19
12
}
13
+
20
14
getTreeProps ( ) {
21
15
const tree = this . getTree ( ) ;
22
16
return tree . props ;
@@ -40,9 +34,9 @@ export default class NodeItem extends Component {
40
34
const { prefixCls, renderIndentIcons } = this . getTreeProps ( ) ;
41
35
const { node, data } = this . props ;
42
36
43
- const relativeDepth = node . relativeDepth - 1 ;
37
+ const depth = node . getDepth ( ) - 1 ;
44
38
45
- if ( relativeDepth <= 0 ) return null ;
39
+ if ( depth <= 0 ) return null ;
46
40
47
41
const props = {
48
42
className : `${ prefixCls } -indent` ,
@@ -57,21 +51,20 @@ export default class NodeItem extends Component {
57
51
} ) ;
58
52
}
59
53
60
- const indents = arrayFill ( Array ( relativeDepth ) , 0 ) ;
54
+ const indents = arrayFill ( Array ( depth ) , 0 ) ;
61
55
62
56
return indents . map ( ( v , i ) => < div { ...props } key = { i } /> ) ;
63
57
}
64
58
65
59
renderExpanderIcon ( ) {
66
- const tree = this . getTree ( ) ;
67
60
const { prefixCls, renderExpanderIcon } = this . getTreeProps ( ) ;
68
61
const { node, data } = this . props ;
69
62
70
- const leaf = tree . isLeaf ( node ) ;
63
+ const leaf = node . isLeaf ( ) ;
71
64
const classes = classNames ( {
72
65
[ `${ prefixCls } -icon` ] : true ,
73
66
[ `${ prefixCls } -expander-icon` ] : ! leaf ,
74
- open : ! leaf && tree . isExpanded ( node ) ,
67
+ open : ! leaf && node . isExpanded ( ) ,
75
68
[ `${ prefixCls } -indent` ] : leaf ,
76
69
} ) ;
77
70
@@ -117,11 +110,10 @@ export default class NodeItem extends Component {
117
110
}
118
111
119
112
renderIcon ( ) {
120
- const tree = this . getTree ( ) ;
121
113
const { prefixCls, renderIcon } = this . getTreeProps ( ) ;
122
114
const { node, data } = this . props ;
123
115
124
- const leaf = tree . isLeaf ( node ) ;
116
+ const leaf = node . isLeaf ( ) ;
125
117
const classes = classNames ( {
126
118
[ `${ prefixCls } -icon` ] : true ,
127
119
[ `${ prefixCls } -icon-parent` ] : ! leaf ,
@@ -151,8 +143,8 @@ export default class NodeItem extends Component {
151
143
152
144
const classes = classNames ( {
153
145
[ `${ prefixCls } -icon` ] : true ,
154
- [ `${ prefixCls } -icon-checkbox` ] : true ,
155
- checked : ! ! node . checked ,
146
+ // [`${prefixCls}-icon-checkbox`]: true,
147
+ // checked: !!node.checked,
156
148
} ) ;
157
149
158
150
const props = {
@@ -168,7 +160,8 @@ export default class NodeItem extends Component {
168
160
} ) ;
169
161
}
170
162
171
- return < div { ...props } /> ;
163
+ return null ;
164
+ // return <div {...props} />;
172
165
}
173
166
174
167
renderLabel ( ) {
@@ -221,6 +214,8 @@ export default class NodeItem extends Component {
221
214
onNodeClick,
222
215
} = treeProps ;
223
216
217
+ const id = node . getId ( ) ;
218
+
224
219
const { selectedKeys, expandedKeys } = tree . state ;
225
220
const isExpanderClick = closest (
226
221
e . target ,
@@ -235,13 +230,13 @@ export default class NodeItem extends Component {
235
230
236
231
let newSelectedKeys = selectedKeys ;
237
232
const newExpandedKeys = [ ...expandedKeys ] ;
238
- const idx = newExpandedKeys . indexOf ( node . id ) ;
233
+ const idx = newExpandedKeys . indexOf ( id ) ;
239
234
const isExpanded = idx !== - 1 ;
240
- const sIdx = selectedKeys . indexOf ( node . id ) ;
235
+ const sIdx = selectedKeys . indexOf ( id ) ;
241
236
const isSelected = sIdx !== - 1 ;
242
237
243
238
if ( ! isSelected && selectable ) {
244
- newSelectedKeys = multiple ? [ ...selectedKeys , node . id ] : [ node . id ] ;
239
+ newSelectedKeys = multiple ? [ ...selectedKeys , id ] : [ id ] ;
245
240
246
241
if ( ! isSelectControlled ) {
247
242
newState . selectedKeys = newSelectedKeys ;
@@ -266,7 +261,7 @@ export default class NodeItem extends Component {
266
261
if ( isExpanded ) {
267
262
newExpandedKeys . splice ( idx , 1 ) ;
268
263
} else {
269
- newExpandedKeys . push ( node . id ) ;
264
+ newExpandedKeys . push ( id ) ;
270
265
}
271
266
272
267
if ( ! isExpandedControlled ) {
@@ -322,10 +317,9 @@ export default class NodeItem extends Component {
322
317
const nodeProps = {
323
318
className : classNames ( {
324
319
[ `${ prefixCls } -item` ] : true ,
325
- [ `${ prefixCls } -item-selected` ] : tree . isSelected ( node ) ,
326
- //[`${prefixCls}-item-wrapper`]: true,
327
- [ `${ prefixCls } -item-expanded` ] : tree . isExpanded ( node ) ,
328
- [ node . cls ] : node . cls ,
320
+ [ `${ prefixCls } -item-selected` ] : node . isSelected ( ) ,
321
+ [ `${ prefixCls } -item-expanded` ] : node . isExpanded ( ) ,
322
+ [ data . cls ] : data . cls ,
329
323
} ) ,
330
324
onClick : this . handleNodeClick ,
331
325
onDoubleClick : event => {
@@ -397,21 +391,20 @@ export default class NodeItem extends Component {
397
391
}
398
392
399
393
renderNode ( ) {
400
- const tree = this . getTree ( ) ;
401
394
const { showIcon, showExpanderIcon, checkable } = this . getTreeProps ( ) ;
402
395
const { node } = this . props ;
403
396
404
397
return (
405
398
< div { ...this . getNodeProps ( ) } >
406
399
< Fragment >
407
400
{ this . renderIndentIcons ( ) }
408
- { tree . isLoading ( node )
401
+ { node . isLoading ( )
409
402
? this . renderLoadingIcon ( )
410
403
: // : showExpanderIcon
411
404
// ? this.renderExpanderIcon() : null
412
405
this . renderExpanderIcon ( ) }
413
406
{ showIcon ? this . renderIcon ( ) : null }
414
- { checkable ? this . renderCheckbox ( ) : null }
407
+ { this . renderCheckbox ( ) }
415
408
{ this . renderLabel ( ) }
416
409
{ this . renderExtIcons ( ) }
417
410
</ Fragment >
@@ -421,10 +414,24 @@ export default class NodeItem extends Component {
421
414
422
415
render ( ) {
423
416
const { renderNode } = this . getTreeProps ( ) ;
424
- const { node } = this . props ;
417
+ const { node, data } = this . props ;
425
418
426
419
return renderNode
427
- ? renderNode ( node , this . getNodeProps ( ) , this )
420
+ ? renderNode ( {
421
+ node,
422
+ data,
423
+ props : this . getNodeProps ( ) ,
424
+ component : this ,
425
+ } )
428
426
: this . renderNode ( ) ;
429
427
}
430
428
}
429
+
430
+ NodeItem . propTypes = {
431
+ node : PropTypes . object ,
432
+ data : PropTypes . object ,
433
+ } ;
434
+
435
+ NodeItem . defaultProps = { } ;
436
+
437
+ export default NodeItem ;
0 commit comments