UNPKG

sc-react-ions

Version:

An open source set of React components that implement Ambassador's Design and UX patterns.

136 lines (115 loc) 3.78 kB
'use strict'; Object.defineProperty(exports, "__esModule", { value: true }); var _react = require('react'); var _react2 = _interopRequireDefault(_react); var _propTypes = require('prop-types'); var _propTypes2 = _interopRequireDefault(_propTypes); var _bind = require('classnames/bind'); var _bind2 = _interopRequireDefault(_bind); var _style = require('./style.scss'); var _style2 = _interopRequireDefault(_style); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } function _objectWithoutProperties(obj, keys) { var target = {}; for (var i in obj) { if (keys.indexOf(i) >= 0) continue; if (!Object.prototype.hasOwnProperty.call(obj, i)) continue; target[i] = obj[i]; } return target; } var Radio = function Radio(props) { var label = props.label, optClass = props.optClass, description = props.description, width = props.width, other = _objectWithoutProperties(props, ['label', 'optClass', 'description', 'width']); var cx = _bind2.default.bind(_style2.default); var disabledClass = props.disabled ? _style2.default['radio-disabled'] : null; var radioClass = cx(_style2.default['radio-component'], optClass, disabledClass); var labelWrapperClass = props.description ? _style2.default['label-group'] : null; var handleChange = function handleChange(event) { event.persist(); if (typeof props.changeCallback === 'function') { props.changeCallback(event, props.value); } }; var getLabel = function getLabel() { if (props.label && props.description) { return _react2.default.createElement( 'div', { className: _style2.default['label-wrapper'] }, _react2.default.createElement( 'label', null, _react2.default.createElement( 'span', { className: _style2.default['label-title'] }, label ), _react2.default.createElement( 'span', { className: _style2.default['label-description'] }, description ) ) ); } if (props.label) { return _react2.default.createElement( 'label', null, label ); } return null; }; return _react2.default.createElement( 'div', { className: radioClass, style: { minWidth: props.width } }, _react2.default.createElement('input', { type: 'radio', onChange: handleChange, value: props.value, name: props.name, disabled: props.disabled, checked: props.checked }), _react2.default.createElement( 'div', { className: labelWrapperClass }, _react2.default.createElement('div', { className: _style2.default['radio-input'] }), getLabel() ) ); }; Radio.defaultProps = { checked: false, disabled: false }; Radio.propTypes = { /** * True if the option is checked. */ checked: _propTypes2.default.bool, /** * Whether the option is disabled. */ disabled: _propTypes2.default.bool, /** * Text shown next to the radio input element. */ label: _propTypes2.default.string, /** * Value of the option. */ value: _propTypes2.default.string, /** * Optional styles to add to the radio component. */ optClass: _propTypes2.default.string, /** * Name specified in the RadioGroup component. */ name: _propTypes2.default.string, /** * A callback function (from RadioGroup) to be called when the option is changed. */ changeCallback: _propTypes2.default.func, /** * An optional string that appears below the label */ description: _propTypes2.default.string, /** * An optional string that inlines a style tag with `width='<STRING>'` */ width: _propTypes2.default.string }; exports.default = Radio;