UNPKG

@plone/volto

Version:
80 lines (73 loc) 1.8 kB
import { defineMessages, useIntl } from 'react-intl'; import Icon from '@plone/volto/components/theme/Icon/Icon'; import { Button } from 'semantic-ui-react'; import imageLeftSVG from '@plone/volto/icons/image-left.svg'; import imageRightSVG from '@plone/volto/icons/image-right.svg'; import imageFitSVG from '@plone/volto/icons/image-fit.svg'; import imageWideSVG from '@plone/volto/icons/image-wide.svg'; import imageFullSVG from '@plone/volto/icons/image-full.svg'; const messages = defineMessages({ left: { id: 'Left', defaultMessage: 'Left', }, right: { id: 'Right', defaultMessage: 'Right', }, center: { id: 'Center', defaultMessage: 'Center', }, wide: { id: 'Wide', defaultMessage: 'Wide', }, full: { id: 'Full', defaultMessage: 'Full', }, }); const AlignBlock = ({ align, onChangeBlock, data, block, actions = ['left', 'right', 'center', 'full'], }) => { const intl = useIntl(); const ICON_MAP = { left: imageLeftSVG, right: imageRightSVG, center: imageFitSVG, wide: imageWideSVG, full: imageFullSVG, }; function onAlignBlock(align) { onChangeBlock(block, { ...data, align, }); } return ( <div className="align-buttons"> {actions.map((action) => ( <Button.Group key={action}> <Button type="button" icon basic aria-label={intl.formatMessage(messages[action])} onClick={() => onAlignBlock(action)} active={ (action === 'center' && !data.align) || data.align === action } > <Icon name={ICON_MAP[action]} size="24px" /> </Button> </Button.Group> ))} </div> ); }; export default AlignBlock;