From fae79e4bc998a4589e98c66ebeba739b503d6d0e Mon Sep 17 00:00:00 2001 From: Edward Sammut Alessi Date: Sat, 5 Jan 2019 12:40:41 +0100 Subject: [PATCH 1/3] Respect defaultValue for uncontrolled RadioGroup --- .../material-ui/src/RadioGroup/RadioGroup.js | 13 +++++++------ .../src/RadioGroup/RadioGroup.test.js | 16 +++++++++++++--- 2 files changed, 20 insertions(+), 9 deletions(-) diff --git a/packages/material-ui/src/RadioGroup/RadioGroup.js b/packages/material-ui/src/RadioGroup/RadioGroup.js index 47a53c94f5c615..ce91ae2db7cc73 100644 --- a/packages/material-ui/src/RadioGroup/RadioGroup.js +++ b/packages/material-ui/src/RadioGroup/RadioGroup.js @@ -9,13 +9,14 @@ import { createChainedFunction, find } from '../utils/helpers'; class RadioGroup extends React.Component { radios = []; - state = { - value: null, - }; - constructor(props) { - super(); - this.isControlled = props.value != null; + super(props); + + this.isControlled = !props.hasOwnProperty('defaultValue') && !props.hasOwnProperty('value'); + + this.state = { + value: this.isControlled ? props.value : props.defaultValue, + }; } focus = () => { diff --git a/packages/material-ui/src/RadioGroup/RadioGroup.test.js b/packages/material-ui/src/RadioGroup/RadioGroup.test.js index 4924aeb4f3fe39..8234f819af0e35 100644 --- a/packages/material-ui/src/RadioGroup/RadioGroup.test.js +++ b/packages/material-ui/src/RadioGroup/RadioGroup.test.js @@ -39,18 +39,28 @@ describe('', () => { it('should support uncontrolled mode', () => { const wrapper = shallow( - + + , ); - const radio = wrapper.children().first(); + assert.strictEqual( + wrapper + .children() + .first() + .props().checked, + true, + ); + + const radio = wrapper.children().last(); const event = { target: { value: 'one' } }; radio.simulate('change', event, true); + assert.strictEqual( wrapper .children() - .first() + .last() .props().checked, true, ); From b6215d383ff9c4589eef85e976fc5e0e3131ae91 Mon Sep 17 00:00:00 2001 From: Edward Sammut Alessi Date: Sat, 5 Jan 2019 15:51:38 +0100 Subject: [PATCH 2/3] Remove props from RadioGroup super() and split uncontrolled/defaultValue tests --- .../material-ui/src/RadioGroup/RadioGroup.js | 2 +- .../src/RadioGroup/RadioGroup.test.js | 19 +++++++++++++++++++ 2 files changed, 20 insertions(+), 1 deletion(-) diff --git a/packages/material-ui/src/RadioGroup/RadioGroup.js b/packages/material-ui/src/RadioGroup/RadioGroup.js index ce91ae2db7cc73..e31af5eaa35f64 100644 --- a/packages/material-ui/src/RadioGroup/RadioGroup.js +++ b/packages/material-ui/src/RadioGroup/RadioGroup.js @@ -10,7 +10,7 @@ class RadioGroup extends React.Component { radios = []; constructor(props) { - super(props); + super(); this.isControlled = !props.hasOwnProperty('defaultValue') && !props.hasOwnProperty('value'); diff --git a/packages/material-ui/src/RadioGroup/RadioGroup.test.js b/packages/material-ui/src/RadioGroup/RadioGroup.test.js index 8234f819af0e35..a44b7c223e8218 100644 --- a/packages/material-ui/src/RadioGroup/RadioGroup.test.js +++ b/packages/material-ui/src/RadioGroup/RadioGroup.test.js @@ -38,6 +38,25 @@ describe('', () => { }); it('should support uncontrolled mode', () => { + const wrapper = shallow( + + + , + ); + + const radio = wrapper.children().first(); + const event = { target: { value: 'one' } }; + radio.simulate('change', event, true); + assert.strictEqual( + wrapper + .children() + .first() + .props().checked, + true, + ); + }); + + it('should support default value in uncontrolled mode', () => { const wrapper = shallow( From a0a133781be301638d26a1717bfadd903b7c52e0 Mon Sep 17 00:00:00 2001 From: Edward Sammut Alessi Date: Sat, 5 Jan 2019 17:43:10 +0100 Subject: [PATCH 3/3] Change RadioGroup isControlled check to compare with null --- packages/material-ui/src/RadioGroup/RadioGroup.js | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/packages/material-ui/src/RadioGroup/RadioGroup.js b/packages/material-ui/src/RadioGroup/RadioGroup.js index e31af5eaa35f64..8d2c0ebf754ed9 100644 --- a/packages/material-ui/src/RadioGroup/RadioGroup.js +++ b/packages/material-ui/src/RadioGroup/RadioGroup.js @@ -11,12 +11,13 @@ class RadioGroup extends React.Component { constructor(props) { super(); + this.isControlled = props.value != null; - this.isControlled = !props.hasOwnProperty('defaultValue') && !props.hasOwnProperty('value'); - - this.state = { - value: this.isControlled ? props.value : props.defaultValue, - }; + if (!this.isControlled) { + this.state = { + value: props.defaultValue, + }; + } } focus = () => {