UNPKG

@plone/volto

Version:
77 lines (71 loc) 2.13 kB
/** * NewsItemView view component. * @module components/theme/View/NewsItemView */ import React from 'react'; import PropTypes from 'prop-types'; import { Container as SemanticContainer } from 'semantic-ui-react'; import { hasBlocksData } from '@plone/volto/helpers/Blocks/Blocks'; import { flattenHTMLToAppURL } from '@plone/volto/helpers/Url/Url'; import RenderBlocks from '@plone/volto/components/theme/View/RenderBlocks'; import config from '@plone/volto/registry'; /** * NewsItemView view component class. * @function NewsItemView * @params {object} content Content object. * @returns {string} Markup of the component. */ const NewsItemView = ({ content }) => { const Image = config.getComponent({ name: 'Image' }).component; const Container = config.getComponent({ name: 'Container' }).component || SemanticContainer; return hasBlocksData(content) ? ( <Container id="page-document" className="view-wrapper newsitem-view"> <RenderBlocks content={content} /> </Container> ) : ( <Container className="view-wrapper"> {content.title && ( <h1 className="documentFirstHeading"> {content.title} {content.subtitle && ` - ${content.subtitle}`} </h1> )} {content.description && ( <p className="documentDescription">{content.description}</p> )} {content.image && ( <Image className="documentImage ui right floated image" alt={content.title} title={content.title} item={content} imageField="image" responsive={true} /> )} {content.text && ( <div dangerouslySetInnerHTML={{ __html: flattenHTMLToAppURL(content.text.data), }} /> )} </Container> ); }; /** * Property types. * @property {Object} propTypes Property types. * @static */ NewsItemView.propTypes = { content: PropTypes.shape({ title: PropTypes.string, description: PropTypes.string, text: PropTypes.shape({ data: PropTypes.string, }), }).isRequired, }; export default NewsItemView;