UNPKG

react-mdc-web

Version:

React web components for Material Design

92 lines (72 loc) 2.68 kB
'use strict'; Object.defineProperty(exports, "__esModule", { value: true }); var _propTypes = require('prop-types'); var _propTypes2 = _interopRequireDefault(_propTypes); var _react = require('react'); var _react2 = _interopRequireDefault(_react); var _List = require('../List/List'); var _List2 = _interopRequireDefault(_List); var _ListItem = require('../List/ListItem'); var _ListItem2 = _interopRequireDefault(_ListItem); var _FormField = require('../FormField'); var _FormField2 = _interopRequireDefault(_FormField); var _Radio = require('./Radio'); var _Radio2 = _interopRequireDefault(_Radio); 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 propTypes = { className: _propTypes2.default.string, children: _propTypes2.default.arrayOf(function (propValue, key, componentName) { var type = propValue[key].type; if (type !== _Radio2.default) { return new Error('Invalid prop \'children[' + key + ']\' supplied to \'' + componentName + '\', expected \'Radio\''); } return false; }), name: _propTypes2.default.string.isRequired, onChange: _propTypes2.default.func, value: _propTypes2.default.oneOfType([_propTypes2.default.number, _propTypes2.default.string]) }; var RadioGroup = function RadioGroup(_ref) { var className = _ref.className, name = _ref.name, onChange = _ref.onChange, value = _ref.value, otherProps = _objectWithoutProperties(_ref, ['className', 'name', 'onChange', 'value']); var childs = _react.Children.map(otherProps.children, function (child) { var _child$props = child.props, id = _child$props.id, children = _child$props.children, childValue = _child$props.value; var customId = id || 'radio-' + (name || '') + '-' + childValue; var radio = (0, _react.cloneElement)(child, { checked: childValue === value, id: customId, name: name, onChange: onChange }); return _react2.default.createElement( _ListItem2.default, null, _react2.default.createElement( _FormField2.default, { id: customId }, radio, _react2.default.createElement( 'label', null, children ) ) ); }); return _react2.default.createElement( _List2.default, { className: className }, childs ); }; RadioGroup.propTypes = propTypes; exports.default = RadioGroup;