UNPKG

@wordpress/block-library

Version:
111 lines (104 loc) 2.59 kB
/** * WordPress dependencies */ import { InspectorControls, useBlockProps, __experimentalGetSpacingClassesAndStyles as useSpacingProps, store as blockEditorStore, } from '@wordpress/block-editor'; import { PanelBody, ResizableBox, RangeControl } from '@wordpress/components'; import { useEntityProp } from '@wordpress/core-data'; import { useSelect } from '@wordpress/data'; import { __, isRTL } from '@wordpress/i18n'; export default function Edit( { attributes, context: { commentId }, setAttributes, isSelected, } ) { const { height, width } = attributes; const [ avatars ] = useEntityProp( 'root', 'comment', 'author_avatar_urls', commentId ); const [ authorName ] = useEntityProp( 'root', 'comment', 'author_name', commentId ); const avatarUrls = avatars ? Object.values( avatars ) : null; const sizes = avatars ? Object.keys( avatars ) : null; const minSize = sizes ? sizes[ 0 ] : 24; const maxSize = sizes ? sizes[ sizes.length - 1 ] : 96; const blockProps = useBlockProps(); const spacingProps = useSpacingProps( attributes ); const maxSizeBuffer = Math.floor( maxSize * 2.5 ); const { avatarURL } = useSelect( ( select ) => { const { getSettings } = select( blockEditorStore ); const { __experimentalDiscussionSettings } = getSettings(); return __experimentalDiscussionSettings; } ); const inspectorControls = ( <InspectorControls> <PanelBody title={ __( 'Settings' ) }> <RangeControl __nextHasNoMarginBottom __next40pxDefaultSize label={ __( 'Image size' ) } onChange={ ( newWidth ) => setAttributes( { width: newWidth, height: newWidth, } ) } min={ minSize } max={ maxSizeBuffer } initialPosition={ width } value={ width } /> </PanelBody> </InspectorControls> ); const resizableAvatar = ( <ResizableBox size={ { width, height, } } showHandle={ isSelected } onResizeStop={ ( event, direction, elt, delta ) => { setAttributes( { height: parseInt( height + delta.height, 10 ), width: parseInt( width + delta.width, 10 ), } ); } } lockAspectRatio enable={ { top: false, right: ! isRTL(), bottom: true, left: isRTL(), } } minWidth={ minSize } maxWidth={ maxSizeBuffer } > <img src={ avatarUrls ? avatarUrls[ avatarUrls.length - 1 ] : avatarURL } alt={ `${ authorName } ${ __( 'Avatar' ) }` } { ...blockProps } /> </ResizableBox> ); return ( <> { inspectorControls } <div { ...spacingProps }>{ resizableAvatar }</div> </> ); }