/** * External dependencies */ import { __ } from '@wordpress/i18n'; import { clamp, isNaN } from 'lodash'; import { Fragment } from '@wordpress/element'; import PropTypes from 'prop-types'; import { RangeControl, ToggleControl } from '@wordpress/components'; /** * A combination of range controls for product grid layout settings. */ const GridLayoutControl = ( { columns, rows, setAttributes, alignButtons } ) => { return ( { const newValue = clamp( value, wc_product_block_data.min_columns, wc_product_block_data.max_columns ); setAttributes( { columns: isNaN( newValue ) ? '' : newValue } ); } } min={ wc_product_block_data.min_columns } max={ wc_product_block_data.max_columns } /> { const newValue = clamp( value, wc_product_block_data.min_rows, wc_product_block_data.max_rows ); setAttributes( { rows: isNaN( newValue ) ? '' : newValue } ); } } min={ wc_product_block_data.min_rows } max={ wc_product_block_data.max_rows } /> setAttributes( { alignButtons: ! alignButtons } ) } /> ); }; GridLayoutControl.propTypes = { /** * The current columns count. */ columns: PropTypes.oneOfType( [ PropTypes.number, PropTypes.string ] ).isRequired, /** * The current rows count. */ rows: PropTypes.oneOfType( [ PropTypes.number, PropTypes.string ] ).isRequired, /** * Whether or not buttons are aligned horizontally across items. */ alignButtons: PropTypes.bool.isRequired, /** * Callback to update the layout settings. */ setAttributes: PropTypes.func.isRequired, }; export default GridLayoutControl;