Skip to content

Commit f2fbcb2

Browse files
authored
Merge pull request #70 from react-component/fix-clear-cache
Fix clear cache
2 parents 790bfb8 + e3b3757 commit f2fbcb2

File tree

7 files changed

+156
-5
lines changed

7 files changed

+156
-5
lines changed

examples/disable.html

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
placeholder

examples/disable.js

Lines changed: 73 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,73 @@
1+
/* eslint react/no-multi-comp:0, no-console:0 */
2+
import 'rc-tree-select/assets/index.less';
3+
import TreeSelect from 'rc-tree-select';
4+
import React from 'react';
5+
import ReactDOM from 'react-dom';
6+
7+
const SHOW_PARENT = TreeSelect.SHOW_PARENT;
8+
9+
const treeData = [{
10+
label: 'Node1',
11+
value: '0-0',
12+
key: '0-0',
13+
children: [{
14+
label: 'Child Node1',
15+
value: '0-0-0',
16+
key: '0-0-0',
17+
}],
18+
}, {
19+
label: 'Node2',
20+
value: '0-1',
21+
key: '0-1',
22+
children: [{
23+
label: 'Child Node3',
24+
value: '0-1-0',
25+
key: '0-1-0',
26+
}, {
27+
label: 'Child Node4',
28+
value: '0-1-1',
29+
key: '0-1-1',
30+
}, {
31+
label: 'Child Node5',
32+
value: '0-1-2',
33+
key: '0-1-2',
34+
}],
35+
}];
36+
37+
class Demo extends React.Component {
38+
state = {
39+
value: ['0-0-0'],
40+
disabled: false,
41+
}
42+
onChange = (value) => {
43+
console.log('onChange ', value, arguments);
44+
this.setState({ value });
45+
}
46+
switch = (checked) => {
47+
this.setState({ disabled: checked });
48+
}
49+
render() {
50+
const tProps = {
51+
treeData,
52+
disabled: this.state.disabled,
53+
value: this.state.value,
54+
onChange: this.onChange,
55+
multiple: true,
56+
allowClear: true,
57+
treeCheckable: true,
58+
showCheckedStrategy: SHOW_PARENT,
59+
searchPlaceholder: 'Please select',
60+
style: {
61+
width: 300,
62+
},
63+
};
64+
return (
65+
<div>
66+
<TreeSelect {...tProps} />
67+
<input type="checkbox" onChange={e => this.switch(e.target.checked)}/> 禁用
68+
</div>
69+
);
70+
}
71+
}
72+
73+
ReactDOM.render(<Demo />, document.getElementById('__react-content'));

src/Select.jsx

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -376,6 +376,7 @@ class Select extends Component {
376376
}
377377
event.stopPropagation();
378378
this._cacheTreeNodesStates = 'no';
379+
this._checkedNodes = [];
379380
if (state.inputValue || state.value.length) {
380381
this.fireChange([]);
381382
this.setOpenState(false);

tests/Select.checkable.spec.js

Lines changed: 78 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
1-
/* eslint-disable no-undef */
1+
/* eslint-disable no-undef, react/no-multi-comp */
22
import React from 'react';
33
import { mount } from 'enzyme';
4-
import TreeSelect, { SHOW_PARENT } from '..';
4+
import TreeSelect, { SHOW_PARENT } from '../src';
55

66
describe('TreeSelect.checkable', () => {
77
it('allow clear when controlled', () => {
@@ -54,6 +54,82 @@ describe('TreeSelect.checkable', () => {
5454
expect(wrapper.find('.rc-tree-select-selection__choice')).toHaveLength(0);
5555
});
5656

57+
// https://github.com/ant-design/ant-design/issues/6731
58+
it('clear all should clear cache at the same time', () => {
59+
const treeData = [{
60+
label: 'Node1',
61+
value: '0-0',
62+
key: '0-0',
63+
children: [{
64+
label: 'Child Node1',
65+
value: '0-0-0',
66+
key: '0-0-0',
67+
}],
68+
}, {
69+
label: 'Node2',
70+
value: '0-1',
71+
key: '0-1',
72+
children: [{
73+
label: 'Child Node3',
74+
value: '0-1-0',
75+
key: '0-1-0',
76+
}, {
77+
label: 'Child Node4',
78+
value: '0-1-1',
79+
key: '0-1-1',
80+
}, {
81+
label: 'Child Node5',
82+
value: '0-1-2',
83+
key: '0-1-2',
84+
}],
85+
}];
86+
87+
class App extends React.Component {
88+
state = {
89+
value: ['0-0-0'],
90+
disabled: false,
91+
}
92+
93+
handleChange = (value) => {
94+
this.setState({ value });
95+
}
96+
switch = (checked) => {
97+
this.setState({ disabled: checked });
98+
}
99+
render() {
100+
return (<div>
101+
<TreeSelect
102+
treeData={treeData}
103+
treeCheckable
104+
allowClear
105+
multiple
106+
showCheckedStrategy={SHOW_PARENT}
107+
value={this.state.value}
108+
onChange={this.handleChange}
109+
disabled={this.state.disabled}
110+
/>
111+
<input type="checkbox" onChange={e => this.switch(e.target.checked)} id="checkbox"/> 禁用
112+
</div>
113+
);
114+
}
115+
}
116+
const wrapper = mount(<App />);
117+
expect(wrapper.find('.rc-tree-select-selection__choice')).toHaveLength(1);
118+
// open
119+
jest.useFakeTimers();
120+
wrapper.find('.rc-tree-select').simulate('click');
121+
jest.runAllTimers();
122+
// select
123+
wrapper.find('.rc-tree-select-tree-checkbox').at(2).simulate('click');
124+
expect(wrapper.find('.rc-tree-select-selection__choice')).toHaveLength(2);
125+
// clear
126+
wrapper.find('.rc-tree-select-selection__clear').simulate('click');
127+
expect(wrapper.find('.rc-tree-select-selection__choice')).toHaveLength(0);
128+
// disabled
129+
wrapper.find('#checkbox').simulate('change', { target: { checked: true } });
130+
expect(wrapper.find('.rc-tree-select-selection__choice')).toHaveLength(0);
131+
});
132+
57133
// Fix https://github.com/ant-design/ant-design/issues/7312#issuecomment-324865971
58134
it('should be checkable when treeCheckStrictly is true', () => {
59135
const treeData = [

tests/Select.multiple.spec.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
import React from 'react';
33
import { mount, render } from 'enzyme';
44
import KeyCode from 'rc-util/lib/KeyCode';
5-
import TreeSelect from '..';
5+
import TreeSelect from '../src';
66

77
describe('TreeSelect.multiple', () => {
88
const treeData = [

tests/Select.spec.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
import React from 'react';
33
import { render, mount } from 'enzyme';
44
import KeyCode from 'rc-util/lib/KeyCode';
5-
import TreeSelect from '..';
5+
import TreeSelect from '../src';
66

77
const { TreeNode } = TreeSelect;
88

tests/__mocks__/rc-trigger.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ const Trigger = require.requireActual('rc-trigger');
44

55
const render = Trigger.prototype.render;
66

7-
Trigger.prototype.render = function () {
7+
Trigger.prototype.render = function _render() {
88
const { popupVisible } = this.state;
99
return (
1010
<div id="TriggerContainer">

0 commit comments

Comments
 (0)