From 7d6d66af9ca7f16a75affaf16e60f5d8571f63a6 Mon Sep 17 00:00:00 2001 From: nzambello Date: Tue, 5 Jan 2021 15:09:36 +0100 Subject: [PATCH 01/45] feat: add ImageFromUrl for srcset and lazy loading --- .../manage/Blocks/HeroImageLeft/View.jsx | 11 +--- .../manage/Blocks/HeroImageLeft/View.test.jsx | 4 +- .../__snapshots__/View.test.jsx.snap | 5 +- src/components/manage/Blocks/Image/View.jsx | 38 ++++++------- .../manage/Blocks/LeadImage/View.jsx | 8 +-- .../manage/Blocks/LeadImage/View.test.jsx | 52 +++++++++++++++++- .../__snapshots__/View.test.jsx.snap | 6 +- .../manage/Blocks/Listing/DefaultTemplate.jsx | 9 ++- .../theme/ImageFromUrl/ImageFromUrl.jsx | 42 ++++++++++++++ .../theme/ImageFromUrl/ImageFromUrl.test.jsx | 28 ++++++++++ .../__snapshots__/ImageFromUrl.test.jsx.snap | 24 ++++++++ src/components/theme/View/AlbumView.jsx | 1 + src/components/theme/View/DefaultView.jsx | 1 + src/components/theme/View/ImageView.jsx | 7 ++- src/components/theme/View/ListingView.jsx | 1 + src/components/theme/View/NewsItemView.jsx | 1 + src/components/theme/View/SummaryView.jsx | 1 + .../__snapshots__/ImageView.test.jsx.snap | 2 + .../__snapshots__/SummaryView.test.jsx.snap | 1 + src/config/ImageScales.jsx | 9 +++ src/config/index.js | 5 +- src/helpers/Image/Image.js | 55 +++++++++++++++++++ src/helpers/Image/Image.test.js | 28 ++++++++++ src/helpers/index.js | 2 + 24 files changed, 293 insertions(+), 48 deletions(-) create mode 100644 src/components/theme/ImageFromUrl/ImageFromUrl.jsx create mode 100644 src/components/theme/ImageFromUrl/ImageFromUrl.test.jsx create mode 100644 src/components/theme/ImageFromUrl/__snapshots__/ImageFromUrl.test.jsx.snap create mode 100644 src/config/ImageScales.jsx create mode 100644 src/helpers/Image/Image.js create mode 100644 src/helpers/Image/Image.test.js diff --git a/src/components/manage/Blocks/HeroImageLeft/View.jsx b/src/components/manage/Blocks/HeroImageLeft/View.jsx index 092ed8c38c..d728ffadbd 100644 --- a/src/components/manage/Blocks/HeroImageLeft/View.jsx +++ b/src/components/manage/Blocks/HeroImageLeft/View.jsx @@ -5,7 +5,7 @@ import React from 'react'; import PropTypes from 'prop-types'; -import { flattenToAppURL } from '@plone/volto/helpers'; +import ImageFromUrl from '@plone/volto/components/theme/ImageFromUrl/ImageFromUrl'; /** * View image block class. @@ -15,14 +15,7 @@ import { flattenToAppURL } from '@plone/volto/helpers'; const View = ({ data }) => (
- {data.url && ( - - )} + {data.url && }
{data.title &&

{data.title}

} {data.description &&

{data.description}

} diff --git a/src/components/manage/Blocks/HeroImageLeft/View.test.jsx b/src/components/manage/Blocks/HeroImageLeft/View.test.jsx index ce2fe7c83b..bf370372a5 100644 --- a/src/components/manage/Blocks/HeroImageLeft/View.test.jsx +++ b/src/components/manage/Blocks/HeroImageLeft/View.test.jsx @@ -3,7 +3,9 @@ import renderer from 'react-test-renderer'; import View from './View'; test('renders a view hero component', () => { - const component = renderer.create(); + const component = renderer.create( + , + ); const json = component.toJSON(); expect(json).toMatchSnapshot(); }); diff --git a/src/components/manage/Blocks/HeroImageLeft/__snapshots__/View.test.jsx.snap b/src/components/manage/Blocks/HeroImageLeft/__snapshots__/View.test.jsx.snap index 186361c20f..39177ea10b 100644 --- a/src/components/manage/Blocks/HeroImageLeft/__snapshots__/View.test.jsx.snap +++ b/src/components/manage/Blocks/HeroImageLeft/__snapshots__/View.test.jsx.snap @@ -11,7 +11,10 @@ exports[`renders a view hero component 1`] = ` alt="" className="hero-image" loading="lazy" - src="heroimage.jpg/@@images/image" + role="img" + sizes={null} + src="/heroimage.jpg/@@images/image" + srcSet="/heroimage.jpg/@@images/image/large 768w, /heroimage.jpg/@@images/image/preview 400w, /heroimage.jpg/@@images/image/mini 200w, /heroimage.jpg/@@images/image/thumb 128w, /heroimage.jpg/@@images/image/tile 64w, /heroimage.jpg/@@images/image/icon 32w, /heroimage.jpg/@@images/image/listing 16w" />
( <> {(() => { const image = ( - {data.alt} { - if (data.size === 'l') - return `${flattenToAppURL(data.url)}/@@images/image`; - if (data.size === 'm') - return `${flattenToAppURL( - data.url, - )}/@@images/image/preview`; - if (data.size === 's') - return `${flattenToAppURL( - data.url, - )}/@@images/image/mini`; - return `${flattenToAppURL(data.url)}/@@images/image`; - })() - : data.url - } - alt={data.alt || ''} - loading="lazy" + size={(() => { + switch (data.size) { + case 'm': + return 'preview'; + + case 's': + return 'mini'; + + case 'l': + default: + return null; + } + })()} /> ); if (data.href) { diff --git a/src/components/manage/Blocks/LeadImage/View.jsx b/src/components/manage/Blocks/LeadImage/View.jsx index 5dce8195e8..7b946173ea 100644 --- a/src/components/manage/Blocks/LeadImage/View.jsx +++ b/src/components/manage/Blocks/LeadImage/View.jsx @@ -9,7 +9,7 @@ import { Link } from 'react-router-dom'; import cx from 'classnames'; import { settings } from '~/config'; -import { flattenToAppURL } from '@plone/volto/helpers'; +import ImageFromUrl from '@plone/volto/components/theme/ImageFromUrl/ImageFromUrl'; /** * View image block class. @@ -30,10 +30,10 @@ const View = ({ data, properties }) => ( <> {(() => { const image = ( - {properties.image_caption} ); if (data.href) { diff --git a/src/components/manage/Blocks/LeadImage/View.test.jsx b/src/components/manage/Blocks/LeadImage/View.test.jsx index 9aa8747399..5e73bc97af 100644 --- a/src/components/manage/Blocks/LeadImage/View.test.jsx +++ b/src/components/manage/Blocks/LeadImage/View.test.jsx @@ -8,7 +8,57 @@ test('renders a view image component', () => { data={{}} properties={{ image: { - download: 'image.png', + 'content-type': 'image/jpeg', + download: + 'http://localhost:8080/Plone/test-images/@@images/image.jpeg', + filename: 'image.jpg', + height: 1280, + scales: { + icon: { + download: + 'http://localhost:8080/Plone/test-images/@@images/image.jpeg', + height: 21, + width: 32, + }, + large: { + download: + 'http://localhost:8080/Plone/test-images/@@images/image.jpeg', + height: 512, + width: 768, + }, + listing: { + download: + 'http://localhost:8080/Plone/test-images/@@images/image.jpeg', + height: 10, + width: 16, + }, + mini: { + download: + 'http://localhost:8080/Plone/test-images/@@images/image.jpeg', + height: 133, + width: 200, + }, + preview: { + download: + 'http://localhost:8080/Plone/test-images/@@images/image.jpeg', + height: 266, + width: 400, + }, + thumb: { + download: + 'http://localhost:8080/Plone/test-images/@@images/image.jpeg', + height: 85, + width: 128, + }, + tile: { + download: + 'http://localhost:8080/Plone/test-images/@@images/image.jpeg', + height: 42, + width: 64, + }, + }, + size: 186918, + width: 1920, }, }} />, diff --git a/src/components/manage/Blocks/LeadImage/__snapshots__/View.test.jsx.snap b/src/components/manage/Blocks/LeadImage/__snapshots__/View.test.jsx.snap index 3fdea7cdfa..2aa5fba2bd 100644 --- a/src/components/manage/Blocks/LeadImage/__snapshots__/View.test.jsx.snap +++ b/src/components/manage/Blocks/LeadImage/__snapshots__/View.test.jsx.snap @@ -7,7 +7,11 @@ exports[`renders a view image component 1`] = `

`; diff --git a/src/components/manage/Blocks/Listing/DefaultTemplate.jsx b/src/components/manage/Blocks/Listing/DefaultTemplate.jsx index cc6ba65f2f..42cda54615 100644 --- a/src/components/manage/Blocks/Listing/DefaultTemplate.jsx +++ b/src/components/manage/Blocks/Listing/DefaultTemplate.jsx @@ -4,6 +4,7 @@ import { ConditionalLink } from '@plone/volto/components'; import { flattenToAppURL } from '@plone/volto/helpers'; import { settings } from '~/config'; +import ImageFromUrl from '@plone/volto/components/theme/ImageFromUrl/ImageFromUrl'; import DefaultImageSVG from '@plone/volto/components/manage/Blocks/Listing/default-image.svg'; import { isInternalURL } from '@plone/volto/helpers/Url/Url'; @@ -34,11 +35,9 @@ const DefaultTemplate = ({ items, linkMore, isEditMode }) => { )} {item[settings.listingPreviewImageField] && ( - {item.title} )} diff --git a/src/components/theme/ImageFromUrl/ImageFromUrl.jsx b/src/components/theme/ImageFromUrl/ImageFromUrl.jsx new file mode 100644 index 0000000000..458eeaba59 --- /dev/null +++ b/src/components/theme/ImageFromUrl/ImageFromUrl.jsx @@ -0,0 +1,42 @@ +import React from 'react'; +import PropTypes from 'prop-types'; +import { + isInternalURL, + flattenToAppURL, + getSrcSet, +} from '@plone/volto/helpers'; + +const ImageFromUrl = ({ image, url, alt = '', className, size, role }) => { + let src = image && image?.scales ? image.download : url; + + if (!src) return null; + + const imageParams = '/@@images/image' + (size ? `/${size}` : ''); + const isInternal = isInternalURL(src); + + src = isInternal ? flattenToAppURL(src) : src; + if (isInternal && src.indexOf('/@@images') === -1) + src = `${src}${imageParams}`; + + return ( + {alt} + ); +}; + +ImageFromUrl.propTypes = { + image: PropTypes.object, + url: PropTypes.string, + alt: PropTypes.string, + className: PropTypes.string, + size: PropTypes.string, + role: PropTypes.string, +}; + +export default ImageFromUrl; diff --git a/src/components/theme/ImageFromUrl/ImageFromUrl.test.jsx b/src/components/theme/ImageFromUrl/ImageFromUrl.test.jsx new file mode 100644 index 0000000000..4fe40e4b39 --- /dev/null +++ b/src/components/theme/ImageFromUrl/ImageFromUrl.test.jsx @@ -0,0 +1,28 @@ +import React from 'react'; +import renderer from 'react-test-renderer'; + +import ImageFromUrl from './ImageFromUrl'; + +describe('ImageFromUrl', () => { + it('renders with default values', () => { + const component = renderer.create( + , + ); + const json = component.toJSON(); + expect(json).toMatchSnapshot(); + }); + + it('renders with props', () => { + const component = renderer.create( + , + ); + const json = component.toJSON(); + expect(json).toMatchSnapshot(); + }); +}); diff --git a/src/components/theme/ImageFromUrl/__snapshots__/ImageFromUrl.test.jsx.snap b/src/components/theme/ImageFromUrl/__snapshots__/ImageFromUrl.test.jsx.snap new file mode 100644 index 0000000000..f00d5790b0 --- /dev/null +++ b/src/components/theme/ImageFromUrl/__snapshots__/ImageFromUrl.test.jsx.snap @@ -0,0 +1,24 @@ +// Jest Snapshot v1, https://goo.gl/fbAQLP + +exports[`ImageFromUrl renders with default values 1`] = ` + +`; + +exports[`ImageFromUrl renders with props 1`] = ` +Photo +`; diff --git a/src/components/theme/View/AlbumView.jsx b/src/components/theme/View/AlbumView.jsx index 82dc03e2c9..16fd8650c4 100644 --- a/src/components/theme/View/AlbumView.jsx +++ b/src/components/theme/View/AlbumView.jsx @@ -144,6 +144,7 @@ class AlbumView extends Component { : item.title } src={item.image.scales.large.download} + loading="lazy" />

{item.description}

diff --git a/src/components/theme/View/DefaultView.jsx b/src/components/theme/View/DefaultView.jsx index 303f0ba11a..0d96f2c6a3 100644 --- a/src/components/theme/View/DefaultView.jsx +++ b/src/components/theme/View/DefaultView.jsx @@ -71,6 +71,7 @@ const DefaultView = ({ content, intl, location }) => { className="document-image" src={content.image.scales.thumb.download} floated="right" + loading="lazy" /> )} {content.remoteUrl && ( diff --git a/src/components/theme/View/ImageView.jsx b/src/components/theme/View/ImageView.jsx index b3bc1d5908..4ce474ce03 100644 --- a/src/components/theme/View/ImageView.jsx +++ b/src/components/theme/View/ImageView.jsx @@ -8,7 +8,7 @@ import PropTypes from 'prop-types'; import { Container } from 'semantic-ui-react'; import { FormattedMessage } from 'react-intl'; import prettybytes from 'pretty-bytes'; - +import ImageFromUrl from '@plone/volto/components/theme/ImageFromUrl/ImageFromUrl'; import { flattenToAppURL } from '@plone/volto/helpers'; /** @@ -28,9 +28,10 @@ const ImageView = ({ content }) => ( )} {content?.image?.download && ( - {content.title}
( size="small" alt={item.image_caption ? item.image_caption : item.title} src={item.image.scales.thumb.download} + loading="lazy" /> )} diff --git a/src/components/theme/View/NewsItemView.jsx b/src/components/theme/View/NewsItemView.jsx index 2ff9cfccf0..3ffa6fe8b7 100644 --- a/src/components/theme/View/NewsItemView.jsx +++ b/src/components/theme/View/NewsItemView.jsx @@ -37,6 +37,7 @@ const NewsItemView = ({ content }) => ( : flattenToAppURL(content.image.scales.mini.download) } floated="right" + loading="lazy" /> )} {content.text && ( diff --git a/src/components/theme/View/SummaryView.jsx b/src/components/theme/View/SummaryView.jsx index 1275c7e977..406d285e12 100644 --- a/src/components/theme/View/SummaryView.jsx +++ b/src/components/theme/View/SummaryView.jsx @@ -38,6 +38,7 @@ const SummaryView = ({ content }) => ( floated="right" alt={item.image_caption ? item.image_caption : item.title} src={item.image.scales.thumb.download} + loading="lazy" /> )} {item.description &&

{item.description}

} diff --git a/src/components/theme/View/__snapshots__/ImageView.test.jsx.snap b/src/components/theme/View/__snapshots__/ImageView.test.jsx.snap index 74b4a9e262..65562557fa 100644 --- a/src/components/theme/View/__snapshots__/ImageView.test.jsx.snap +++ b/src/components/theme/View/__snapshots__/ImageView.test.jsx.snap @@ -19,6 +19,8 @@ exports[`renders an image view component 1`] = ` > Hello World!
diff --git a/src/components/theme/View/__snapshots__/SummaryView.test.jsx.snap b/src/components/theme/View/__snapshots__/SummaryView.test.jsx.snap index c0832b49fc..5eaafdbabd 100644 --- a/src/components/theme/View/__snapshots__/SummaryView.test.jsx.snap +++ b/src/components/theme/View/__snapshots__/SummaryView.test.jsx.snap @@ -36,6 +36,7 @@ exports[`TabularView renders a summary view component 1`] = ` alt="My image caption" className="ui right floated image" clearing={true} + loading="lazy" src="file:///preview.jpg" />

diff --git a/src/config/ImageScales.jsx b/src/config/ImageScales.jsx new file mode 100644 index 0000000000..0b97a3f960 --- /dev/null +++ b/src/config/ImageScales.jsx @@ -0,0 +1,9 @@ +export const imageScales = { + large: 768, + preview: 400, + mini: 200, + thumb: 128, + tile: 64, + icon: 32, + listing: 16, +}; diff --git a/src/config/index.js b/src/config/index.js index 643b1708a2..fc0dc22f2c 100644 --- a/src/config/index.js +++ b/src/config/index.js @@ -30,6 +30,7 @@ import { import { sentryOptions } from './Sentry'; import { contentIcons } from './ContentIcons'; +import { imageScales } from './ImageScales'; import applyAddonConfiguration from 'load-volto-addons'; @@ -86,7 +87,8 @@ let config = { sentryOptions: { ...sentryOptions, }, - contentIcons: contentIcons, + contentIcons, + imageScales, appExtras: [], }, widgets: { @@ -105,7 +107,6 @@ let config = { groupBlocksOrder, initialBlocks, }, - addonRoutes: [], addonReducers: {}, }; diff --git a/src/helpers/Image/Image.js b/src/helpers/Image/Image.js new file mode 100644 index 0000000000..1a276760a0 --- /dev/null +++ b/src/helpers/Image/Image.js @@ -0,0 +1,55 @@ +import { flattenToAppURL } from '@plone/volto/helpers'; +import { settings } from '~/config'; + +/** + * Get src-set list from image + * @param {object | string} image - Image content object or url + * @param {number} maxSize - Maximum size of the image + */ +export const getSrcSet = (image, maxSize) => { + const SRCSET = settings.imageScales; + let srcsetList = []; + let maxWidth = maxSize ? SRCSET[maxSize] : 0; + + if ( + Object.prototype.toString.call(image) === '[object Object]' && + image.scales && + Object.keys(image.scales).length > 0 + ) { + Object.keys(SRCSET).forEach((size) => { + if (maxWidth === 0 || SRCSET[size] <= maxWidth) { + srcsetList.push( + flattenToAppURL(image.scales[size]?.download) + + ' ' + + SRCSET[size] + + 'w', + ); + } + }); + } + + if (typeof image === 'string') { + let src = + image.indexOf('@@images/') >= 0 + ? image.substring(0, image.indexOf('@@images/')) + : image; + + Object.keys(SRCSET).forEach((size) => { + if (maxWidth === 0 || SRCSET[size] <= maxWidth) { + srcsetList.push( + flattenToAppURL(src) + + '@@images/image/' + + size + + ' ' + + SRCSET[size] + + 'w', + ); + } + }); + } + + return { + srcSet: srcsetList.length > 0 ? srcsetList.join(', ') : null, + sizes: maxSize && srcsetList.length > 0 ? `${SRCSET[maxSize]}px` : null, + }; +}; diff --git a/src/helpers/Image/Image.test.js b/src/helpers/Image/Image.test.js new file mode 100644 index 0000000000..d5ebce4d00 --- /dev/null +++ b/src/helpers/Image/Image.test.js @@ -0,0 +1,28 @@ +import { getSrcSet } from './Image'; + +describe('Image', () => { + describe('getSrcSet', () => { + it('returns srcset from scales', () => { + expect( + getSrcSet('http://localhost:8080/Plone/photo.png/@@images/image'), + ).toEqual({ + srcSet: + '/photo.png/@@images/image/large 768w, /photo.png/@@images/image/preview 400w, /photo.png/@@images/image/mini 200w, /photo.png/@@images/image/thumb 128w, /photo.png/@@images/image/tile 64w, /photo.png/@@images/image/icon 32w, /photo.png/@@images/image/listing 16w', + sizes: null, + }); + }); + + it('returns srcset and sizes with minitature set', () => { + expect( + getSrcSet( + 'http://localhost:8080/Plone/photo.png/@@images/image', + 'preview', + ), + ).toEqual({ + srcSet: + '/photo.png/@@images/image/preview 400w, /photo.png/@@images/image/mini 200w, /photo.png/@@images/image/thumb 128w, /photo.png/@@images/image/tile 64w, /photo.png/@@images/image/icon 32w, /photo.png/@@images/image/listing 16w', + sizes: '400px', + }); + }); + }); +}); diff --git a/src/helpers/index.js b/src/helpers/index.js index 7a122bd680..b4bc99e114 100644 --- a/src/helpers/index.js +++ b/src/helpers/index.js @@ -55,3 +55,5 @@ export { applyConfig, withServerErrorCode, } from '@plone/volto/helpers/Utils/Utils'; + +export { getSrcSet } from './Image/Image'; From 46f752772c532d0657c3f90e2269d3b0471215af Mon Sep 17 00:00:00 2001 From: nzambello Date: Tue, 5 Jan 2021 15:24:24 +0100 Subject: [PATCH 02/45] feat: ImageFromUrl accepts other props for img --- src/components/theme/ImageFromUrl/ImageFromUrl.jsx | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/src/components/theme/ImageFromUrl/ImageFromUrl.jsx b/src/components/theme/ImageFromUrl/ImageFromUrl.jsx index 458eeaba59..8162537bd5 100644 --- a/src/components/theme/ImageFromUrl/ImageFromUrl.jsx +++ b/src/components/theme/ImageFromUrl/ImageFromUrl.jsx @@ -6,7 +6,15 @@ import { getSrcSet, } from '@plone/volto/helpers'; -const ImageFromUrl = ({ image, url, alt = '', className, size, role }) => { +const ImageFromUrl = ({ + image, + url, + alt = '', + className, + size, + role, + ...imageProps +}) => { let src = image && image?.scales ? image.download : url; if (!src) return null; @@ -26,6 +34,7 @@ const ImageFromUrl = ({ image, url, alt = '', className, size, role }) => { loading="lazy" className={className} {...(isInternal ? getSrcSet(image?.scales ? image : src, size) : {})} + {...imageProps} /> ); }; From 4f295fb1e36d8f5fde1d82591f3518d996449b6e Mon Sep 17 00:00:00 2001 From: nzambello Date: Tue, 5 Jan 2021 15:28:10 +0100 Subject: [PATCH 03/45] docs: updated changelog --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 014059a344..a63cae1800 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,6 +7,7 @@ ### Feature - Lazy load image in blocks Image and HeroImage @mamico +- Add ImageFromUrl with srcset and lazy loading using Plone miniatures @nzambello ### Bugfix From fa9f0bcec272cdf72cdf8444994f7f90c646a02c Mon Sep 17 00:00:00 2001 From: nzambello Date: Fri, 15 Jan 2021 11:58:58 +0100 Subject: [PATCH 04/45] refactor: Image component for responsive images --- .../manage/Blocks/HeroImageLeft/View.jsx | 4 +- .../__snapshots__/View.test.jsx.snap | 38 ++++- src/components/manage/Blocks/Image/View.jsx | 19 +-- .../manage/Blocks/Image/View.test.jsx | 4 +- .../manage/Blocks/LeadImage/View.jsx | 4 +- .../manage/Blocks/LeadImage/View.test.jsx | 50 +++--- .../__snapshots__/View.test.jsx.snap | 38 ++++- .../manage/Blocks/Listing/DefaultTemplate.jsx | 5 +- src/components/theme/Image/Image.jsx | 73 +++++++++ src/components/theme/Image/Image.test.jsx | 89 +++++++++++ .../Image/__snapshots__/Image.test.jsx.snap | 146 ++++++++++++++++++ .../theme/ImageFromUrl/ImageFromUrl.jsx | 51 ------ .../theme/ImageFromUrl/ImageFromUrl.test.jsx | 28 ---- .../__snapshots__/ImageFromUrl.test.jsx.snap | 24 --- src/components/theme/View/ImageView.jsx | 8 +- src/components/theme/View/ImageView.test.jsx | 37 ++++- .../__snapshots__/ImageView.test.jsx.snap | 37 ++++- src/helpers/Image/Image.js | 86 ++++++----- src/helpers/Image/Image.test.js | 31 ++-- src/helpers/index.js | 2 +- theme/themes/pastanaga/extras/blocks.less | 2 +- 21 files changed, 528 insertions(+), 248 deletions(-) create mode 100644 src/components/theme/Image/Image.jsx create mode 100644 src/components/theme/Image/Image.test.jsx create mode 100644 src/components/theme/Image/__snapshots__/Image.test.jsx.snap delete mode 100644 src/components/theme/ImageFromUrl/ImageFromUrl.jsx delete mode 100644 src/components/theme/ImageFromUrl/ImageFromUrl.test.jsx delete mode 100644 src/components/theme/ImageFromUrl/__snapshots__/ImageFromUrl.test.jsx.snap diff --git a/src/components/manage/Blocks/HeroImageLeft/View.jsx b/src/components/manage/Blocks/HeroImageLeft/View.jsx index d728ffadbd..f23251a1a4 100644 --- a/src/components/manage/Blocks/HeroImageLeft/View.jsx +++ b/src/components/manage/Blocks/HeroImageLeft/View.jsx @@ -5,7 +5,7 @@ import React from 'react'; import PropTypes from 'prop-types'; -import ImageFromUrl from '@plone/volto/components/theme/ImageFromUrl/ImageFromUrl'; +import Image from '@plone/volto/components/theme/Image/Image'; /** * View image block class. @@ -15,7 +15,7 @@ import ImageFromUrl from '@plone/volto/components/theme/ImageFromUrl/ImageFromUr const View = ({ data }) => (

- {data.url && } + {data.url && }
{data.title &&

{data.title}

} {data.description &&

{data.description}

} diff --git a/src/components/manage/Blocks/HeroImageLeft/__snapshots__/View.test.jsx.snap b/src/components/manage/Blocks/HeroImageLeft/__snapshots__/View.test.jsx.snap index 39177ea10b..7afa816ee6 100644 --- a/src/components/manage/Blocks/HeroImageLeft/__snapshots__/View.test.jsx.snap +++ b/src/components/manage/Blocks/HeroImageLeft/__snapshots__/View.test.jsx.snap @@ -7,14 +7,36 @@ exports[`renders a view hero component 1`] = `
- + + +