You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 

239 lines
7.4 KiB

  1. 'use strict';
  2. Object.defineProperty(exports, "__esModule", {
  3. value: true
  4. });
  5. var _extends2 = require('babel-runtime/helpers/extends');
  6. var _extends3 = _interopRequireDefault(_extends2);
  7. var _objectWithoutProperties2 = require('babel-runtime/helpers/objectWithoutProperties');
  8. var _objectWithoutProperties3 = _interopRequireDefault(_objectWithoutProperties2);
  9. var _getPrototypeOf = require('babel-runtime/core-js/object/get-prototype-of');
  10. var _getPrototypeOf2 = _interopRequireDefault(_getPrototypeOf);
  11. var _classCallCheck2 = require('babel-runtime/helpers/classCallCheck');
  12. var _classCallCheck3 = _interopRequireDefault(_classCallCheck2);
  13. var _createClass2 = require('babel-runtime/helpers/createClass');
  14. var _createClass3 = _interopRequireDefault(_createClass2);
  15. var _possibleConstructorReturn2 = require('babel-runtime/helpers/possibleConstructorReturn');
  16. var _possibleConstructorReturn3 = _interopRequireDefault(_possibleConstructorReturn2);
  17. var _inherits2 = require('babel-runtime/helpers/inherits');
  18. var _inherits3 = _interopRequireDefault(_inherits2);
  19. var _simpleAssign = require('simple-assign');
  20. var _simpleAssign2 = _interopRequireDefault(_simpleAssign);
  21. var _react = require('react');
  22. var _react2 = _interopRequireDefault(_react);
  23. var _propTypes = require('prop-types');
  24. var _propTypes2 = _interopRequireDefault(_propTypes);
  25. var _RadioButton = require('./RadioButton');
  26. var _RadioButton2 = _interopRequireDefault(_RadioButton);
  27. var _warning = require('warning');
  28. var _warning2 = _interopRequireDefault(_warning);
  29. function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
  30. var RadioButtonGroup = function (_Component) {
  31. (0, _inherits3.default)(RadioButtonGroup, _Component);
  32. function RadioButtonGroup() {
  33. var _ref;
  34. var _temp, _this, _ret;
  35. (0, _classCallCheck3.default)(this, RadioButtonGroup);
  36. for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) {
  37. args[_key] = arguments[_key];
  38. }
  39. return _ret = (_temp = (_this = (0, _possibleConstructorReturn3.default)(this, (_ref = RadioButtonGroup.__proto__ || (0, _getPrototypeOf2.default)(RadioButtonGroup)).call.apply(_ref, [this].concat(args))), _this), _this.state = {
  40. numberCheckedRadioButtons: 0,
  41. selected: ''
  42. }, _this.handleChange = function (event, newSelection) {
  43. _this.updateRadioButtons(newSelection);
  44. // Successful update
  45. if (_this.state.numberCheckedRadioButtons === 0) {
  46. if (_this.props.onChange) _this.props.onChange(event, newSelection);
  47. }
  48. }, _temp), (0, _possibleConstructorReturn3.default)(_this, _ret);
  49. }
  50. (0, _createClass3.default)(RadioButtonGroup, [{
  51. key: 'componentWillMount',
  52. value: function componentWillMount() {
  53. var _this2 = this;
  54. var cnt = 0;
  55. var selected = '';
  56. var _props = this.props,
  57. valueSelected = _props.valueSelected,
  58. defaultSelected = _props.defaultSelected;
  59. if (valueSelected !== undefined) {
  60. selected = valueSelected;
  61. } else if (defaultSelected !== undefined) {
  62. selected = defaultSelected;
  63. }
  64. _react2.default.Children.forEach(this.props.children, function (option) {
  65. if (_this2.hasCheckAttribute(option)) cnt++;
  66. }, this);
  67. this.setState({
  68. numberCheckedRadioButtons: cnt,
  69. selected: selected
  70. });
  71. }
  72. }, {
  73. key: 'componentWillReceiveProps',
  74. value: function componentWillReceiveProps(nextProps) {
  75. if (nextProps.hasOwnProperty('valueSelected')) {
  76. this.setState({
  77. selected: nextProps.valueSelected
  78. });
  79. }
  80. }
  81. }, {
  82. key: 'hasCheckAttribute',
  83. value: function hasCheckAttribute(radioButton) {
  84. return radioButton.props.hasOwnProperty('checked') && radioButton.props.checked;
  85. }
  86. }, {
  87. key: 'updateRadioButtons',
  88. value: function updateRadioButtons(newSelection) {
  89. if (this.state.numberCheckedRadioButtons === 0) {
  90. this.setState({ selected: newSelection });
  91. } else {
  92. process.env.NODE_ENV !== "production" ? (0, _warning2.default)(false, 'Material-UI: Cannot select a different radio button while another radio button\n has the \'checked\' property set to true.') : void 0;
  93. }
  94. }
  95. }, {
  96. key: 'getSelectedValue',
  97. value: function getSelectedValue() {
  98. return this.state.selected;
  99. }
  100. }, {
  101. key: 'setSelectedValue',
  102. value: function setSelectedValue(newSelectionValue) {
  103. this.updateRadioButtons(newSelectionValue);
  104. }
  105. }, {
  106. key: 'clearValue',
  107. value: function clearValue() {
  108. this.setSelectedValue('');
  109. }
  110. }, {
  111. key: 'render',
  112. value: function render() {
  113. var _this3 = this;
  114. var prepareStyles = this.context.muiTheme.prepareStyles;
  115. var options = _react2.default.Children.map(this.props.children, function (option) {
  116. var _option$props = option.props,
  117. name = _option$props.name,
  118. value = _option$props.value,
  119. label = _option$props.label,
  120. onCheck = _option$props.onCheck,
  121. other = (0, _objectWithoutProperties3.default)(_option$props, ['name', 'value', 'label', 'onCheck']);
  122. return _react2.default.createElement(_RadioButton2.default, (0, _extends3.default)({}, other, {
  123. ref: option.props.value,
  124. name: _this3.props.name,
  125. key: option.props.value,
  126. value: option.props.value,
  127. label: option.props.label,
  128. labelPosition: _this3.props.labelPosition,
  129. onCheck: _this3.handleChange,
  130. checked: option.props.value === _this3.state.selected
  131. }));
  132. }, this);
  133. return _react2.default.createElement(
  134. 'div',
  135. {
  136. style: prepareStyles((0, _simpleAssign2.default)({}, this.props.style)),
  137. className: this.props.className
  138. },
  139. options
  140. );
  141. }
  142. }]);
  143. return RadioButtonGroup;
  144. }(_react.Component);
  145. RadioButtonGroup.defaultProps = {
  146. style: {}
  147. };
  148. RadioButtonGroup.contextTypes = {
  149. muiTheme: _propTypes2.default.object.isRequired
  150. };
  151. RadioButtonGroup.propTypes = process.env.NODE_ENV !== "production" ? {
  152. /**
  153. * Should be used to pass `RadioButton` components.
  154. */
  155. children: _propTypes2.default.node,
  156. /**
  157. * The CSS class name of the root element.
  158. */
  159. className: _propTypes2.default.string,
  160. /**
  161. * The `value` property of the radio button that will be
  162. * selected by default. This takes precedence over the `checked` property
  163. * of the `RadioButton` elements.
  164. */
  165. defaultSelected: _propTypes2.default.any,
  166. /**
  167. * Where the label will be placed for all child radio buttons.
  168. * This takes precedence over the `labelPosition` property of the
  169. * `RadioButton` elements.
  170. */
  171. labelPosition: _propTypes2.default.oneOf(['left', 'right']),
  172. /**
  173. * The name that will be applied to all child radio buttons.
  174. */
  175. name: _propTypes2.default.string.isRequired,
  176. /**
  177. * Callback function that is fired when a radio button has
  178. * been checked.
  179. *
  180. * @param {object} event `change` event targeting the selected
  181. * radio button.
  182. * @param {*} value The `value` of the selected radio button.
  183. */
  184. onChange: _propTypes2.default.func,
  185. /**
  186. * Override the inline-styles of the root element.
  187. */
  188. style: _propTypes2.default.object,
  189. /**
  190. * The `value` of the currently selected radio button.
  191. */
  192. valueSelected: _propTypes2.default.any
  193. } : {};
  194. exports.default = RadioButtonGroup;