UNPKG

@wordpress/components

Version:
108 lines (92 loc) 2.8 kB
"use strict"; var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault"); Object.defineProperty(exports, "__esModule", { value: true }); exports.RadioControl = RadioControl; exports.default = void 0; var _element = require("@wordpress/element"); var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends")); var _classnames = _interopRequireDefault(require("classnames")); var _compose = require("@wordpress/compose"); var _baseControl = _interopRequireDefault(require("../base-control")); var _vStack = require("../v-stack"); /** * External dependencies */ /** * WordPress dependencies */ /** * Internal dependencies */ /** * Render a user interface to select the user type using radio inputs. * * ```jsx * import { RadioControl } from '@wordpress/components'; * import { useState } from '@wordpress/element'; * * const MyRadioControl = () => { * const [ option, setOption ] = useState( 'a' ); * * return ( * <RadioControl * label="User type" * help="The type of the current user" * selected={ option } * options={ [ * { label: 'Author', value: 'a' }, * { label: 'Editor', value: 'e' }, * ] } * onChange={ ( value ) => setOption( value ) } * /> * ); * }; * ``` */ function RadioControl(props) { const { label, className, selected, help, onChange, hideLabelFromVision, options = [], ...additionalProps } = props; const instanceId = (0, _compose.useInstanceId)(RadioControl); const id = `inspector-radio-control-${instanceId}`; const onChangeValue = event => onChange(event.target.value); if (!(options !== null && options !== void 0 && options.length)) { return null; } return (0, _element.createElement)(_baseControl.default, { __nextHasNoMarginBottom: true, label: label, id: id, hideLabelFromVision: hideLabelFromVision, help: help, className: (0, _classnames.default)(className, 'components-radio-control') }, (0, _element.createElement)(_vStack.VStack, { spacing: 1 }, options.map((option, index) => (0, _element.createElement)("div", { key: `${id}-${index}`, className: "components-radio-control__option" }, (0, _element.createElement)("input", (0, _extends2.default)({ id: `${id}-${index}`, className: "components-radio-control__input", type: "radio", name: id, value: option.value, onChange: onChangeValue, checked: option.value === selected, "aria-describedby": !!help ? `${id}__help` : undefined }, additionalProps)), (0, _element.createElement)("label", { htmlFor: `${id}-${index}` }, option.label))))); } var _default = RadioControl; exports.default = _default; //# sourceMappingURL=index.js.map