@wordpress/block-editor
Version:
58 lines (50 loc) • 1.41 kB
JavaScript
/**
* WordPress dependencies
*/
import { Disabled } from '@wordpress/components';
import { useResizeObserver, pure } from '@wordpress/compose';
/**
* Internal dependencies
*/
import BlockList from '../block-list';
// This is used to avoid rendering the block list if the sizes change.
let MemoizedBlockList;
function AutoBlockPreview( { viewportWidth, __experimentalPadding } ) {
const [
containerResizeListener,
{ width: containerWidth },
] = useResizeObserver();
const [
containtResizeListener,
{ height: contentHeight },
] = useResizeObserver();
// Initialize on render instead of module top level, to avoid circular dependency issues.
MemoizedBlockList = MemoizedBlockList || pure( BlockList );
const scale =
( containerWidth - 2 * __experimentalPadding ) / viewportWidth;
return (
<div
className="block-editor-block-preview__container editor-styles-wrapper"
aria-hidden
style={ {
height: contentHeight * scale + 2 * __experimentalPadding,
} }
>
{ containerResizeListener }
<Disabled
style={ {
transform: `scale(${ scale })`,
width: viewportWidth,
left: __experimentalPadding,
right: __experimentalPadding,
top: __experimentalPadding,
} }
className="block-editor-block-preview__content"
>
{ containtResizeListener }
<MemoizedBlockList />
</Disabled>
</div>
);
}
export default AutoBlockPreview;