UNPKG

@ysmood/material-ui

Version:

Material Design UI components built with React

137 lines (117 loc) 3.5 kB
var React = require('react'); var StylePropable = require('./mixins/style-propable'); var Transitions = require('./styles/transitions'); var EnhancedSwitch = require('./enhanced-switch'); var RadioButtonOff = require('./svg-icons/toggle-radio-button-off'); var RadioButtonOn = require('./svg-icons/toggle-radio-button-on'); var RadioButton = React.createClass({ mixins: [StylePropable], contextTypes: { muiTheme: React.PropTypes.object }, propTypes: { iconStyle: React.PropTypes.object, onCheck: React.PropTypes.func }, getTheme: function() { return this.context.muiTheme.component.radioButton; }, getStyles: function() { var styles = { icon: { height: this.getTheme().size, width: this.getTheme().size }, target: { transition: Transitions.easeOut(), position: 'absolute', opacity: 1, transform: 'scale(1)', fill: this.getTheme().borderColor }, fill: { position: 'absolute', opacity: 1, transform: 'scale(0)', transformOrigin: '50% 50%', transition: Transitions.easeOut(), fill: this.getTheme().checkedColor }, targetWhenChecked: { opacity: 0, transform: 'scale(0)' }, fillWhenChecked: { opacity: 1, transform: 'scale(1)' }, targetWhenDisabled: { fill: this.getTheme().disabledColor }, fillWhenDisabled: { fill: this.getTheme().disabledColor }, }; return styles; }, render: function() { var { onCheck, ...other } = this.props; var styles = this.getStyles(); var onStyles = this.mergeAndPrefix( styles.target, this.props.checked && styles.targetWhenChecked, this.props.iconStyle, this.props.disabled && styles.targetWhenDisabled); var offStyles = this.mergeAndPrefix( styles.fill, this.props.checked && styles.fillWhenChecked, this.props.iconStyle, this.props.disabled && styles.fillWhenDisabled); var radioButtonElement = ( <div> <RadioButtonOff style={onStyles} /> <RadioButtonOn style={offStyles} /> </div> ); var rippleColor = this.props.checked ? this.getTheme().checkedColor : this.getTheme().borderColor; var enhancedSwitchProps = { ref: "enhancedSwitch", inputType: "radio", switched: this.props.checked, switchElement: radioButtonElement, rippleColor: rippleColor, iconStyle: styles.icon, onSwitch: this._handleCheck, onParentShouldUpdate: this._handleStateChange, labelPosition: (this.props.labelPosition) ? this.props.labelPosition : "right" }; return ( <EnhancedSwitch {...other} {...enhancedSwitchProps}/> ); }, // Only called when selected, not when unselected. _handleCheck: function(e) { if (this.props.onCheck) this.props.onCheck(e, this.props.value); }, _handleStateChange: function() { }, isChecked: function() { return this.refs.enhancedSwitch.isSwitched(); }, // Use RadioButtonGroup.setSelectedValue(newSelectionValue) to set a // RadioButton's checked value. setChecked: function(newCheckedValue) { this.refs.enhancedSwitch.setSwitched(newCheckedValue); }, getValue: function() { return this.refs.enhancedSwitch.getValue(); } }); module.exports = RadioButton;