From 23a002813876cd7c9193b43c7438239e724a3273 Mon Sep 17 00:00:00 2001 From: Gordey Levchenko Date: Wed, 5 Apr 2017 13:09:57 +0300 Subject: [PATCH 1/4] Add triggerOnchange flag --- src/PropTypes.js | 1 + src/Select.jsx | 6 +++++- 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/src/PropTypes.js b/src/PropTypes.js index 9317e2c81..55f1344e2 100644 --- a/src/PropTypes.js +++ b/src/PropTypes.js @@ -40,6 +40,7 @@ export const SelectPropTypes = { showSearch: PropTypes.bool, disabled: PropTypes.bool, allowClear: PropTypes.bool, + triggerOnchange: PropTypes.bool, showArrow: PropTypes.bool, tags: PropTypes.bool, prefixCls: PropTypes.string, diff --git a/src/Select.jsx b/src/Select.jsx index ef4045440..0568d2726 100644 --- a/src/Select.jsx +++ b/src/Select.jsx @@ -52,6 +52,7 @@ const Select = React.createClass({ defaultActiveFirstOption: true, showSearch: true, allowClear: false, + triggerOnchange: true, placeholder: '', onChange: noop, onFocus: noop, @@ -639,7 +640,10 @@ const Select = React.createClass({ } props.onDeselect(event); } - this.fireChange(value); + + if (props.triggerOnchange) { + this.fireChange(value); + } }, openIfHasChildren() { From b11a3577213a963be194b9fac5046bc747fe1f34 Mon Sep 17 00:00:00 2001 From: Gordey Levchenko Date: Wed, 5 Apr 2017 13:14:32 +0300 Subject: [PATCH 2/4] Add readme description --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index f584db03e..1f184aecd 100644 --- a/README.md +++ b/README.md @@ -83,6 +83,7 @@ React.render(c, container); |combobox | enable combobox mode(can not set multiple at the same time) | bool | false | |multiple | whether multiple select | bool | false | |disabled | whether disabled select | bool | false | +|triggerOnchange | trigger input onChange event after an option is selected(onSelect) | bool | true | |filterOption | whether filter options by input value. default filter by option's optionFilterProp prop's value | bool | true/Function(inputValue:string, option:Option) | |optionFilterProp | which prop value of option will be used for filter if filterOption is true | String | 'value' | |optionLabelProp | which prop value of option will render as content of select | String | 'value' | From 344d73e411b1d81bfa797ac65b908bfd5a7b3661 Mon Sep 17 00:00:00 2001 From: Gordey Levchenko Date: Wed, 5 Apr 2017 15:18:41 +0300 Subject: [PATCH 3/4] Fix triggerOnchange prop location, add tests --- src/Select.jsx | 8 +++---- tests/Select.triggerOnchange.spec.js | 36 ++++++++++++++++++++++++++++ 2 files changed, 39 insertions(+), 5 deletions(-) create mode 100644 tests/Select.triggerOnchange.spec.js diff --git a/src/Select.jsx b/src/Select.jsx index 0568d2726..6f455899d 100644 --- a/src/Select.jsx +++ b/src/Select.jsx @@ -271,8 +271,9 @@ const Select = React.createClass({ this.setOpenState(false, true); } this.fireChange(value); + let inputValue; - if (isCombobox(props)) { + if (isCombobox(props) && props.triggerOnchange) { inputValue = getPropValue(item, props.optionLabelProp); } else { inputValue = ''; @@ -640,10 +641,7 @@ const Select = React.createClass({ } props.onDeselect(event); } - - if (props.triggerOnchange) { - this.fireChange(value); - } + this.fireChange(value); }, openIfHasChildren() { diff --git a/tests/Select.triggerOnchange.spec.js b/tests/Select.triggerOnchange.spec.js new file mode 100644 index 000000000..6a07b4bed --- /dev/null +++ b/tests/Select.triggerOnchange.spec.js @@ -0,0 +1,36 @@ +/* eslint-disable no-undef */ +import React from 'react'; +import { mount } from 'enzyme'; +import Select, { Option } from '../src'; + +describe('test test test', () => { + it('fires input change by default ', () => { + const wrapper = mount( + + ); + + wrapper.find('.rc-select').simulate('click'); + const dropdownWrapper = mount(wrapper.find('Trigger').node.getComponent()); + + dropdownWrapper.find('MenuItem').first().simulate('click'); + expect(wrapper.state().inputValue).toBe('1'); + }); + + it('not fires input change when triggerOnchange is true ', () => { + const wrapper = mount( + + ); + + wrapper.find('.rc-select').simulate('click'); + const dropdownWrapper = mount(wrapper.find('Trigger').node.getComponent()); + + dropdownWrapper.find('MenuItem').first().simulate('click'); + expect(wrapper.state().inputValue).toBe(''); + }); +}); From 42c94460cc29cdac176da57f89a5d54298282e70 Mon Sep 17 00:00:00 2001 From: Gordey Levchenko Date: Wed, 5 Apr 2017 15:22:05 +0300 Subject: [PATCH 4/4] Fix test description fail --- tests/Select.triggerOnchange.spec.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/Select.triggerOnchange.spec.js b/tests/Select.triggerOnchange.spec.js index 6a07b4bed..76a4c3dfd 100644 --- a/tests/Select.triggerOnchange.spec.js +++ b/tests/Select.triggerOnchange.spec.js @@ -19,7 +19,7 @@ describe('test test test', () => { expect(wrapper.state().inputValue).toBe('1'); }); - it('not fires input change when triggerOnchange is true ', () => { + it('not fires input change when triggerOnchange is false ', () => { const wrapper = mount(