@plone/volto
Version:
Volto
80 lines (73 loc) • 1.8 kB
JSX
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;