UNPKG

@plone/volto

Version:
96 lines (87 loc) 3.02 kB
import React from 'react'; import PropTypes from 'prop-types'; import { defineMessages, useIntl } from 'react-intl'; import cx from 'classnames'; import { Message } from 'semantic-ui-react'; import LeadImageSidebar from '@plone/volto/components/manage/Blocks/LeadImage/LeadImageSidebar'; import SidebarPortal from '@plone/volto/components/manage/Sidebar/SidebarPortal'; import config from '@plone/volto/registry'; import imageBlockSVG from '@plone/volto/components/manage/Blocks/Image/block-image.svg'; const messages = defineMessages({ ImageBlockInputPlaceholder: { id: "Upload a lead image in the 'Lead Image' content field.", defaultMessage: "Upload a lead image in the 'Lead Image' content field.", }, }); const Edit = (props) => { const intl = useIntl(); const { data, properties, selected } = props; const placeholder = () => data.placeholder || intl.formatMessage(messages.ImageBlockInputPlaceholder); const Image = config.getComponent({ name: 'Image' }).component; const hasImage = !!properties.image; const hasImageData = hasImage && !!properties.image.data; const className = cx('responsive', { 'full-image': data.align === 'full' }); const altText = data.image_caption || properties.image_caption || ''; return ( <div className={cx( 'block image align', { center: !Boolean(data.align), }, data.align, )} > {!hasImage && ( <Message> <center> <Image src={imageBlockSVG} alt="" /> <div className="message-text">{placeholder}</div> </center> </Message> )} {hasImage && hasImageData && ( <Image className={className} src={`data:${properties.image['content-type']};base64,${properties.image.data}`} width={properties.image.width} height={properties.image.height} alt={altText} style={{ aspectRatio: `${properties.image.width}/${properties.image.height}`, }} /> )} {hasImage && !hasImageData && ( <Image className={className} item={properties} imageField="image" sizes={(() => { return data.align === 'full' || data.align === 'center' ? '100vw' : data.align === 'left' || data.align === 'right' ? '50vw' : undefined; })()} alt={altText} /> )} <SidebarPortal selected={selected}> <LeadImageSidebar {...props} /> </SidebarPortal> </div> ); }; export default Edit; Edit.propTypes = { properties: PropTypes.objectOf(PropTypes.any).isRequired, selected: PropTypes.bool.isRequired, block: PropTypes.string.isRequired, index: PropTypes.number.isRequired, data: PropTypes.objectOf(PropTypes.any).isRequired, pathname: PropTypes.string.isRequired, onChangeBlock: PropTypes.func.isRequired, openObjectBrowser: PropTypes.func.isRequired, };