design-comuni-plone-theme
Version:
Volto Theme for Italia design guidelines
81 lines (71 loc) • 2.01 kB
JSX
/**
* ViewBlock.
* @module components/ItaliaTheme/Blocks/IconBlocks/Block/ViewBlock
*/
import React from 'react';
import PropTypes from 'prop-types';
import { useIntl, defineMessages } from 'react-intl';
import { UniversalLink } from '@plone/volto/components';
import { Icon } from 'design-comuni-plone-theme/components/ItaliaTheme';
import { Card, CardBody, CardReadMore } from 'design-react-kit';
import { TextBlockView } from '@plone/volto-slate/blocks/Text';
const messages = defineMessages({
vedi: {
id: 'Vedi',
defaultMessage: 'Vedi',
},
});
/**
* ViewBlock class.
* @class ViewBlock
* @extends Component
*/
const ViewBlock = ({ data, isOpen, toggle, id, index, blockHasTitle }) => {
const intl = useIntl();
return (
<Card
className="card-bg rounded subblock-view"
noWrapper={false}
space
tag="div"
>
<CardBody tag="div">
{data.icon?.length > 0 && (
<div className="iconblock-icon">
<Icon icon={data.icon} aria-hidden={true} title={data.title} />
</div>
)}
{data.title && (
<div className="iconblock-title">
{blockHasTitle ? <h3>{data.title}</h3> : data.title}
</div>
)}
{data.text && (
<div className="iconblock-text">
<TextBlockView data={{ value: data.text }} />
</div>
)}
{data.href && (
<CardReadMore
iconName="it-arrow-right"
tag={UniversalLink}
href={data.href ?? '#'}
text={data.linkMoreTitle || intl.formatMessage(messages.vedi)}
aria-label={`${
data.linkMoreTitle || intl.formatMessage(messages.vedi)
} ${data.title ?? ''}`}
/>
)}
</CardBody>
</Card>
);
};
/**
* Property types.
* @property {Object} propTypes Property types.
* @static
*/
ViewBlock.propTypes = {
data: PropTypes.objectOf(PropTypes.any).isRequired,
};
export default ViewBlock;