UNPKG

4.06 kBJavaScriptView Raw
1"use strict";
2
3var _interopRequireWildcard = require("@babel/runtime/helpers/interopRequireWildcard");
4
5var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
6
7Object.defineProperty(exports, "__esModule", {
8 value: true
9});
10exports.default = void 0;
11
12var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
13
14var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
15
16var _objectWithoutProperties2 = _interopRequireDefault(require("@babel/runtime/helpers/objectWithoutProperties"));
17
18var React = _interopRequireWildcard(require("react"));
19
20var _propTypes = _interopRequireDefault(require("prop-types"));
21
22var _FormGroup = _interopRequireDefault(require("../FormGroup"));
23
24var _useForkRef = _interopRequireDefault(require("../utils/useForkRef"));
25
26var _useControlled3 = _interopRequireDefault(require("../utils/useControlled"));
27
28var _RadioGroupContext = _interopRequireDefault(require("./RadioGroupContext"));
29
30var _unstable_useId = _interopRequireDefault(require("../utils/unstable_useId"));
31
32var RadioGroup = /*#__PURE__*/React.forwardRef(function RadioGroup(props, ref) {
33 var actions = props.actions,
34 children = props.children,
35 nameProp = props.name,
36 valueProp = props.value,
37 onChange = props.onChange,
38 other = (0, _objectWithoutProperties2.default)(props, ["actions", "children", "name", "value", "onChange"]);
39 var rootRef = React.useRef(null);
40
41 var _useControlled = (0, _useControlled3.default)({
42 controlled: valueProp,
43 default: props.defaultValue,
44 name: 'RadioGroup'
45 }),
46 _useControlled2 = (0, _slicedToArray2.default)(_useControlled, 2),
47 value = _useControlled2[0],
48 setValue = _useControlled2[1];
49
50 React.useImperativeHandle(actions, function () {
51 return {
52 focus: function focus() {
53 var input = rootRef.current.querySelector('input:not(:disabled):checked');
54
55 if (!input) {
56 input = rootRef.current.querySelector('input:not(:disabled)');
57 }
58
59 if (input) {
60 input.focus();
61 }
62 }
63 };
64 }, []);
65 var handleRef = (0, _useForkRef.default)(ref, rootRef);
66
67 var handleChange = function handleChange(event) {
68 setValue(event.target.value);
69
70 if (onChange) {
71 onChange(event, event.target.value);
72 }
73 };
74
75 var name = (0, _unstable_useId.default)(nameProp);
76 return /*#__PURE__*/React.createElement(_RadioGroupContext.default.Provider, {
77 value: {
78 name: name,
79 onChange: handleChange,
80 value: value
81 }
82 }, /*#__PURE__*/React.createElement(_FormGroup.default, (0, _extends2.default)({
83 role: "radiogroup",
84 ref: handleRef
85 }, other), children));
86});
87process.env.NODE_ENV !== "production" ? RadioGroup.propTypes = {
88 // ----------------------------- Warning --------------------------------
89 // | These PropTypes are generated from the TypeScript type definitions |
90 // | To update them edit the d.ts file and run "yarn proptypes" |
91 // ----------------------------------------------------------------------
92
93 /**
94 * The content of the component.
95 */
96 children: _propTypes.default.node,
97
98 /**
99 * The default `input` element value. Use when the component is not controlled.
100 */
101 defaultValue: _propTypes.default.oneOfType([_propTypes.default.arrayOf(_propTypes.default.string), _propTypes.default.number, _propTypes.default.string]),
102
103 /**
104 * The name used to reference the value of the control.
105 * If you don't provide this prop, it falls back to a randomly generated name.
106 */
107 name: _propTypes.default.string,
108
109 /**
110 * Callback fired when a radio button is selected.
111 *
112 * @param {object} event The event source of the callback.
113 * You can pull out the new value by accessing `event.target.value` (string).
114 */
115 onChange: _propTypes.default.func,
116
117 /**
118 * Value of the selected radio button. The DOM API casts this to a string.
119 */
120 value: _propTypes.default.any
121} : void 0;
122var _default = RadioGroup;
123exports.default = _default;
\No newline at end of file