/**
* Internal dependencies
*/
import applyWithColors from './colors';
import { BackgroundPanel } from '../../../components/background';
import DimensionsControl from '../../../components/dimensions-control/';
/**
* WordPress dependencies
*/
const { __ } = wp.i18n;
const { Component, Fragment } = wp.element;
const { compose } = wp.compose;
const { InspectorControls, PanelColorSettings } = wp.blockEditor;
const { PanelBody, RangeControl, SelectControl, withFallbackStyles } = wp.components;
/**
* Fallback styles
*/
const { getComputedStyle } = window;
const applyFallbackStyles = withFallbackStyles( ( node, ownProps ) => {
const { backgroundColor } = ownProps.attributes;
const editableNode = node.querySelector( '[contenteditable="true"]' );
//verify if editableNode is available, before using getComputedStyle.
const computedStyles = editableNode ? getComputedStyle( editableNode ) : null;
return {
fallbackBackgroundColor: backgroundColor || ! computedStyles ? undefined : computedStyles.backgroundColor,
};
} );
/**
* Inspector controls
*/
class Inspector extends Component {
render() {
const {
clientId,
attributes,
backgroundColor,
setAttributes,
setBackgroundColor,
textColor,
setTextColor,
} = this.props;
const {
columns,
gutter,
marginBottom,
marginLeft,
marginRight,
marginSize,
marginTop,
marginBottomTablet,
marginLeftTablet,
marginRightTablet,
marginTopTablet,
marginBottomMobile,
marginLeftMobile,
marginRightMobile,
marginTopMobile,
marginSyncUnits,
marginSyncUnitsTablet,
marginSyncUnitsMobile,
marginUnit,
paddingBottom,
paddingLeft,
paddingRight,
paddingSize,
paddingTop,
paddingBottomTablet,
paddingLeftTablet,
paddingRightTablet,
paddingTopTablet,
paddingBottomMobile,
paddingLeftMobile,
paddingRightMobile,
paddingTopMobile,
paddingSyncUnits,
paddingSyncUnitsTablet,
paddingSyncUnitsMobile,
paddingUnit,
} = attributes;
const gutterOptions = [
{ value: 'small', label: __( 'Small' ) },
{ value: 'medium', label: __( 'Medium' ) },
{ value: 'large', label: __( 'Large' ) },
];
return (
<Fragment>
<InspectorControls>
<PanelBody title={ __( 'Features Settings' ) } className="components-coblocks-block-sidebar--features">
<RangeControl
label={ __( 'Columns' ) }
value={ columns }
onChange={ ( nextCount ) => {
setAttributes( {
columns: parseInt( nextCount ),
} );
if ( parseInt( nextCount ) < 2 ) {
setAttributes( {
gutter: 'no',
} );
} else {
if ( gutter === 'no' ) {
setAttributes( {
gutter: 'large',
} );
}
}
wp.data.dispatch( 'core/block-editor' ).selectBlock( clientId );
} }
min={ 1 }
max={ 3 }
/>
<DimensionsControl { ...this.props }
type={ 'margin' }
label={ __( 'Margin' ) }
valueTop={ marginTop }
valueRight={ marginRight }
valueBottom={ marginBottom }
valueLeft={ marginLeft }
valueTopTablet={ marginTopTablet }
valueRightTablet={ marginRightTablet }
valueBottomTablet={ marginBottomTablet }
valueLeftTablet={ marginLeftTablet }
valueTopMobile={ marginTopMobile }
valueRightMobile={ marginRightMobile }
valueBottomMobile={ marginBottomMobile }
valueLeftMobile={ marginLeftMobile }
unit={ marginUnit }
syncUnits={ marginSyncUnits }
syncUnitsTablet={ marginSyncUnitsTablet }
syncUnitsMobile={ marginSyncUnitsMobile }
dimensionSize={ marginSize }
/>
<DimensionsControl { ...this.props }
type={ 'padding' }
label={ __( 'Padding' ) }
valueTop={ paddingTop }
valueRight={ paddingRight }
valueBottom={ paddingBottom }
valueLeft={ paddingLeft }
valueTopTablet={ paddingTopTablet }
valueRightTablet={ paddingRightTablet }
valueBottomTablet={ paddingBottomTablet }
valueLeftTablet={ paddingLeftTablet }
valueTopMobile={ paddingTopMobile }
valueRightMobile={ paddingRightMobile }
valueBottomMobile={ paddingBottomMobile }
valueLeftMobile={ paddingLeftMobile }
unit={ paddingUnit }
syncUnits={ paddingSyncUnits }
syncUnitsTablet={ paddingSyncUnitsTablet }
syncUnitsMobile={ paddingSyncUnitsMobile }
dimensionSize={ paddingSize }
/>
{ columns >= 2 &&
<SelectControl
label={ __( 'Gutter' ) }
value={ gutter }
options={ gutterOptions }
help={ __( 'Space between each column.' ) }
onChange={ ( value ) => setAttributes( { gutter: value } ) }
/>
}
</PanelBody>
<PanelColorSettings
title={ __( 'Color Settings' ) }
initialOpen={ false }
colorSettings={ [
{
value: backgroundColor.color,
onChange: ( nextBackground ) => {
setBackgroundColor( nextBackground );
//add padding if there's none
if ( ! paddingSize || paddingSize === 'no' ) {
setAttributes( { paddingSize: 'medium' } );
}
//reset when cleared
if ( ! nextBackground ) {
setAttributes( { paddingSize: 'no' } );
}
},
label: __( 'Background Color' ),
}, {
value: textColor.color,
onChange: setTextColor,
label: __( 'Text Color' ),
},
] }
>
</PanelColorSettings>
<BackgroundPanel { ...this.props }
hasCaption={ false }
hasOverlay={ true }
hasGalleryControls={ false }
/>
</InspectorControls>
</Fragment>
);
}
}
export default compose( [
applyWithColors,
applyFallbackStyles,
] )( Inspector );