UNPKG

design-comuni-plone-theme

Version:
170 lines (157 loc) 6.04 kB
/** * PaginaArgomentoView view component. * @module components/theme/View/PaginaArgomentoView/PaginaArgomentoView */ import React from 'react'; import { useLocation } from 'react-router-dom'; import { Portal } from 'react-portal'; import cx from 'classnames'; import { UniversalLink } from '@plone/volto/components'; import { Card, CardBody, CardText } from 'design-react-kit'; import { BodyClass, flattenToAppURL, hasBlocksData, } from '@plone/volto/helpers'; import { CardCategory, Breadcrumbs, } from 'design-comuni-plone-theme/components/ItaliaTheme'; import { ArgumentIcon, PaginaArgomentoPlaceholderAfterContent, PaginaArgomentoPlaceholderAfterRelatedItems, TextOrBlocks, RichText, PaginaArgomentoViewNoBlocks, RelatedItems, RelatedItemInEvidence, richTextHasContent, } from 'design-comuni-plone-theme/components/ItaliaTheme/View'; import config from '@plone/volto/registry'; /** * PaginaArgomentoView view component class. * @function PaginaArgomentoView * @params {object} content Content object. * @returns {string} Markup of the component. */ const PaginaArgomentoView = ({ content }) => { const Image = config.getComponent({ name: 'Image' }).component; const location = useLocation(); const rightHeaderHasContent = richTextHasContent(content.ulteriori_informazioni) || content?.unita_amministrative_responsabili?.length > 0; return hasBlocksData(content) ? ( <div id="page-document"> <div className="ui container px-4"> <div className="ArgomentoTitleWrapper rounded shadow mt-5 mb-5"> <div className={cx('title-description-wrapper', { 'col-lg-6': rightHeaderHasContent, 'col-lg-12': !rightHeaderHasContent, })} > <Breadcrumbs pathname={location.pathname} /> <ArgumentIcon icon={content.icona} title={content.title} /> <h1 className="mb-3" data-element="page-name"> {content?.title} </h1> <p className="description">{content?.description}</p> </div> {rightHeaderHasContent && ( <div className="col-lg-4 offset-lg-2"> <RichText serif={false} data={content.ulteriori_informazioni} /> {content?.unita_amministrative_responsabili?.length > 0 && content?.unita_amministrative_responsabili?.map((u, index) => { const uo_object = u; let alt = u.title; if ( uo_object?.image_scales?.preview_image?.length > 0 && uo_object?.preview_caption ) { alt = uo_object?.preview_caption; } else if ( uo_object?.image_scales?.image?.length > 0 && uo_object?.image_caption ) { alt = uo_object?.image_caption; } return ( <div className="row mb-3" key={index}> <div className="w-100"> <Card className={ 'listing-item card-bg border-left-card card-small' } > <div className="d-flex"> <CardBody className=""> <CardCategory> <span className="text fw-bold"> <UniversalLink href={flattenToAppURL(u['@id'])} > {u.title || u.id} </UniversalLink> </span> </CardCategory> <CardText> {uo_object?.sede?.[0]?.street} </CardText> </CardBody> {uo_object && (uo_object.image_scales?.image?.length > 0 || uo_object.image_scales?.preview_image?.length > 0) && ( <div className="image-container me-3"> <Image item={uo_object} alt="" title={alt} responsive={false} sizes="100px" /> </div> )} </div> </Card> </div> </div> ); })} </div> )} {content?.image && ( <> <Portal node={ __CLIENT__ && document.getElementById('portal-header-image') } > <div> <Image item={content} alt={content.image_caption ?? content.title} title={content.image_caption ?? content.title} key={content.image.download} responsive={true} sizes="100vw" /> </div> </Portal> <BodyClass className="has-image" /> </> )} </div> <TextOrBlocks content={content} /> <PaginaArgomentoPlaceholderAfterContent content={content} /> </div> <RelatedItems content={content} /> <RelatedItemInEvidence content={content} /> <PaginaArgomentoPlaceholderAfterRelatedItems content={content} /> </div> ) : ( <PaginaArgomentoViewNoBlocks content={content} /> ); }; export default PaginaArgomentoView;