From 3573d3b55ddd58dcef76f405c795ab96c4871ed8 Mon Sep 17 00:00:00 2001 From: Hassan Zaheer Date: Fri, 10 Aug 2018 22:03:09 +1000 Subject: [PATCH 1/2] As discussed in #12204 - added "name" to - event.target for onBlur callback --- packages/material-ui/src/Select/SelectInput.js | 3 ++- .../material-ui/src/Select/SelectInput.test.js | 15 +++++++++++++++ 2 files changed, 17 insertions(+), 1 deletion(-) diff --git a/packages/material-ui/src/Select/SelectInput.js b/packages/material-ui/src/Select/SelectInput.js index 80cf98b55de54f..630be496f7a2ed 100644 --- a/packages/material-ui/src/Select/SelectInput.js +++ b/packages/material-ui/src/Select/SelectInput.js @@ -108,7 +108,8 @@ class SelectInput extends React.Component { } if (this.props.onBlur) { - this.props.onBlur(event); + const { name } = this.props; + this.props.onBlur({ ...event, target: { ...event.target, name } }); } }; diff --git a/packages/material-ui/src/Select/SelectInput.test.js b/packages/material-ui/src/Select/SelectInput.test.js index e148fcdc7cde66..52603e2b422e54 100644 --- a/packages/material-ui/src/Select/SelectInput.test.js +++ b/packages/material-ui/src/Select/SelectInput.test.js @@ -174,6 +174,21 @@ describe('', () => { assert.strictEqual(handleBlur.callCount, 1); }); + it('should pass "name" as part of the event.target for onBlur', () => { + const handleBlur = spy(); + wrapper.setProps({ onBlur: handleBlur, name: 'blur-testing' }); + + wrapper.find(`.${defaultProps.classes.select}`).simulate('click'); + assert.strictEqual(wrapper.state().open, true); + assert.strictEqual(instance.ignoreNextBlur, true); + wrapper.find(`.${defaultProps.classes.select}`).simulate('blur'); + assert.strictEqual(handleBlur.callCount, 0); + assert.strictEqual(instance.ignoreNextBlur, false); + wrapper.find(`.${defaultProps.classes.select}`).simulate('blur'); + assert.strictEqual(handleBlur.callCount, 1); + assert.strictEqual(handleBlur.args[0][0].target.name, 'blur-testing'); + }); + ['space', 'up', 'down'].forEach(key => { it(`'should open menu when pressed ${key} key on select`, () => { wrapper From 6d554c61736ff14605359c9ae8e4a850d4464a5a Mon Sep 17 00:00:00 2001 From: Olivier Tassinari Date: Sat, 11 Aug 2018 01:40:44 +0200 Subject: [PATCH 2/2] clone the onChange event logic --- packages/material-ui/src/Select/SelectInput.js | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/packages/material-ui/src/Select/SelectInput.js b/packages/material-ui/src/Select/SelectInput.js index 630be496f7a2ed..04d36d2e2a2419 100644 --- a/packages/material-ui/src/Select/SelectInput.js +++ b/packages/material-ui/src/Select/SelectInput.js @@ -108,8 +108,10 @@ class SelectInput extends React.Component { } if (this.props.onBlur) { - const { name } = this.props; - this.props.onBlur({ ...event, target: { ...event.target, name } }); + const { value, name } = this.props; + event.persist(); + event.target = { value, name }; + this.props.onBlur(event); } };