Skip to content

Commit 5eb76f1

Browse files
committed
Fix issue where an initially disabled tree could not be enabled after the initial render
Resolves #119.
1 parent adeb209 commit 5eb76f1

File tree

4 files changed

+34
-3
lines changed

4 files changed

+34
-3
lines changed

CHANGELOG.md

+1
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99

1010
### Bug Fixes
1111

12+
* [#119]: Fix issue where an initially disabled tree could not be enabled after the initial render
1213
* [#120]: Fix issue where Internet Explorer and Microsoft Edge browsers would fail to update check state when a parent was in a half-check or indeterminate state
1314
* [#125]: Fix misalignment of TreeNode's `label` property between PropType and TypeScript definitions
1415

src/js/CheckboxTree.js

+6-3
Original file line numberDiff line numberDiff line change
@@ -102,11 +102,14 @@ class CheckboxTree extends React.Component {
102102
// eslint-disable-next-line react/sort-comp
103103
static getDerivedStateFromProps(newProps, prevState) {
104104
const { model, prevProps } = prevState;
105-
const { id, nodes } = newProps;
105+
const { disabled, id, nodes } = newProps;
106106
let newState = { ...prevState, prevProps: newProps };
107107

108-
// Since flattening nodes is an expensive task, only update when there is a change
109-
if (!isEqual(prevProps.nodes, nodes)) {
108+
// Apply new properties to model
109+
model.setProps(newProps);
110+
111+
// Since flattening nodes is an expensive task, only update when there is a node change
112+
if (!isEqual(prevProps.nodes, nodes) || prevProps.disabled !== disabled) {
110113
model.flattenNodes(nodes);
111114
}
112115

src/js/NodeModel.js

+4
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,10 @@ class NodeModel {
44
this.flatNodes = nodes;
55
}
66

7+
setProps(props) {
8+
this.props = props;
9+
}
10+
711
clone() {
812
const clonedNodes = {};
913

test/CheckboxTree.js

+23
Original file line numberDiff line numberDiff line change
@@ -297,6 +297,29 @@ describe('<CheckboxTree />', () => {
297297

298298
assert.isFalse(wrapper.find('TreeNode[value="europa"]').prop('disabled'));
299299
});
300+
301+
// https://github.com/jakezatecky/react-checkbox-tree/issues/119
302+
it('should be able to change disabled state after the initial render', () => {
303+
const wrapper = shallow(
304+
<CheckboxTree
305+
disabled
306+
expanded={['jupiter']}
307+
nodes={[
308+
{
309+
value: 'jupiter',
310+
label: 'Jupiter',
311+
children: [
312+
{ value: 'europa', label: 'Europa' },
313+
],
314+
},
315+
]}
316+
/>,
317+
);
318+
319+
wrapper.setProps({ disabled: false });
320+
321+
assert.isFalse(wrapper.find('TreeNode[value="europa"]').prop('disabled'));
322+
});
300323
});
301324
});
302325

0 commit comments

Comments
 (0)