diff --git a/src/Select.jsx b/src/Select.jsx index 0a148376..af36270a 100644 --- a/src/Select.jsx +++ b/src/Select.jsx @@ -743,9 +743,9 @@ class Select extends Component { this._cacheTreeNodesStates = false; this.setState({ value: this.getValue(props, toArray(this._savedValue).map((v, i) => { - return { + return this.isLabelInValue() ? v : { value: v, - label: labs[i], + label: labs && labs[i], }; })), }); diff --git a/tests/Select.checkable.spec.js b/tests/Select.checkable.spec.js index 55bd78a6..96e5ba3e 100644 --- a/tests/Select.checkable.spec.js +++ b/tests/Select.checkable.spec.js @@ -53,4 +53,37 @@ describe('TreeSelect.checkable', () => { wrapper.find('.rc-tree-select-selection__clear').simulate('click'); expect(wrapper.find('.rc-tree-select-selection__choice')).toHaveLength(0); }); + + // Fix https://github.com/ant-design/ant-design/issues/7312#issuecomment-324865971 + it('should be checkable when treeCheckStrictly is true', () => { + const treeData = [ + { label: '1-1', value: '1-1', children: [] }, + { label: '1-2', value: '1-2', children: [] }, + { + label: '1-3', value: '1-3', children: [ + { label: '2-1', value: '2-1', children: [] }, + { label: '2-2', value: '2-2', children: [] }, + ], + }, + ]; + const handleChange = jest.fn(); + const wrapper = mount( + + ); + // open + jest.useFakeTimers(); + wrapper.find('.rc-tree-select').simulate('click'); + jest.runAllTimers(); + // select + wrapper.find('.rc-tree-select-tree-checkbox').at(0).simulate('click'); + expect(handleChange).toBeCalled(); + expect(wrapper.find('.rc-tree-select-selection__choice__content').length).toBe(1); + expect(wrapper.find('.rc-tree-select-selection__choice__content').at(0).text()).toBe('1-1'); + }); });