import { SelectControl, TextControl, } from '@wordpress/components'; import { Fragment } from '@wordpress/element'; import { __ } from '@wordpress/i18n'; import { applyFilters } from '@wordpress/hooks'; import UnitPicker from '../../../components/unit-picker'; import sizingValue from '../../../utils/sizingValue'; export default ( props ) => { const { attributes, setAttributes, deviceType, blockDefaults, } = props; const { isGrid, outerContainer, innerContainer, containerWidth, align, useInnerContainer, sizing, verticalAlignment, verticalAlignmentTablet, verticalAlignmentMobile, } = attributes; if ( ! useInnerContainer ) { return null; } return ( <> { ! isGrid && ( <> { 'Desktop' === deviceType && <Fragment> <SelectControl label={ __( 'Container', 'generateblocks' ) } value={ outerContainer } options={ [ { label: __( 'Full width', 'generateblocks' ), value: 'full' }, { label: __( 'Contained width', 'generateblocks' ), value: 'contained' }, ] } onChange={ ( value ) => { setAttributes( { outerContainer: value, } ); if ( 'contained' === value && 'full' === align ) { setAttributes( { align: '', } ); } } } /> { 'full' === outerContainer && <SelectControl label={ __( 'Inner Container', 'generateblocks' ) } value={ innerContainer } options={ [ { label: __( 'Full width', 'generateblocks' ), value: 'full' }, { label: __( 'Contained width', 'generateblocks' ), value: 'contained' }, ] } onChange={ ( value ) => { setAttributes( { innerContainer: value, } ); } } /> } { ( 'contained' === outerContainer || 'contained' === innerContainer ) && <Fragment> <UnitPicker label={ 'full' === outerContainer && 'contained' === innerContainer ? __( 'Inner Container Width', 'generateblocks' ) : __( 'Container Width', 'generateblocks' ) } value={ 'px' } units={ [ 'px' ] } onClick={ () => { return false; } } /> <TextControl type={ 'number' } className="gblocks-container-width" value={ parseFloat( containerWidth ) || '' } placeholder={ blockDefaults.containerWidth } onChange={ ( value ) => { setAttributes( { containerWidth: '' !== value ? parseFloat( value ) : undefined, } ); } } /> </Fragment> } </Fragment> } </> ) } { 'Desktop' === deviceType && <> { ( !! isGrid || sizingValue( 'minHeight', sizing ) ) && <> <SelectControl label={ __( 'Vertical Alignment', 'generateblocks' ) } help={ __( 'Align grid item content. Does not apply if vertical alignment is set in the grid.', 'generateblocks' ) } value={ verticalAlignment } options={ [ { label: __( 'Default', 'generateblocks' ), value: '' }, { label: __( 'Top', 'generateblocks' ), value: 'flex-start' }, { label: __( 'Center', 'generateblocks' ), value: 'center' }, { label: __( 'Bottom', 'generateblocks' ), value: 'flex-end' }, ] } onChange={ ( value ) => { setAttributes( { verticalAlignment: value, } ); } } /> </> } </> } { 'Tablet' === deviceType && ( !! isGrid || sizingValue( 'minHeight', sizing ) || sizingValue( 'minHeightTablet', sizing ) ) && <SelectControl label={ __( 'Vertical Alignment', 'generateblocks' ) } help={ __( 'Align grid item content. Does not apply if vertical alignment is set in the grid.', 'generateblocks' ) } value={ verticalAlignmentTablet } options={ [ { label: __( 'Inherit', 'generateblocks' ), value: 'inherit' }, { label: __( 'Default', 'generateblocks' ), value: '' }, { label: __( 'Top', 'generateblocks' ), value: 'flex-start' }, { label: __( 'Center', 'generateblocks' ), value: 'center' }, { label: __( 'Bottom', 'generateblocks' ), value: 'flex-end' }, ] } onChange={ ( value ) => { setAttributes( { verticalAlignmentTablet: value, } ); } } /> } { 'Mobile' === deviceType && ( !! isGrid || sizingValue( 'minHeight', sizing ) || sizingValue( 'minHeightTablet', sizing ) || sizingValue( 'minHeightMobile', sizing ) ) && <SelectControl label={ __( 'Vertical Alignment', 'generateblocks' ) } help={ __( 'Align grid item content. Does not apply if vertical alignment is set in the grid.', 'generateblocks' ) } value={ verticalAlignmentMobile } options={ [ { label: __( 'Inherit', 'generateblocks' ), value: 'inherit' }, { label: __( 'Default', 'generateblocks' ), value: '' }, { label: __( 'Top', 'generateblocks' ), value: 'flex-start' }, { label: __( 'Center', 'generateblocks' ), value: 'center' }, { label: __( 'Bottom', 'generateblocks' ), value: 'flex-end' }, ] } onChange={ ( value ) => { setAttributes( { verticalAlignmentMobile: value, } ); } } /> } { applyFilters( 'generateblocks.editor.controls', '', 'containerLayout', props ) } </> ); };