Skip to content

Commit dd2ff88

Browse files
zlk89benjycui
authored andcommitted
fix: make node clickable when not selectable (#133)
* make node clickable when not selectable * address PR comments
1 parent 3fbe988 commit dd2ff88

File tree

3 files changed

+67
-0
lines changed

3 files changed

+67
-0
lines changed

examples/basic.js

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -74,6 +74,27 @@ const Demo = React.createClass({
7474
</TreeNode>
7575
</TreeNode>
7676
</Tree>
77+
78+
<h2>Check on Click TreeNode</h2>
79+
<Tree
80+
className="myCls"
81+
showLine
82+
checkable
83+
selectable={ false }
84+
defaultExpandAll
85+
onExpand={this.onExpand}
86+
defaultSelectedKeys={this.state.defaultSelectedKeys}
87+
defaultCheckedKeys={this.state.defaultCheckedKeys}
88+
onSelect={this.onSelect}
89+
onCheck={this.onCheck}
90+
>
91+
<TreeNode title="parent 1" key="0-0">
92+
<TreeNode title="parent 1-1" key="0-0-1">
93+
<TreeNode title="parent 1-1-0" key="0-0-1-0" disableCheckbox />
94+
<TreeNode title="parent 1-1-1" key="0-0-1-1" />
95+
</TreeNode>
96+
</TreeNode>
97+
</Tree>
7798
</div>);
7899
},
79100
});

src/TreeNode.jsx

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -264,6 +264,9 @@ class TreeNode extends React.Component {
264264
e.preventDefault();
265265
if (this.isSelectable()) {
266266
this.onSelect();
267+
} else if (props.checkable && !props.disableCheckbox) {
268+
// && !props.disabled is checked on line 259
269+
this.onCheck();
267270
}
268271
};
269272
if (props.draggable) {

tests/Tree.spec.js

Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -536,6 +536,49 @@ describe('Tree', () => {
536536
});
537537
});
538538

539+
540+
describe('checkable but not selectable', () => {
541+
it('fires check event when click on TreeNode', () => {
542+
const handleCheck = jest.fn();
543+
const wrapper = mount(
544+
<Tree checkable selectable={ false } onCheck={handleCheck}>
545+
<TreeNode title="parent 1" key="0-0">
546+
<TreeNode title="leaf 1" key="0-0-0" />
547+
</TreeNode>
548+
</Tree>
549+
);
550+
wrapper.find('.rc-tree-switcher').simulate('click');
551+
const treeNode1 = wrapper.find(TreeNode).first();
552+
const treeNode2 = wrapper.find(TreeNode).last();
553+
const treeElm1 = wrapper.find(Tree).props().children;
554+
const treeElm2 = treeNode1.props().children;
555+
556+
wrapper.find('.rc-tree-node-content-wrapper').first().simulate('click');
557+
expect(handleCheck).toBeCalledWith(['0-0-0', '0-0'], {
558+
checked: true,
559+
checkedNodes: [treeElm2, treeElm1],
560+
checkedNodesPositions: [
561+
{ node: treeElm2, pos: '0-0-0' },
562+
{ node: treeElm1, pos: '0-0' },
563+
],
564+
event: 'check',
565+
halfCheckedKeys: [],
566+
node: treeNode1.node,
567+
});
568+
569+
wrapper.find('.rc-tree-node-content-wrapper').last().simulate('click');
570+
expect(handleCheck).toBeCalledWith([], {
571+
checked: false,
572+
checkedNodes: [],
573+
checkedNodesPositions: [],
574+
event: 'check',
575+
halfCheckedKeys: [],
576+
node: treeNode2.node,
577+
});
578+
});
579+
});
580+
581+
539582
it('fires rightClick event', () => {
540583
const handleRightClick = jest.fn();
541584
const wrapper = mount(

0 commit comments

Comments
 (0)