Skip to content

Commit

Permalink
improve radio component, make value a required property since that's …
Browse files Browse the repository at this point in the history
…the reliable thing to get on a onChange event (see facebook/react#1471)
  • Loading branch information
fczuardi committed Mar 30, 2015
1 parent b43a0b6 commit df03bb9
Show file tree
Hide file tree
Showing 5 changed files with 67 additions and 30 deletions.
72 changes: 48 additions & 24 deletions app.js
Original file line number Diff line number Diff line change
Expand Up @@ -45,8 +45,8 @@ render(
checked: true,
isItem: true,
onChange: function(event){
console.log(event.target.checked);
}
console.log(event.target.value, event.target.checked);
}
},
'With label'
)
Expand All @@ -55,7 +55,7 @@ render(
create(Switch, {
id: 'switch-0',
onChange: function(event){
console.log(event.target.checked);
console.log(event.target.value, event.target.checked);
}
})
),
Expand All @@ -65,25 +65,42 @@ render(
id: 'switch-1',
styles: {div: {float: 'left'}},
onChange: function(event){
console.log(event.target.checked);
console.log(event.target.value, event.target.checked);
}
})
)
),
create(MnmoList, null,
create(MnmoLI, null,
create(MnmoRadioButton, {
isItem: true, id: 'mnmo-radio-1', name: 'menu-radio-group'
isItem: true,
id: 'mnmo-radio-1',
onChange: function(event){
console.log(event.target.value);
},
value: 'itema',
name: 'menu-radio-groupt'
}, 'Item A')
),
create(MnmoLI, null,
create(MnmoRadioButton, {
isItem: true, id: 'mnmo-radio-2', checked: true, name: 'menu-radio-group'
isItem: true, id: 'mnmo-radio-2', checked: true,
name: 'menu-radio-group',
value: 'itemb',
onChange: function(event){
console.log(event.target.value);
},
}, 'Item B')
),
create(MnmoLI, null,
create(MnmoRadioButton, {
isItem: true, id: 'mnmo-radio-3', name: 'menu-radio-group'
isItem: true,
id: 'mnmo-radio-3',
value: 'itemc',
name: 'menu-radio-group',
onChange: function(event){
console.log(event.target.value);
},
}, 'Item C')
)
),
Expand Down Expand Up @@ -129,20 +146,23 @@ render(
name: 'group-0',
id: 'radio-mnmo-1',
isBox: true,
onChange: function(){console.log('foo');}
value: 8,
onChange: function(event){console.log('foo', event.target.value);}
}, '8'),
create(MnmoRadioButton, {
name: 'group-0',
id: 'radio-mnmo-2',
checked: true,
isBox: true,
onChange: function(){console.log('foo');}
value: 4,
onChange: function(event){console.log('foo', event.target.value);}
}, '4'),
create(MnmoRadioButton, {
name: 'group-0',
id: 'radio-mnmo-3',
isBox: true,
onChange: function(){console.log('foo');}
value: 35,
onChange: function(event){console.log('foo', event.target.value);}
}, '35')
)
),
Expand All @@ -156,36 +176,40 @@ render(
//------------------------------------------------------------------
create(Drawer, null,
create(List, null,
create(LI,{type: 'link', href: '#'}, 'Item A'),
create(LI,{type: 'link', href: '#'}, 'Item B'),
create(LI,{type: 'link', href: '#'}, 'Item C')
),
create(List, null,
create(LI,{type: 'radio', id: 'radio-1', name: 'menu-radio-group'}, 'Item A'),
create(LI,{type: 'radio', id: 'radio-2', name: 'menu-radio-group', checked: true}, 'Item B'),
create(LI,{type: 'radio', id: 'radio-3', name: 'menu-radio-group'}, 'Item C')
),
create(List, null,
create(LI,{type: 'checkbox', id: 'menu-check-1'}, 'Item A'),
create(LI,{type: 'checkbox', id: 'menu-check-2', checked: true}, 'Item B'),
create(LI,{type: 'checkbox', id: 'menu-check-3'}, 'Item C'),
create(LI,{type: 'checkbox', id: 'menu-check-4', checked: false}, 'Item D')
create(LI, null,
create(Checkbox, {
id: 'menu-check-1'
}, 'Item A')
),
create(MnmoLI, null,
create(Checkbox, {
id: 'menu-check-2', checked: true
}, 'Item B')
),
create(MnmoLI, null,
create(Checkbox, {
id: 'menu-check-3'
}, 'Item C')
)
)
),
create(FieldSet, {styles: {fieldset: { borderColor: '#0bb' }}},
create(RadioButton, {
name: 'group-1',
id: 'radio-1',
value: 'A',
onChange: function(){console.log('foo');}
}, 'A'),
create(RadioButton, {
name: 'group-1',
id: 'radio-2',
value: 'B',
onChange: function(){console.log('foo');}
}, 'B'),
create(RadioButton, {
name: 'group-1',
id: 'radio-3',
value: 'C',
onChange: function(){console.log('foo');}
}, 'C'),
create(Select, {name: 'foobarSelector'},
Expand Down
11 changes: 11 additions & 0 deletions lib/radio.js
Original file line number Diff line number Diff line change
Expand Up @@ -24,9 +24,19 @@
*
* @module mnmo-components/radio
*/
import {PropTypes} from 'react';
import template from './templates/radio.jsx';
import merge from 'lodash/object/merge';

var propTypes = {
id: PropTypes.string.isRequired,
name: PropTypes.string.isRequired,
value: PropTypes.node.isRequired,
checked: PropTypes.bool,
onChange: PropTypes.func,
styles: PropTypes.object
};

var defaultProps = {
checked: false,
styles: {div: {}, input: {}, label: {}}
Expand All @@ -49,6 +59,7 @@ class RadioButton {
}
}

RadioButton.propTypes = propTypes;
RadioButton.defaultProps = defaultProps;

export default RadioButton;
6 changes: 4 additions & 2 deletions lib/templates/checkbox.jsx
Original file line number Diff line number Diff line change
Expand Up @@ -14,12 +14,14 @@ import React from 'react';
export default (p) => {
return (
<div className={p.className} style={p.styles.div}>
<input type="checkbox"
<input
type="checkbox"
name={p.name}
id={p.id}
checked={p.checked}
value={p.value}
disabled={p.disabled}
onChange={p.onChange}
id={p.id}
style={p.styles.input}
/>
<label
Expand Down
6 changes: 3 additions & 3 deletions lib/templates/radio.jsx
Original file line number Diff line number Diff line change
Expand Up @@ -12,12 +12,12 @@ export default (p) =>
type="radio"
name={p.name}
id={p.id}
key={p.key}
value={p.value}
checked={p.checked}
disabled={p.disabled}
style={p.styles.input}
value={p.value}
onChange={p.onChange}
style={p.styles.input}
data-checked={p.checked}
/>
<label
htmlFor={p.id}
Expand Down
2 changes: 1 addition & 1 deletion lib/themes/mnmo/switch.js
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,7 @@ class MnmoSwitch extends Checkbox {
Children.forEach(newProps.children, function(child){
newChildren.push(child);
});
newChildren.push(DOM.div( {style: newProps.styles.outerDiv},
newChildren.push(DOM.div( {key: 'o', style: newProps.styles.outerDiv},
DOM.div( {style: newProps.styles.innerDiv})
));
newProps.children = newChildren;
Expand Down

0 comments on commit df03bb9

Please sign in to comment.