File "ContainerContentRenderer.js"
Full path: /home/webcknlt/admissiontell.com/wp-content/plugins/generateblocks/src/blocks/container/components/ContainerContentRenderer.js
File
size: 3.7 B (3.7 KB bytes)
MIME-type: text/x-java
Charset: utf-8
Download Open Edit Advanced Editor &nnbsp; Back
import RootElement from '../../../components/root-element';
import GridItem from './GridItem';
import { applyFilters, doAction } from '@wordpress/hooks';
import { useBlockProps, store as blockEditorStore, useInnerBlocksProps } from '@wordpress/block-editor';
import ShapeDividers from './ShapeDividers';
import classnames from 'classnames';
import { useInnerBlocksCount } from '../../../hooks';
import { useSelect } from '@wordpress/data';
import ComponentCSS from './ComponentCSS';
import getBackgroundImageUrl from '../../../utils/get-background-image-url';
import BlockAppender from './BlockAppender';
export default function ContainerContentRenderer( props ) {
const {
attributes,
clientId,
name,
filterTagName,
allShapes,
deviceType,
containerRef,
} = props;
const {
uniqueId,
className,
anchor,
tagName,
backgroundColor,
isGrid,
bgOptions,
bgImageInline,
bgImage,
align,
isBlockPreview = false,
useInnerContainer,
templateLock,
} = attributes;
const TagName = filterTagName( applyFilters( 'generateblocks.frontend.containerTagName', tagName, attributes ) );
const innerBlocksCount = useInnerBlocksCount( clientId );
const hasChildBlocks = 0 < innerBlocksCount;
const supportsLayout = useSelect( ( select ) => {
const {
getSettings,
} = select( blockEditorStore );
return getSettings().supportsLayout || false;
}, [] );
let hasStyling = (
!! backgroundColor ||
!! bgImage ||
attributes.borderSizeTop ||
attributes.borderSizeRight ||
attributes.borderSizeBottom ||
attributes.borderSizeLeft
);
hasStyling = applyFilters( 'generateblocks.editor.containerHasStyling', hasStyling, props );
let htmlAttributes = {
className: classnames( {
'gb-container': true,
[ `gb-container-${ uniqueId }` ]: true,
[ `${ className }` ]: undefined !== className,
'gb-container-empty': ! hasChildBlocks && ! isBlockPreview,
'gb-container-visual-guides': ! hasChildBlocks && ! hasStyling && ! props.isSelected && ! isBlockPreview,
[ `align${ align }` ]: supportsLayout,
} ),
id: anchor ? anchor : null,
'data-align': align && ! supportsLayout ? align : null,
ref: containerRef,
};
const backgroundUrl = getBackgroundImageUrl( props );
if ( bgImageInline && backgroundUrl ) {
let imageAttributeName = 'background-image';
if ( 'element' !== bgOptions.selector ) {
imageAttributeName = '--' + imageAttributeName;
}
htmlAttributes.style = {
[ imageAttributeName ]: 'url(' + backgroundUrl + ')',
};
}
htmlAttributes = applyFilters(
'generateblocks.frontend.htmlAttributes',
htmlAttributes,
'generateblocks/container',
attributes
);
const blockProps = useBlockProps( htmlAttributes );
const innerBlocksProps = useInnerBlocksProps(
! useInnerContainer
? blockProps
: { className: 'gb-inside-container' },
{
templateLock: applyFilters( 'generateblocks.editor.containerTemplateLock', templateLock || false, props ),
renderAppender: () => <BlockAppender clientId={ clientId } isSelected={ props.isSelected } attributes={ attributes } />,
}
);
doAction( 'generateblocks.editor.renderBlock', { ...props, ref: containerRef } );
const containerBlockProps = useInnerContainer ? blockProps : innerBlocksProps;
return (
<>
<ComponentCSS { ...props } deviceType={ deviceType } />
<RootElement name={ name } clientId={ clientId } align={ align }>
<GridItem isGrid={ isGrid } uniqueId={ uniqueId }>
<TagName { ...containerBlockProps }>
<>
{ useInnerContainer
? <div { ...innerBlocksProps }>{ innerBlocksProps.children }</div>
: innerBlocksProps.children
}
<ShapeDividers attributes={ attributes } allShapes={ allShapes } />
</>
</TagName>
</GridItem>
</RootElement>
</>
);
}