UNPKG

design-comuni-plone-theme

Version:
173 lines (153 loc) 5.03 kB
/* * Page Header Component used in most of the views */ import cx from 'classnames'; import PropTypes from 'prop-types'; import { defineMessages, useIntl } from 'react-intl'; import { Actions, ArgumentIcon, PageHeaderBando, PageHeaderDates, PageHeaderEventDates, PageHeaderExtend, PageHeaderNewsItem, PageHeaderPersona, PageHeaderStatoServizio, PageHeaderLinkServizio, PageHeaderTassonomiaArgomenti, PageHeaderDocumento, Sharing, } from 'design-comuni-plone-theme/components/ItaliaTheme/View'; import config from '@plone/volto/registry'; const messages = defineMessages({ reading_time: { id: 'reading_time', defaultMessage: 'Tempo di lettura', }, minutes: { id: 'minutes', defaultMessage: 'min', }, }); /** * PageHeader view component class. * @function PageHeader * @params content {object} content object * @params imageinheader {boolean} if true, show image in header (eg. in PersonaView) * @params imageinheader_field {string} field name of the image to show in header (eg. 'foto_persona') * @params readingtime {number} reading time in minutes * @params showreadingtime {boolean} show or hide reading time * @params showdates {boolean} show or hide dates in header * @params showtassonomiaargomenti {boolean} show or hide argomenti in header * @returns {string} Markup of the component. */ const PageHeader = (props) => { const { content, imageinheader, imageinheader_field, readingtime, showdates, showreadingtime, showtassonomiaargomenti, } = props; const intl = useIntl(); const Image = config.getComponent({ name: 'Image' }).component; const subtitle = content.subtitle || content.sottotitolo; return ( <div className="PageHeaderWrapper mb-4"> <div className="row mb-2 mb-lg-0 page-header"> <div className={cx('py-lg-2 page-header-left', { 'col-lg-6': imageinheader, 'col-lg-8': !imageinheader, })} > {(content.icon || content.icona) && ( <ArgumentIcon icon={content.icon || content.icona} /> )} <h1 data-element={ content['@type'] === 'Servizio' ? 'service-title' : 'page-name' } > {content.title} </h1> {subtitle && <p className="h2">{subtitle}</p>} <PageHeaderEventDates content={content} /> <PageHeaderStatoServizio content={content} /> <PageHeaderDocumento content={content} /> {content.description && ( <p className="documentDescription" data-element={ content['@type'] === 'Servizio' ? 'service-description' : undefined } > {content.description} </p> )} <PageHeaderBando content={content} /> <PageHeaderPersona content={content} /> <PageHeaderNewsItem content={content} /> <PageHeaderLinkServizio content={content} /> <PageHeaderExtend {...props} /> {(showreadingtime || showdates) && ( <div className="row mt-5 mb-4 readingtime-dates"> {showdates ? ( <PageHeaderDates content={content} /> ) : ( <div className="col-6"></div> )} {showreadingtime && readingtime > 0 && (( <div className="col-6"> <small>{intl.formatMessage(messages.reading_time)}:</small> <p className="font-monospace"> {readingtime} {intl.formatMessage(messages.minutes)} </p> </div> ) || <div className="col-6" />)} </div> )} </div> {imageinheader && content[imageinheader_field] ? ( <div className="col-lg-2 page-header-image"> <figure> <Image item={content} imageField={imageinheader_field} alt="" className="img-fluid" sizes="(max-width:768px) 300px, 200px" /> </figure> </div> ) : null} <div className={'page-header-right py-lg-4 col-lg-3 offset-lg-1'}> <Sharing url={content['@id']} title={content.title} /> <Actions url={content['@id']} title={content.title} /> {showtassonomiaargomenti && ( <PageHeaderTassonomiaArgomenti content={content} /> )} </div> </div> </div> ); }; export default PageHeader; PageHeader.propTypes = { params: PropTypes.shape({ content: PropTypes.object.isRequired, imageinheader: PropTypes.bool, imageinheader_field: PropTypes.string, readingtime: PropTypes.string, showdates: PropTypes.bool, showreadingtime: PropTypes.bool, showtassonomiaargomenti: PropTypes.bool, }), };