/** @format */ /** * External dependencies */ import { Component } from '@wordpress/element'; import classnames from 'classnames'; import PropTypes from 'prop-types'; import { partial, uniqueId } from 'lodash'; /** * Internal dependencies */ import './style.scss'; /** * Create a panel of styled selectable options rendering stylized checkboxes and labels */ class SegmentedSelection extends Component { render() { const { className, options, selected, onSelect, name, legend } = this.props; return (
{ legend }
{ options.map( ( { value, label } ) => { if ( ! value || ! label ) { return null; } const id = uniqueId( `${ value }_` ); return (
{ /* eslint-disable jsx-a11y/label-has-for */ } { /* eslint-enable jsx-a11y/label-has-for */ }
); } ) }
); } } SegmentedSelection.propTypes = { /** * Additional CSS classes. */ className: PropTypes.string, /** * An Array of options to render. The array needs to be composed of objects with properties `label` and `value`. */ options: PropTypes.arrayOf( PropTypes.shape( { value: PropTypes.string.isRequired, label: PropTypes.string.isRequired, } ) ).isRequired, /** * Value of selected item. */ selected: PropTypes.string, /** * Callback to be executed after selection */ onSelect: PropTypes.func.isRequired, /** * This will be the key in the key and value arguments supplied to `onSelect`. */ name: PropTypes.string.isRequired, /** * Create a legend visible to screen readers. */ legend: PropTypes.string.isRequired, }; export default SegmentedSelection;