UNPKG

@kitconcept/volto-light-theme

Version:
153 lines (144 loc) 4.72 kB
import React from 'react'; import { useIntl, defineMessages } from 'react-intl'; import Icon from '@plone/volto/components/theme/Icon/Icon'; import MaybeWrap from '@plone/volto/components/manage/MaybeWrap/MaybeWrap'; import UniversalLink from '@plone/volto/components/manage/UniversalLink/UniversalLink'; import { Input, Button, Message } from 'semantic-ui-react'; import { isInternalURL } from '@plone/volto/helpers/Url/Url'; import cx from 'classnames'; import navTreeSVG from '@plone/volto/icons/nav.svg'; import imageBlockSVG from '@plone/volto/components/manage/Blocks/Image/block-image.svg'; import config from '@plone/volto/registry'; const messages = defineMessages({ PleaseChooseContent: { id: 'Please choose an existing content as source for this element', defaultMessage: 'Please choose an existing content as source for this element', }, moreInfo: { id: 'moreInfo', defaultMessage: 'More info', }, source: { id: 'Source', defaultMessage: 'Source', }, ButtonText: { id: 'Continue reading', defaultMessage: 'Continue reading', }, }); const DefaultImage = (props) => <img {...props} alt={props.alt || ''} />; const SliderVariants = ({ index, onChangeBlock, block, data, dataBlock, isEditMode, openObjectBrowser, }) => { const intl = useIntl(); const href = data.href?.[0]; const image = data.preview_image?.[0]; const Image = config.getComponent('Image').component || DefaultImage; const { openExternalLinkInNewTab } = config.settings; const handleClick = () => { openObjectBrowser({ onSelectItem: (url, document) => { dataBlock.slides[index].title = document.Title; dataBlock.slides[index].description = document.Description; dataBlock.slides[index].href = [ { '@id': document['@id'], Title: document.Title, Description: document.Description, title: document.Title, image_field: document.image_field, hasPreviewImage: document.hasPreviewImage, }, ]; onChangeBlock(block, dataBlock); }, mode: 'link', }); }; return ( <div className={cx('grid-teaser-item top', { 'empty-slide': !href && isEditMode, })} > {!href && isEditMode && ( <Message> <div className="grid-teaser-item default"> <img src={imageBlockSVG} alt="" /> <p>{intl.formatMessage(messages.PleaseChooseContent)}</p> <div className="toolbar-inner"> <Button.Group> <Button onClick={handleClick} icon basic> <Icon name={navTreeSVG} size="24px" /> </Button> </Button.Group> <Input placeholder={`${intl.formatMessage(messages.source)}...`} onClick={handleClick} onFocus={(e) => e.target.blur()} /> </div> </div> </Message> )} {href && ( <MaybeWrap condition={!isEditMode} as={UniversalLink} href={href['@id']} className="link-container" target={ data.openLinkInNewTab || (openExternalLinkInNewTab && !isInternalURL(href['@id'])) ? '_blank' : null } tabIndex="-1" > <div className={cx( 'teaser-item top', `has--slider--flagAlign--${data.flagAlign}`, dataBlock.variation, )} > {(href?.hasPreviewImage || href.image_field || image) && ( <div className="highlight-image-wrapper gradient"> <Image item={image || href} imageField={image ? image.image_field : href.image_field} alt="" loading="lazy" responsive={true} /> </div> )} <div className="teaser-item-title fix-width-issue"> <div className="title"> {data?.head_title && ( <span className="supertitle">{data?.head_title}</span> )} <h2>{data?.nav_title || data?.title}</h2> </div> <p className="slider-description">{data?.description}</p> {!data.hideButton && ( <Button tabIndex={'-1'}> {data.buttonText || intl.formatMessage(messages.ButtonText)} </Button> )} </div> </div> </MaybeWrap> )} </div> ); }; export default SliderVariants;