UNPKG

design-comuni-plone-theme

Version:
126 lines (120 loc) 3.39 kB
import React from 'react'; import PropTypes from 'prop-types'; import cx from 'classnames'; import { UniversalLink } from '@plone/volto/components'; import { injectLazyLibs } from '@plone/volto/helpers/Loadable/Loadable'; import { getCalendarDate, contentHasImage, } from 'design-comuni-plone-theme/helpers'; import { Icon, CardCategory, getItemIcon, ListingCategory, } from 'design-comuni-plone-theme/components/ItaliaTheme'; import config from '@plone/volto/registry'; /** * GenericCard view component class. * @function GenericCard * @params {object} location: object. * @returns {string} Markup of the component. */ const GenericCard = ({ item, showimage, image_field, show_icon, showDescription = true, showInfos = false, children, size, rrule, }) => { const icon = getItemIcon(item); const Image = config.getComponent({ name: 'Image' }).component; const infos = ( <> {showInfos && ( <CardCategory iconName={icon} date={getCalendarDate(item, rrule.rrulestr)} > <ListingCategory category={item?.design_italia_meta_type} item={item} /> </CardCategory> )} </> ); const cooked_image_field = image_field || item.image_field; const showImage = showimage && contentHasImage(item) && cooked_image_field; return item ? ( showImage ? ( <div className={cx( 'genericcard card shadow rounded mt-3', size === 'big' ? 'card-big-io-comune' : 'card-small', )} > <div className="img-responsive-wrapper"> <div className="img-responsive img-responsive-panoramic"> <figure className="img-wrapper"> <Image item={item} imageField={cooked_image_field} alt={''} title={item.title} /> </figure> </div> </div> <div className="card-body px-4"> {infos} <div className="card-title h5"> {show_icon && <Icon icon={show_icon} padding={false} />} <UniversalLink item={item}>{item.title}</UniversalLink> </div> {(showDescription || children) && ( <div className="card-text"> {item.description} {children} </div> )} </div> </div> ) : ( <div className={cx( 'genericcard card card-teaser shadow p-4 mt-3 rounded', size === 'big' ? 'card-big-io-comune' : 'card-small', )} > <div className="card-body"> {infos} <div className="card-title h5"> {show_icon && <Icon icon={show_icon} padding={false} />} <UniversalLink item={item}>{item.title}</UniversalLink> </div> {(showDescription || children) && ( <div className="card-text"> {item.description} {children} </div> )} </div> </div> ) ) : null; }; export default injectLazyLibs(['rrule'])(GenericCard); GenericCard.propTypes = { item: PropTypes.shape({ '@id': PropTypes.string, '@type': PropTypes.string, title: PropTypes.string, description: PropTypes.string, review_state: PropTypes.string, }), showimage: PropTypes.bool, image_field: PropTypes.string, };