From 99e9740c3aa5c0d0395367fa3d56cb11d1def276 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Frithjof=20Klo=CC=88s?= Date: Mon, 7 Oct 2019 15:10:05 +0200 Subject: [PATCH 1/7] PWA-2253 Fixed flickering pdp favorites button on iOS 13 --- libraries/common/components/Swiper/styles.js | 1 + .../components/Header/components/CTAButtons/style.js | 1 + .../ImagesSlider/__snapshots__/spec.jsx.snap | 8 ++++---- .../widgets/ImageSlider/__snapshots__/spec.jsx.snap | 12 ++++++------ .../components/Header/components/CTAButtons/style.js | 1 + .../ImagesSlider/__snapshots__/spec.jsx.snap | 8 ++++---- .../widgets/ImageSlider/__snapshots__/spec.jsx.snap | 12 ++++++------ 7 files changed, 23 insertions(+), 20 deletions(-) diff --git a/libraries/common/components/Swiper/styles.js b/libraries/common/components/Swiper/styles.js index e2321efb1f..c659029faa 100644 --- a/libraries/common/components/Swiper/styles.js +++ b/libraries/common/components/Swiper/styles.js @@ -14,6 +14,7 @@ export const innerContainer = css({ height: 'auto', }, ' .swiper-pagination': { + transform: 'translate3d(-50%,0,0) !important', ' .swiper-pagination-bullet': { background: '#808080', opacity: '.5', diff --git a/themes/theme-gmd/pages/Product/components/Header/components/CTAButtons/style.js b/themes/theme-gmd/pages/Product/components/Header/components/CTAButtons/style.js index 5dd183133c..af3f5b046c 100644 --- a/themes/theme-gmd/pages/Product/components/Header/components/CTAButtons/style.js +++ b/themes/theme-gmd/pages/Product/components/Header/components/CTAButtons/style.js @@ -15,6 +15,7 @@ const buttons = css({ }).toString(); const favButton = css({ + transform: 'translate3d(0, 0, 0)', marginRight: variables.gap.big, zIndex: 1, // Prevents the icons to be visible outside of the circle fontSize: iconSize, diff --git a/themes/theme-gmd/pages/ProductGallery/components/Content/components/ImagesSlider/__snapshots__/spec.jsx.snap b/themes/theme-gmd/pages/ProductGallery/components/Content/components/ImagesSlider/__snapshots__/spec.jsx.snap index 3164d26f40..a6c5efc374 100644 --- a/themes/theme-gmd/pages/ProductGallery/components/Content/components/ImagesSlider/__snapshots__/spec.jsx.snap +++ b/themes/theme-gmd/pages/ProductGallery/components/Content/components/ImagesSlider/__snapshots__/spec.jsx.snap @@ -88,7 +88,7 @@ exports[` page should pass initialSlide prop 1`] = ` allowSlideNext={true} allowSlidePrev={true} autoplay={false} - containerClass="css-15qycmt css-sa13d4 css-qb469q" + containerClass="css-xvw7af css-sa13d4 css-qb469q" freeMode={false} getSwiper={[Function]} initialSlide={3} @@ -234,7 +234,7 @@ exports[` page should pass initialSlide prop 1`] = ` } >
page should render Swiper with images 1`] = ` allowSlideNext={true} allowSlidePrev={true} autoplay={false} - containerClass="css-15qycmt css-sa13d4 css-qb469q" + containerClass="css-xvw7af css-sa13d4 css-qb469q" freeMode={false} getSwiper={[Function]} initialSlide={0} @@ -525,7 +525,7 @@ exports[` page should render Swiper with images 1`] = ` } >
should map the correct image settings to the comp allowSlideNext={true} allowSlidePrev={true} autoplay={false} - containerClass="css-15qycmt" + containerClass="css-xvw7af" freeMode={false} getSwiper={[Function]} initialSlide={0} @@ -203,7 +203,7 @@ exports[` should map the correct image settings to the comp zoom={false} >
should render the images with links 1`] = ` allowSlideNext={true} allowSlidePrev={true} autoplay={false} - containerClass="css-15qycmt" + containerClass="css-xvw7af" freeMode={false} getSwiper={[Function]} initialSlide={0} @@ -641,7 +641,7 @@ exports[` should render the images with links 1`] = ` zoom={false} >
should render the slider with the correct number allowSlideNext={true} allowSlidePrev={true} autoplay={false} - containerClass="css-15qycmt" + containerClass="css-xvw7af" freeMode={false} getSwiper={[Function]} initialSlide={0} @@ -927,7 +927,7 @@ exports[` should render the slider with the correct number zoom={false} >
page should pass initialSlide prop 1`] = ` allowSlideNext={true} allowSlidePrev={true} autoplay={false} - containerClass="css-15qycmt css-sa13d4 css-qb469q" + containerClass="css-xvw7af css-sa13d4 css-qb469q" freeMode={false} getSwiper={[Function]} initialSlide={3} @@ -234,7 +234,7 @@ exports[` page should pass initialSlide prop 1`] = ` } >
page should render Swiper with images 1`] = ` allowSlideNext={true} allowSlidePrev={true} autoplay={false} - containerClass="css-15qycmt css-sa13d4 css-qb469q" + containerClass="css-xvw7af css-sa13d4 css-qb469q" freeMode={false} getSwiper={[Function]} initialSlide={0} @@ -525,7 +525,7 @@ exports[` page should render Swiper with images 1`] = ` } >
should map the correct image settings to the comp allowSlideNext={true} allowSlidePrev={true} autoplay={false} - containerClass="css-15qycmt" + containerClass="css-xvw7af" freeMode={false} getSwiper={[Function]} initialSlide={0} @@ -203,7 +203,7 @@ exports[` should map the correct image settings to the comp zoom={false} >
should render the images with links 1`] = ` allowSlideNext={true} allowSlidePrev={true} autoplay={false} - containerClass="css-15qycmt" + containerClass="css-xvw7af" freeMode={false} getSwiper={[Function]} initialSlide={0} @@ -645,7 +645,7 @@ exports[` should render the images with links 1`] = ` zoom={false} >
should render the slider with the correct number allowSlideNext={true} allowSlidePrev={true} autoplay={false} - containerClass="css-15qycmt" + containerClass="css-xvw7af" freeMode={false} getSwiper={[Function]} initialSlide={0} @@ -933,7 +933,7 @@ exports[` should render the slider with the correct number zoom={false} >
Date: Thu, 10 Oct 2019 13:22:52 +0200 Subject: [PATCH 2/7] PWA-2250 Fixed the section to render properly. --- libraries/common/components/Swiper/index.jsx | 4 +- .../Section/__tests__/index.spec.jsx | 37 +-- .../engage/a11y/components/Section/index.jsx | 38 +-- .../__tests__/Description.spec.jsx | 12 +- .../__snapshots__/Description.spec.jsx.snap | 288 ++++++++++++++++++ .../components/Description/connector.js | 4 +- .../product/components/Description/index.jsx | 53 ++++ .../product}/components/Description/style.js | 31 +- libraries/engage/product/index.js | 1 + themes/theme-gmd/components/Reviews/index.jsx | 26 +- themes/theme-gmd/components/Reviews/style.js | 2 +- .../Product/components/Content/index.jsx | 75 +++-- .../Description/__snapshots__/spec.jsx.snap | 200 ------------ .../Product/components/Description/index.jsx | 65 ---- .../Product/components/Description/spec.jsx | 37 --- .../theme-ios11/components/Reviews/index.jsx | 24 +- .../theme-ios11/components/Reviews/style.js | 2 +- .../Product/components/Content/index.jsx | 23 +- .../Description/__snapshots__/spec.jsx.snap | 200 ------------ .../components/Description/connector.js | 27 -- .../Product/components/Description/index.jsx | 65 ---- .../Product/components/Description/style.js | 49 --- utils/unit-tests/envSetup.js | 16 +- 23 files changed, 483 insertions(+), 796 deletions(-) rename themes/theme-ios11/pages/Product/components/Description/spec.jsx => libraries/engage/product/components/Description/__tests__/Description.spec.jsx (74%) create mode 100644 libraries/engage/product/components/Description/__tests__/__snapshots__/Description.spec.jsx.snap rename {themes/theme-gmd/pages/Product => libraries/engage/product}/components/Description/connector.js (82%) create mode 100644 libraries/engage/product/components/Description/index.jsx rename {themes/theme-gmd/pages/Product => libraries/engage/product}/components/Description/style.js (63%) delete mode 100644 themes/theme-gmd/pages/Product/components/Description/__snapshots__/spec.jsx.snap delete mode 100755 themes/theme-gmd/pages/Product/components/Description/index.jsx delete mode 100644 themes/theme-gmd/pages/Product/components/Description/spec.jsx delete mode 100644 themes/theme-ios11/pages/Product/components/Description/__snapshots__/spec.jsx.snap delete mode 100644 themes/theme-ios11/pages/Product/components/Description/connector.js delete mode 100755 themes/theme-ios11/pages/Product/components/Description/index.jsx delete mode 100644 themes/theme-ios11/pages/Product/components/Description/style.js diff --git a/libraries/common/components/Swiper/index.jsx b/libraries/common/components/Swiper/index.jsx index 9260603cbc..aa0dd44b6f 100644 --- a/libraries/common/components/Swiper/index.jsx +++ b/libraries/common/components/Swiper/index.jsx @@ -129,7 +129,7 @@ const Swiper = (props) => { }; useEffect(() => { - if (swiperInstance.current !== null && params.rebuildOnUpdate === false) { + if (swiperInstance.current !== null) { if (loop) { // Recreate the loop on prop updates to avoid duplicated slides from the last slide set. swiperInstance.current.loopCreate(); @@ -137,7 +137,7 @@ const Swiper = (props) => { swiperInstance.current.update(); } - }, [children]); + }, [children, loop, params.rebuildOnUpdate]); return (
diff --git a/libraries/engage/a11y/components/Section/__tests__/index.spec.jsx b/libraries/engage/a11y/components/Section/__tests__/index.spec.jsx index a5dc2a8681..9b3a0c1263 100644 --- a/libraries/engage/a11y/components/Section/__tests__/index.spec.jsx +++ b/libraries/engage/a11y/components/Section/__tests__/index.spec.jsx @@ -1,22 +1,8 @@ -/* eslint-disable require-jsdoc, extra-rules/potential-point-free, -class-methods-use-this, extra-rules/no-single-line-objects */ import React from 'react'; import { mount } from 'enzyme'; import Section from '../index'; import { hidden } from '../style'; -const mutationConstructorSpy = jest.fn(); -const mutationObserveSpy = jest.fn(); -const mutationDisconnectSpy = jest.fn(); - -global.MutationObserver = class { - constructor(callback) { mutationConstructorSpy(callback); } - - observe(element, initObject) { mutationObserveSpy(element, initObject); } - - disconnect() { mutationDisconnectSpy(); } -}; - const mockTranslate = jest.fn(); jest.mock('../../../../components', () => ({ @@ -45,14 +31,20 @@ describe('
', () => { expect(wrapper).toMatchSnapshot(); expect(wrapper.find('section').hasClass(hidden.toString())).toBe(false); - expect(mockTranslate).toHaveBeenCalledWith({ string: title, params: titleParams }); + expect(mockTranslate).toHaveBeenCalledWith({ + string: title, + params: titleParams, + }); }); it('should render hidden when no children rendered', () => { const wrapper = mount(
); expect(wrapper).toMatchSnapshot(); expect(wrapper.find('section').hasClass(hidden.toString())).toBe(true); - expect(mockTranslate).toHaveBeenCalledWith({ string: title, params: {} }); + expect(mockTranslate).toHaveBeenCalledWith({ + string: title, + params: {}, + }); }); describe('MutationObserver', () => { @@ -63,13 +55,13 @@ describe('
', () => { }); it('should create an observer instance', () => { - expect(mutationConstructorSpy).toHaveBeenCalledTimes(1); - expect(mutationConstructorSpy).toHaveBeenCalledWith(expect.any(Function)); + expect(global.mutationConstructorSpy).toHaveBeenCalledTimes(1); + expect(global.mutationConstructorSpy).toHaveBeenCalledWith(expect.any(Function)); }); it('should observe with the correct initialization', () => { - expect(mutationObserveSpy).toHaveBeenCalledTimes(1); - expect(mutationObserveSpy).toHaveBeenCalledWith( + expect(global.mutationObserveSpy).toHaveBeenCalledTimes(1); + expect(global.mutationObserveSpy).toHaveBeenCalledWith( wrapper.find('section').instance(), { childList: true, @@ -79,10 +71,7 @@ describe('
', () => { it('should call disconnect on unmount', () => { wrapper.unmount(); - expect(mutationDisconnectSpy).toHaveBeenCalledTimes(1); + expect(global.mutationDisconnectSpy).toHaveBeenCalledTimes(1); }); }); }); - -/* eslint-enable require-jsdoc, extra-rules/potential-point-free, -class-methods-use-this, extra-rules/no-single-line-objects */ diff --git a/libraries/engage/a11y/components/Section/index.jsx b/libraries/engage/a11y/components/Section/index.jsx index ff768ca8c1..7be8168828 100644 --- a/libraries/engage/a11y/components/Section/index.jsx +++ b/libraries/engage/a11y/components/Section/index.jsx @@ -2,10 +2,8 @@ import React, { useRef, useState, useMemo, useLayoutEffect, } from 'react'; import PropTypes from 'prop-types'; -import classNames from 'classnames'; import kebabCase from 'lodash/kebabCase'; import { I18n } from '@shopgate/engage/components'; -import { hidden } from './style'; /** * Checks the section ref has suitable child nodes. @@ -31,22 +29,24 @@ const hasChildNodes = (ref, headlineId) => { * The Section component is supposed to be used to structure the content to improve a11y. It * renders a headline on top which is only visible for screen readers and describes the section. * Internally a MutationObserver maintains the visibility based on the presence of rendered content. - * @param {string} title The section title - can be a translation placeholder. - * @param {Object} [titleParams={}] Additional parameters for the title translation placeholder. - * @param {Object} [className=null] A class name for the section. - * @param {NodeList} [children=null] Component children. + * @param {Object} props The component props. + * @param {string} props.title The section title - can be a placeholder. + * @param {Object} [props.titleParams={}] Additional parameters for the title placeholder. + * @param {Object} [props.className=null] A class name for the section. + * @param {NodeList} [props.children=null] Component children. * @returns {JSX} */ -const Section = ({ - title, titleParams, children, className, ...rest -}) => { +function Section(props) { + const { + title, titleParams, children, className, ...rest + } = props; const contentRef = useRef(null); const [hasContent, setHasContent] = useState(false); const id = useMemo(() => kebabCase(title), [title]); const observer = useMemo(() => new MutationObserver(() => { setHasContent(hasChildNodes(contentRef, id)); - })); + }), [contentRef, id]); useLayoutEffect(() => { setHasContent(hasChildNodes(contentRef, id)); @@ -57,19 +57,23 @@ const Section = ({ }; }, [contentRef, id, observer]); - const classes = classNames(className, { - [hidden]: !hasContent, - }); + if (!hasContent) { + return ( +
+ {children} +
+ ); + } return ( -
-

+
+ +

{children}
); -}; +} Section.propTypes = { title: PropTypes.string.isRequired, diff --git a/themes/theme-ios11/pages/Product/components/Description/spec.jsx b/libraries/engage/product/components/Description/__tests__/Description.spec.jsx similarity index 74% rename from themes/theme-ios11/pages/Product/components/Description/spec.jsx rename to libraries/engage/product/components/Description/__tests__/Description.spec.jsx index e508ed78cb..53b77c732e 100644 --- a/themes/theme-ios11/pages/Product/components/Description/spec.jsx +++ b/libraries/engage/product/components/Description/__tests__/Description.spec.jsx @@ -2,18 +2,18 @@ import React from 'react'; import { mount } from 'enzyme'; import configureStore from 'redux-mock-store'; import mockRenderOptions from '@shopgate/pwa-common/helpers/mocks/mockRenderOptions'; -import PlaceholderParagraph from '@shopgate/pwa-ui-shared/PlaceholderParagraph'; -import ProductDescription from './index'; +import { PlaceholderParagraph } from '@shopgate/engage/components'; +import Description from '../index'; -jest.mock('./connector', () => obj => obj); +jest.mock('../connector', () => obj => obj); -describe('', () => { +describe('', () => { const mockStore = configureStore(); const html = '

foo

'; it('should not render if no data is available', () => { const store = mockStore({}); - const wrapper = mount(, mockRenderOptions); + const wrapper = mount(, mockRenderOptions); const foundContent = wrapper.findWhere(n => typeof n.prop('dangerouslySetInnerHTML') !== 'undefined'); @@ -25,7 +25,7 @@ describe('', () => { it('should render description if data is available', () => { const store = mockStore({}); - const wrapper = mount(, mockRenderOptions); + const wrapper = mount(, mockRenderOptions); const foundContent = wrapper.findWhere(n => typeof n.prop('dangerouslySetInnerHTML') !== 'undefined'); diff --git a/libraries/engage/product/components/Description/__tests__/__snapshots__/Description.spec.jsx.snap b/libraries/engage/product/components/Description/__tests__/__snapshots__/Description.spec.jsx.snap new file mode 100644 index 0000000000..e921d6e215 --- /dev/null +++ b/libraries/engage/product/components/Description/__tests__/__snapshots__/Description.spec.jsx.snap @@ -0,0 +1,288 @@ +// Jest Snapshot v1, https://goo.gl/fbAQLP + +exports[` should not render if no data is available 1`] = ` + + + + +
+
+

+ + + product.sections.description + + +

+
+
+ + + product.description_heading + + +
+ +
+ +
+ + +
+ + +
+ +
+ +
+
+
+
+ +
+
+`; + +exports[` should render description if data is available 1`] = ` + + + + +
+
+

+ + + product.sections.description + + +

+
+
+ + + product.description_heading + + +
+ +
+ foo", + } + } + wrapper={[Function]} + > + +
foo", + } + } + /> + + +
+ +
+
+
+
+ +
+
+`; diff --git a/themes/theme-gmd/pages/Product/components/Description/connector.js b/libraries/engage/product/components/Description/connector.js similarity index 82% rename from themes/theme-gmd/pages/Product/components/Description/connector.js rename to libraries/engage/product/components/Description/connector.js index 4ef7103937..b6f23c7984 100644 --- a/themes/theme-gmd/pages/Product/components/Description/connector.js +++ b/libraries/engage/product/components/Description/connector.js @@ -1,6 +1,6 @@ import { connect } from 'react-redux'; -import { historyPush } from '@shopgate/pwa-common/actions/router'; -import { getProductDescription } from '@shopgate/pwa-common-commerce/product/selectors/product'; +import { historyPush } from '@shopgate/engage/core'; +import { getProductDescription } from '@shopgate/engage/product'; /** * Maps the contents of the state to the component props. diff --git a/libraries/engage/product/components/Description/index.jsx b/libraries/engage/product/components/Description/index.jsx new file mode 100644 index 0000000000..3ba109cc91 --- /dev/null +++ b/libraries/engage/product/components/Description/index.jsx @@ -0,0 +1,53 @@ +import React from 'react'; +import PropTypes from 'prop-types'; +import { + SurroundPortals, PlaceholderParagraph, HtmlSanitizer, I18n, +} from '@shopgate/engage/components'; +import { PRODUCT_DESCRIPTION } from '@shopgate/engage/product'; +import { + container, title, placeholder, content, +} from './style'; +import connect from './connector'; + +/** + * The product description. + * @param {Object} props The component props. + * @returns {JSX} + */ +function Description({ html, navigate }) { + return ( + + {(html !== '') && ( +
+
+ +
+ +
+ + {html} + +
+
+
+ )} +
+ ); +} + +Description.propTypes = { + html: PropTypes.string, + navigate: PropTypes.func, +}; + +Description.defaultProps = { + html: null, + navigate: () => { }, +}; + +export default connect(Description); diff --git a/themes/theme-gmd/pages/Product/components/Description/style.js b/libraries/engage/product/components/Description/style.js similarity index 63% rename from themes/theme-gmd/pages/Product/components/Description/style.js rename to libraries/engage/product/components/Description/style.js index 31069cb9af..f9e8a00937 100644 --- a/themes/theme-gmd/pages/Product/components/Description/style.js +++ b/libraries/engage/product/components/Description/style.js @@ -3,18 +3,18 @@ import { themeConfig } from '@shopgate/pwa-common/helpers/config'; const { colors } = themeConfig; -const container = css({ - fontSize: 14, - padding: '13px 16px 16px', -}).toString(); +export const container = css({ + fontSize: '0.875rem', + padding: '0.8125rem 1rem 1rem', +}); -const title = css({ - fontSize: 16, +export const title = css({ + fontSize: '1rem', fontWeight: 500, - marginBottom: 8, -}).toString(); + marginBottom: '0.5rem', +}); -const content = css({ +export const content = css({ lineHeight: 1.7, overflow: 'hidden', wordBreak: ['break-all', 'break-word'], @@ -35,15 +35,8 @@ const content = css({ padding: '.35em', position: 'relative', }, -}).toString(); +}); -const placeholder = css({ - height: 14, +export const placeholder = css({ + height: '0.875rem', }).toString(); - -export default { - container, - title, - content, - placeholder, -}; diff --git a/libraries/engage/product/index.js b/libraries/engage/product/index.js index 52a79e88cc..7767e41f4c 100644 --- a/libraries/engage/product/index.js +++ b/libraries/engage/product/index.js @@ -66,6 +66,7 @@ export { RelationsSlider } from './components/RelationsSlider'; export { default as ProductCard } from './components/ProductCard'; export { default as ProductGridPrice } from './components/ProductGridPrice'; export { default as ProductCharacteristics } from './components/ProductCharacteristics'; +export { default as Description } from './components/Description'; // HOCs export { default as withPriceCalculation } from './hocs/withPriceCalculation'; diff --git a/themes/theme-gmd/components/Reviews/index.jsx b/themes/theme-gmd/components/Reviews/index.jsx index 8c41bfd227..3773e7237e 100644 --- a/themes/theme-gmd/components/Reviews/index.jsx +++ b/themes/theme-gmd/components/Reviews/index.jsx @@ -1,12 +1,8 @@ -import React, { Fragment } from 'react'; +import React from 'react'; import PropTypes from 'prop-types'; import appConfig from '@shopgate/pwa-common/helpers/config'; -import Portal from '@shopgate/pwa-common/components/Portal'; -import { - PRODUCT_REVIEWS, - PRODUCT_REVIEWS_AFTER, - PRODUCT_REVIEWS_BEFORE, -} from '@shopgate/pwa-common-commerce/product/constants/Portals'; +import { SurroundPortals } from '@shopgate/engage/components'; +import { PRODUCT_REVIEWS } from '@shopgate/engage/product'; import List from './components/List'; import Header from './components/Header'; import AllReviewsLink from './components/AllReviewsLink'; @@ -14,15 +10,14 @@ import styles from './style'; import connect from './connector'; /** - * @param {Object} rating Rating of the product. + * @param {Object} props The component props. * @param {Object} props.productId The id of the product, the review belongs to. * @param {Array} props.reviews Reviews which should be shown in the product page. * @returns {JSX} */ -const Reviews = ({ productId, reviews }) => ( - - - +function Reviews({ productId, reviews }) { + return ( + {appConfig.hasReviews && (
@@ -30,10 +25,9 @@ const Reviews = ({ productId, reviews }) => (
)} -
- -
-); + + ); +} Reviews.propTypes = { productId: PropTypes.string, diff --git a/themes/theme-gmd/components/Reviews/style.js b/themes/theme-gmd/components/Reviews/style.js index 32d1f7bbc6..a41b1d3a9e 100644 --- a/themes/theme-gmd/components/Reviews/style.js +++ b/themes/theme-gmd/components/Reviews/style.js @@ -5,7 +5,7 @@ const { variables } = themeConfig; const container = css({ marginBottom: variables.gap.small, -}).toString(); +}); export default { container, diff --git a/themes/theme-gmd/pages/Product/components/Content/index.jsx b/themes/theme-gmd/pages/Product/components/Content/index.jsx index 8eb812135c..4cbc8df223 100644 --- a/themes/theme-gmd/pages/Product/components/Content/index.jsx +++ b/themes/theme-gmd/pages/Product/components/Content/index.jsx @@ -1,15 +1,14 @@ -import React, { Fragment, PureComponent } from 'react'; +import React, { PureComponent } from 'react'; import PropTypes from 'prop-types'; import { Conditioner } from '@shopgate/pwa-core'; import TaxDisclaimer from '@shopgate/pwa-ui-shared/TaxDisclaimer'; import { Section } from '@shopgate/engage/a11y'; -import { ProductProperties, RelationsSlider } from '@shopgate/engage/product'; +import { ProductProperties, RelationsSlider, Description } from '@shopgate/engage/product'; import Reviews from 'Components/Reviews'; import Media from '../Media'; import Header from '../Header'; import Characteristics from '../Characteristics'; import Options from '../Options'; -import Description from '../Description'; import AppBar from '../AppBar'; import connect from './connector'; import { ProductContext } from '../../context'; @@ -140,42 +139,42 @@ class ProductContent extends PureComponent { setCharacteristics: this.setCharacteristics, }; + const { productId, variantId } = this.state; + return ( -
- - - - -
- {/* - This feature is currently in BETA testing. - It should only be used for approved BETA Client Projects - */} - -
- - -
-
- -
- {/* - This feature is currently in BETA testing. - It should only be used for approved BETA Client Projects - */} - -
- -
-
- -
- - - +
+ + + +
+ {/* + This feature is currently in BETA testing. + It should only be used for approved BETA Client Projects + */} + +
+ + +
+
+ +
+ {/* + This feature is currently in BETA testing. + It should only be used for approved BETA Client Projects + */} + +
+ +
+
+ +
+ +
); } diff --git a/themes/theme-gmd/pages/Product/components/Description/__snapshots__/spec.jsx.snap b/themes/theme-gmd/pages/Product/components/Description/__snapshots__/spec.jsx.snap deleted file mode 100644 index 92db982e08..0000000000 --- a/themes/theme-gmd/pages/Product/components/Description/__snapshots__/spec.jsx.snap +++ /dev/null @@ -1,200 +0,0 @@ -// Jest Snapshot v1, https://goo.gl/fbAQLP - -exports[` should not render if no data is available 1`] = ` - - - -
-
- - - product.description_heading - - -
- -
- -
- - -
- - -
- -
- -
- - - -`; - -exports[` should render description if data is available 1`] = ` - - - -
-
- - - product.description_heading - - -
- -
- foo", - } - } - wrapper={[Function]} - > - -
foo", - } - } - /> - - -
- -
- - - -`; diff --git a/themes/theme-gmd/pages/Product/components/Description/index.jsx b/themes/theme-gmd/pages/Product/components/Description/index.jsx deleted file mode 100755 index 30d816dbc2..0000000000 --- a/themes/theme-gmd/pages/Product/components/Description/index.jsx +++ /dev/null @@ -1,65 +0,0 @@ -import React, { Fragment, PureComponent } from 'react'; -import PropTypes from 'prop-types'; -import Portal from '@shopgate/pwa-common/components/Portal'; -import { - PRODUCT_DESCRIPTION, - PRODUCT_DESCRIPTION_AFTER, - PRODUCT_DESCRIPTION_BEFORE, -} from '@shopgate/pwa-common-commerce/product/constants/Portals'; -import HtmlSanitizer from '@shopgate/pwa-common/components/HtmlSanitizer'; -import I18n from '@shopgate/pwa-common/components/I18n'; -import PlaceholderParagraph from '@shopgate/pwa-ui-shared/PlaceholderParagraph'; -import connect from './connector'; -import styles from './style'; - -/** - * The product description. - */ -class Description extends PureComponent { - static propTypes = { - html: PropTypes.string, - navigate: PropTypes.func, - }; - - static defaultProps = { - html: null, - navigate: () => { }, - }; - - /** - * @returns {JSX} - */ - render() { - const { html, navigate } = this.props; - - return ( - - - - {(html !== '') && ( -
-
- -
- -
- - {html} - -
-
-
- )} -
- -
- ); - } -} - -export default connect(Description); diff --git a/themes/theme-gmd/pages/Product/components/Description/spec.jsx b/themes/theme-gmd/pages/Product/components/Description/spec.jsx deleted file mode 100644 index e508ed78cb..0000000000 --- a/themes/theme-gmd/pages/Product/components/Description/spec.jsx +++ /dev/null @@ -1,37 +0,0 @@ -import React from 'react'; -import { mount } from 'enzyme'; -import configureStore from 'redux-mock-store'; -import mockRenderOptions from '@shopgate/pwa-common/helpers/mocks/mockRenderOptions'; -import PlaceholderParagraph from '@shopgate/pwa-ui-shared/PlaceholderParagraph'; -import ProductDescription from './index'; - -jest.mock('./connector', () => obj => obj); - -describe('', () => { - const mockStore = configureStore(); - const html = '

foo

'; - - it('should not render if no data is available', () => { - const store = mockStore({}); - const wrapper = mount(, mockRenderOptions); - const foundContent = wrapper.findWhere(n => - typeof n.prop('dangerouslySetInnerHTML') !== 'undefined'); - - expect(wrapper).toMatchSnapshot(); - expect(foundContent.length).toEqual(0); - expect(wrapper.find(PlaceholderParagraph).length).toEqual(1); - expect(wrapper.find(PlaceholderParagraph).prop('ready')).toEqual(false); - }); - - it('should render description if data is available', () => { - const store = mockStore({}); - const wrapper = mount(, mockRenderOptions); - const foundContent = wrapper.findWhere(n => - typeof n.prop('dangerouslySetInnerHTML') !== 'undefined'); - - expect(wrapper).toMatchSnapshot(); - expect(foundContent.length).toEqual(1); - expect(wrapper.find(PlaceholderParagraph).length).toEqual(1); - expect(wrapper.find(PlaceholderParagraph).prop('ready')).toEqual(true); - }); -}); diff --git a/themes/theme-ios11/components/Reviews/index.jsx b/themes/theme-ios11/components/Reviews/index.jsx index 137d73faf9..3773e7237e 100644 --- a/themes/theme-ios11/components/Reviews/index.jsx +++ b/themes/theme-ios11/components/Reviews/index.jsx @@ -1,12 +1,8 @@ -import React, { Fragment } from 'react'; +import React from 'react'; import PropTypes from 'prop-types'; import appConfig from '@shopgate/pwa-common/helpers/config'; -import Portal from '@shopgate/pwa-common/components/Portal'; -import { - PRODUCT_REVIEWS, - PRODUCT_REVIEWS_AFTER, - PRODUCT_REVIEWS_BEFORE, -} from '@shopgate/pwa-common-commerce/product/constants/Portals'; +import { SurroundPortals } from '@shopgate/engage/components'; +import { PRODUCT_REVIEWS } from '@shopgate/engage/product'; import List from './components/List'; import Header from './components/Header'; import AllReviewsLink from './components/AllReviewsLink'; @@ -19,10 +15,9 @@ import connect from './connector'; * @param {Array} props.reviews Reviews which should be shown in the product page. * @returns {JSX} */ -const Reviews = ({ productId, reviews }) => ( - - - +function Reviews({ productId, reviews }) { + return ( + {appConfig.hasReviews && (
@@ -30,10 +25,9 @@ const Reviews = ({ productId, reviews }) => (
)} -
- -
-); + + ); +} Reviews.propTypes = { productId: PropTypes.string, diff --git a/themes/theme-ios11/components/Reviews/style.js b/themes/theme-ios11/components/Reviews/style.js index 32d1f7bbc6..a41b1d3a9e 100644 --- a/themes/theme-ios11/components/Reviews/style.js +++ b/themes/theme-ios11/components/Reviews/style.js @@ -5,7 +5,7 @@ const { variables } = themeConfig; const container = css({ marginBottom: variables.gap.small, -}).toString(); +}); export default { container, diff --git a/themes/theme-ios11/pages/Product/components/Content/index.jsx b/themes/theme-ios11/pages/Product/components/Content/index.jsx index 6dd4c94bee..acd42223c3 100644 --- a/themes/theme-ios11/pages/Product/components/Content/index.jsx +++ b/themes/theme-ios11/pages/Product/components/Content/index.jsx @@ -1,15 +1,14 @@ -import React, { Fragment, PureComponent } from 'react'; +import React, { PureComponent } from 'react'; import PropTypes from 'prop-types'; import { Conditioner } from '@shopgate/pwa-core'; import TaxDisclaimer from '@shopgate/pwa-ui-shared/TaxDisclaimer'; import { Section } from '@shopgate/engage/a11y'; -import { ProductProperties, RelationsSlider } from '@shopgate/engage/product'; +import { ProductProperties, RelationsSlider, Description } from '@shopgate/engage/product'; import Reviews from 'Components/Reviews'; import Media from '../Media'; import Header from '../Header'; import Characteristics from '../Characteristics'; import Options from '../Options'; -import Description from '../Description'; import AppBar from '../AppBar'; import AddToCartBar from '../AddToCartBar'; import connect from './connector'; @@ -142,9 +141,11 @@ class ProductContent extends PureComponent { setCharacteristics: this.setCharacteristics, }; + const { productId, variantId } = this.state; + return ( - - +
+
@@ -156,11 +157,11 @@ class ProductContent extends PureComponent { */}
- +
- +
{/* This feature is currently in BETA testing. @@ -169,12 +170,12 @@ class ProductContent extends PureComponent {
- +
- +
); } } diff --git a/themes/theme-ios11/pages/Product/components/Description/__snapshots__/spec.jsx.snap b/themes/theme-ios11/pages/Product/components/Description/__snapshots__/spec.jsx.snap deleted file mode 100644 index 92db982e08..0000000000 --- a/themes/theme-ios11/pages/Product/components/Description/__snapshots__/spec.jsx.snap +++ /dev/null @@ -1,200 +0,0 @@ -// Jest Snapshot v1, https://goo.gl/fbAQLP - -exports[` should not render if no data is available 1`] = ` - - - -
-
- - - product.description_heading - - -
- -
- -
- - -
- - -
- -
- -
- - - -`; - -exports[` should render description if data is available 1`] = ` - - - -
-
- - - product.description_heading - - -
- -
- foo", - } - } - wrapper={[Function]} - > - -
foo", - } - } - /> - - -
- -
- - - -`; diff --git a/themes/theme-ios11/pages/Product/components/Description/connector.js b/themes/theme-ios11/pages/Product/components/Description/connector.js deleted file mode 100644 index 4ef7103937..0000000000 --- a/themes/theme-ios11/pages/Product/components/Description/connector.js +++ /dev/null @@ -1,27 +0,0 @@ -import { connect } from 'react-redux'; -import { historyPush } from '@shopgate/pwa-common/actions/router'; -import { getProductDescription } from '@shopgate/pwa-common-commerce/product/selectors/product'; - -/** - * Maps the contents of the state to the component props. - * @param {Object} state The current application state. - * @param {Object} props The current component props. - * @return {Object} The extended component props. - */ -const mapStateToProps = (state, props) => ({ - html: getProductDescription(state, props), -}); - -/** - * Connects the dispatch function to a callable function in the props. - * @param {Function} dispatch The redux dispatch function. - * @return {Object} The extended component props. - */ -const mapDispatchToProps = dispatch => ({ - navigate: (pathname, target) => dispatch(historyPush({ - pathname, - ...target && { state: { target } }, - })), -}); - -export default connect(mapStateToProps, mapDispatchToProps); diff --git a/themes/theme-ios11/pages/Product/components/Description/index.jsx b/themes/theme-ios11/pages/Product/components/Description/index.jsx deleted file mode 100755 index 30d816dbc2..0000000000 --- a/themes/theme-ios11/pages/Product/components/Description/index.jsx +++ /dev/null @@ -1,65 +0,0 @@ -import React, { Fragment, PureComponent } from 'react'; -import PropTypes from 'prop-types'; -import Portal from '@shopgate/pwa-common/components/Portal'; -import { - PRODUCT_DESCRIPTION, - PRODUCT_DESCRIPTION_AFTER, - PRODUCT_DESCRIPTION_BEFORE, -} from '@shopgate/pwa-common-commerce/product/constants/Portals'; -import HtmlSanitizer from '@shopgate/pwa-common/components/HtmlSanitizer'; -import I18n from '@shopgate/pwa-common/components/I18n'; -import PlaceholderParagraph from '@shopgate/pwa-ui-shared/PlaceholderParagraph'; -import connect from './connector'; -import styles from './style'; - -/** - * The product description. - */ -class Description extends PureComponent { - static propTypes = { - html: PropTypes.string, - navigate: PropTypes.func, - }; - - static defaultProps = { - html: null, - navigate: () => { }, - }; - - /** - * @returns {JSX} - */ - render() { - const { html, navigate } = this.props; - - return ( - - - - {(html !== '') && ( -
-
- -
- -
- - {html} - -
-
-
- )} -
- -
- ); - } -} - -export default connect(Description); diff --git a/themes/theme-ios11/pages/Product/components/Description/style.js b/themes/theme-ios11/pages/Product/components/Description/style.js deleted file mode 100644 index 31069cb9af..0000000000 --- a/themes/theme-ios11/pages/Product/components/Description/style.js +++ /dev/null @@ -1,49 +0,0 @@ -import { css } from 'glamor'; -import { themeConfig } from '@shopgate/pwa-common/helpers/config'; - -const { colors } = themeConfig; - -const container = css({ - fontSize: 14, - padding: '13px 16px 16px', -}).toString(); - -const title = css({ - fontSize: 16, - fontWeight: 500, - marginBottom: 8, -}).toString(); - -const content = css({ - lineHeight: 1.7, - overflow: 'hidden', - wordBreak: ['break-all', 'break-word'], - hyphens: 'auto', - ' ul': { - listStyle: 'disc', - }, - ' ol': { - listStyle: 'decimal', - }, - ' ul, ol': { - margin: '.75em 0', - paddingLeft: '1.2em', - }, - ' a': { - color: colors.primary, - margin: '-.35em', - padding: '.35em', - position: 'relative', - }, -}).toString(); - -const placeholder = css({ - height: 14, -}).toString(); - -export default { - container, - title, - content, - placeholder, -}; diff --git a/utils/unit-tests/envSetup.js b/utils/unit-tests/envSetup.js index 3007dc5df8..e552fbdd2a 100644 --- a/utils/unit-tests/envSetup.js +++ b/utils/unit-tests/envSetup.js @@ -1,11 +1,25 @@ /* global jasmine */ +/* eslint-disable require-jsdoc, extra-rules/potential-point-free, class-methods-use-this */ require('jest-enzyme/lib/index'); global.SGEvent = { - __call: () => {}, + __call: () => { }, }; if (jasmine) { jasmine.DEFAULT_TIMEOUT_INTERVAL = 10000; } + +global.mutationConstructorSpy = jest.fn(); +global.mutationObserveSpy = jest.fn(); +global.mutationDisconnectSpy = jest.fn(); + +global.MutationObserver = class { + constructor(callback) { global.mutationConstructorSpy(callback); } + + observe(element, initObject) { global.mutationObserveSpy(element, initObject); } + + disconnect() { global.mutationDisconnectSpy(); } +}; +/* eslint-enable require-jsdoc, extra-rules/potential-point-free, class-methods-use-this */ From 4d36930525d37f80f1dc883d01e2e2aa3329827c Mon Sep 17 00:00:00 2001 From: devbucket Date: Fri, 11 Oct 2019 08:44:18 +0200 Subject: [PATCH 3/7] PWA-2250 fixed peer dependency. --- extensions/@shopgate-theme-config/frontend/package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/extensions/@shopgate-theme-config/frontend/package.json b/extensions/@shopgate-theme-config/frontend/package.json index c4b9e1735c..b0d8ac7bcf 100644 --- a/extensions/@shopgate-theme-config/frontend/package.json +++ b/extensions/@shopgate-theme-config/frontend/package.json @@ -7,6 +7,6 @@ "lodash": "^4.17.4" }, "peerDependencies": { - "@shopgate/pwa-common": "6.7.1" + "@shopgate/pwa-common": "^6.7.1" } } From 1d631568920e120f9c48713e76a2d397f6f7cc71 Mon Sep 17 00:00:00 2001 From: devbucket Date: Fri, 11 Oct 2019 08:44:39 +0200 Subject: [PATCH 4/7] PWA-2250 Removed unneeded effect hook. --- libraries/common/components/Swiper/index.jsx | 13 +------------ 1 file changed, 1 insertion(+), 12 deletions(-) diff --git a/libraries/common/components/Swiper/index.jsx b/libraries/common/components/Swiper/index.jsx index aa0dd44b6f..ecf0ac68dd 100644 --- a/libraries/common/components/Swiper/index.jsx +++ b/libraries/common/components/Swiper/index.jsx @@ -1,5 +1,5 @@ import 'react-id-swiper/lib/styles/css/swiper.css'; -import React, { useRef, useEffect } from 'react'; +import React, { useRef } from 'react'; import PropTypes from 'prop-types'; import cls from 'classnames'; import IDSwiper from 'react-id-swiper'; @@ -128,17 +128,6 @@ const Swiper = (props) => { allowSlideNext: !disabled, }; - useEffect(() => { - if (swiperInstance.current !== null) { - if (loop) { - // Recreate the loop on prop updates to avoid duplicated slides from the last slide set. - swiperInstance.current.loopCreate(); - } - - swiperInstance.current.update(); - } - }, [children, loop, params.rebuildOnUpdate]); - return (
From bc618779010bba0f2709cb8c9c7dc567d3dae060 Mon Sep 17 00:00:00 2001 From: devbucket Date: Fri, 11 Oct 2019 09:01:14 +0200 Subject: [PATCH 5/7] PWA-2250 Fixed unit tests. --- .../RangeSlider/__snapshots__/spec.jsx.snap | 2 +- .../__snapshots__/index.spec.jsx.snap | 24 +- .../Section/__tests__/index.spec.jsx | 12 +- .../engage/a11y/components/Section/style.js | 5 - .../__snapshots__/Description.spec.jsx.snap | 298 +- .../Reviews/__snapshots__/spec.jsx.snap | 4824 +++++++++-------- .../pages/Product/components/Content/spec.jsx | 2 +- .../Reviews/__snapshots__/spec.jsx.snap | 4824 +++++++++-------- .../pages/Product/components/Content/spec.jsx | 3 +- 9 files changed, 4987 insertions(+), 5007 deletions(-) delete mode 100644 libraries/engage/a11y/components/Section/style.js diff --git a/libraries/common/components/RangeSlider/__snapshots__/spec.jsx.snap b/libraries/common/components/RangeSlider/__snapshots__/spec.jsx.snap index 23ffb0cb50..38558e30dd 100644 --- a/libraries/common/components/RangeSlider/__snapshots__/spec.jsx.snap +++ b/libraries/common/components/RangeSlider/__snapshots__/spec.jsx.snap @@ -28,7 +28,7 @@ exports[` emits onChange if handle was touched (exponential) 1`] className=" css-10eto0a" style={ Object { - "left": "1.0000000000000008e-198%", + "left": "1.000000000000002e-198%", "right": "100%", "transition": null, } diff --git a/libraries/engage/a11y/components/Section/__tests__/__snapshots__/index.spec.jsx.snap b/libraries/engage/a11y/components/Section/__tests__/__snapshots__/index.spec.jsx.snap index 64f096d960..6e2fb81217 100644 --- a/libraries/engage/a11y/components/Section/__tests__/__snapshots__/index.spec.jsx.snap +++ b/libraries/engage/a11y/components/Section/__tests__/__snapshots__/index.spec.jsx.snap @@ -6,26 +6,11 @@ exports[`
should render hidden when no children rendered 1`] = ` title="my.headline" titleParams={Object {}} > -
-

- - my.headline - -

-
+
`; -exports[`
should render visible 1`] = ` +exports[`
should render with a label 1`] = `
should render visible 1`] = ` >
-

@@ -53,7 +37,7 @@ exports[`
should render visible 1`] = ` > my.headline -

+
diff --git a/libraries/engage/a11y/components/Section/__tests__/index.spec.jsx b/libraries/engage/a11y/components/Section/__tests__/index.spec.jsx index 9b3a0c1263..846efef84f 100644 --- a/libraries/engage/a11y/components/Section/__tests__/index.spec.jsx +++ b/libraries/engage/a11y/components/Section/__tests__/index.spec.jsx @@ -1,7 +1,6 @@ import React from 'react'; import { mount } from 'enzyme'; import Section from '../index'; -import { hidden } from '../style'; const mockTranslate = jest.fn(); @@ -22,7 +21,7 @@ describe('
', () => { jest.clearAllMocks(); }); - it('should render visible', () => { + it('should render with a label', () => { const wrapper = mount((
@@ -30,7 +29,7 @@ describe('
', () => { )); expect(wrapper).toMatchSnapshot(); - expect(wrapper.find('section').hasClass(hidden.toString())).toBe(false); + expect(wrapper.find('h2').exists()).toBe(true); expect(mockTranslate).toHaveBeenCalledWith({ string: title, params: titleParams, @@ -40,11 +39,8 @@ describe('
', () => { it('should render hidden when no children rendered', () => { const wrapper = mount(
); expect(wrapper).toMatchSnapshot(); - expect(wrapper.find('section').hasClass(hidden.toString())).toBe(true); - expect(mockTranslate).toHaveBeenCalledWith({ - string: title, - params: {}, - }); + expect(wrapper.find('h2').exists()).toBe(false); + expect(mockTranslate).toHaveBeenCalledTimes(0); }); describe('MutationObserver', () => { diff --git a/libraries/engage/a11y/components/Section/style.js b/libraries/engage/a11y/components/Section/style.js deleted file mode 100644 index 86a56d856d..0000000000 --- a/libraries/engage/a11y/components/Section/style.js +++ /dev/null @@ -1,5 +0,0 @@ -import { css } from 'glamor'; - -export const hidden = css({ - display: 'none', -}).toString(); diff --git a/libraries/engage/product/components/Description/__tests__/__snapshots__/Description.spec.jsx.snap b/libraries/engage/product/components/Description/__tests__/__snapshots__/Description.spec.jsx.snap index e921d6e215..d106dc1766 100644 --- a/libraries/engage/product/components/Description/__tests__/__snapshots__/Description.spec.jsx.snap +++ b/libraries/engage/product/components/Description/__tests__/__snapshots__/Description.spec.jsx.snap @@ -27,123 +27,93 @@ exports[` should not render if no data is available 1`] = ` name="product.description" props={null} > -
-
-

- - - product.sections.description - - -

-
-
+ +
+ +
+ - - - product.description_heading - - -
- + + -
- -
- - -
- - + + +
-
- -
- + } + /> +
-
-
+ +
should render description if data is available 1`] = ` name="product.description" props={null} > -
-
-

- - - product.sections.description - - -

+ product.description_heading + + +
+
-
foo", } } - role="heading" - > - - - product.description_heading - - -
- -
- +
foo", + "__html": "

foo

", } } - wrapper={[Function]} - > - -
foo", - } - } - /> - - -
- + /> +
+
-
-
+ +
should not render when feature flag is off 1`] = ` ] } > - - - + + + + + @@ -129,1983 +134,1992 @@ exports[` should render reviews, header and all reviews link 1`] = ` ] } > - - -
+ -
-
-
- -
    -
  • - - <div - className="css-1rmdcnr" - /> - - +
    +
+ +
    +
  • -
    - + + +
    -
    - - " size="1em" viewBox="0 0 24 24" > - ", - } - } - style={ - Object { - "fill": null, - "fontSize": "1em", - } - } + " + size="1em" viewBox="0 0 24 24" - xmlns="http://www.w3.org/2000/svg" - /> - - -
    -
    - + ", + } + } + style={ + Object { + "fill": null, + "fontSize": "1em", + } + } + viewBox="0 0 24 24" + xmlns="http://www.w3.org/2000/svg" + /> + + +
    +
    - " size="1em" viewBox="0 0 24 24" > - ", - } - } - style={ - Object { - "fill": null, - "fontSize": "1em", - } - } + " + size="1em" viewBox="0 0 24 24" - xmlns="http://www.w3.org/2000/svg" - /> - - -
    -
    - + ", + } + } + style={ + Object { + "fill": null, + "fontSize": "1em", + } + } + viewBox="0 0 24 24" + xmlns="http://www.w3.org/2000/svg" + /> + + +
    +
    - " size="1em" viewBox="0 0 24 24" > - ", - } - } - style={ - Object { - "fill": null, - "fontSize": "1em", - } - } + " + size="1em" viewBox="0 0 24 24" - xmlns="http://www.w3.org/2000/svg" - /> - - -
    -
    - + ", + } + } + style={ + Object { + "fill": null, + "fontSize": "1em", + } + } + viewBox="0 0 24 24" + xmlns="http://www.w3.org/2000/svg" + /> + + +
    +
    - " size="1em" viewBox="0 0 24 24" > - ", - } - } - style={ - Object { - "fill": null, - "fontSize": "1em", - } - } + " + size="1em" viewBox="0 0 24 24" - xmlns="http://www.w3.org/2000/svg" - /> - - -
    -
    - + ", + } + } + style={ + Object { + "fill": null, + "fontSize": "1em", + } + } + viewBox="0 0 24 24" + xmlns="http://www.w3.org/2000/svg" + /> + + +
    +
    - " size="1em" viewBox="0 0 24 24" > - ", - } - } - style={ - Object { - "fill": null, - "fontSize": "1em", - } - } + " + size="1em" viewBox="0 0 24 24" - xmlns="http://www.w3.org/2000/svg" - /> - - + > + ", + } + } + style={ + Object { + "fill": null, + "fontSize": "1em", + } + } + viewBox="0 0 24 24" + xmlns="http://www.w3.org/2000/svg" + /> + + +
    -
    -
    - - " size="1em" viewBox="0 0 24 24" > - ", - } - } - style={ - Object { - "fill": null, - "fontSize": "1em", - } - } + " + size="1em" viewBox="0 0 24 24" - xmlns="http://www.w3.org/2000/svg" - /> - - -
    -
    - + ", + } + } + style={ + Object { + "fill": null, + "fontSize": "1em", + } + } + viewBox="0 0 24 24" + xmlns="http://www.w3.org/2000/svg" + /> + + +
    +
    - " size="1em" viewBox="0 0 24 24" > - ", - } - } - style={ - Object { - "fill": null, - "fontSize": "1em", - } - } + " + size="1em" viewBox="0 0 24 24" - xmlns="http://www.w3.org/2000/svg" - /> - - -
    -
    - + ", + } + } + style={ + Object { + "fill": null, + "fontSize": "1em", + } + } + viewBox="0 0 24 24" + xmlns="http://www.w3.org/2000/svg" + /> + + +
    +
    - " size="1em" viewBox="0 0 24 24" > - ", - } - } - style={ - Object { - "fill": null, - "fontSize": "1em", - } - } + " + size="1em" viewBox="0 0 24 24" - xmlns="http://www.w3.org/2000/svg" - /> - - -
    -
    - + ", + } + } + style={ + Object { + "fill": null, + "fontSize": "1em", + } + } + viewBox="0 0 24 24" + xmlns="http://www.w3.org/2000/svg" + /> + + +
    +
    - " size="1em" viewBox="0 0 24 24" > - ", - } - } - style={ - Object { - "fill": null, - "fontSize": "1em", - } - } + " + size="1em" viewBox="0 0 24 24" - xmlns="http://www.w3.org/2000/svg" - /> - - -
    -
    - + ", + } + } + style={ + Object { + "fill": null, + "fontSize": "1em", + } + } + viewBox="0 0 24 24" + xmlns="http://www.w3.org/2000/svg" + /> + + +
    +
    - " size="1em" viewBox="0 0 24 24" > - ", - } - } - style={ - Object { - "fill": null, - "fontSize": "1em", - } - } + " + size="1em" viewBox="0 0 24 24" - xmlns="http://www.w3.org/2000/svg" - /> - - + > + ", + } + } + style={ + Object { + "fill": null, + "fontSize": "1em", + } + } + viewBox="0 0 24 24" + xmlns="http://www.w3.org/2000/svg" + /> + + +
    -
    - -
- - -
+
+ + - "No Name and Title Lorem ipsum dolor sit amet, con… takimata sanctus est Lorem ipsum dolor sit amet." -
- - + "No Name and Title Lorem ipsum dolor sit amet, con… takimata sanctus est Lorem ipsum dolor sit amet." +
+ + -
- - - - d - - - - - -
-
- -
  • - - <div - className="css-1rmdcnr" - /> - - + + d + + + + + +
  • + + +
  • -
    - + + +
    -
    - - " size="1em" viewBox="0 0 24 24" > - ", - } - } - style={ - Object { - "fill": null, - "fontSize": "1em", - } - } + " + size="1em" viewBox="0 0 24 24" - xmlns="http://www.w3.org/2000/svg" - /> - - -
    -
    - + ", + } + } + style={ + Object { + "fill": null, + "fontSize": "1em", + } + } + viewBox="0 0 24 24" + xmlns="http://www.w3.org/2000/svg" + /> + + +
    +
    - " size="1em" viewBox="0 0 24 24" > - ", - } - } - style={ - Object { - "fill": null, - "fontSize": "1em", - } - } + " + size="1em" viewBox="0 0 24 24" - xmlns="http://www.w3.org/2000/svg" - /> - - -
    -
    - + ", + } + } + style={ + Object { + "fill": null, + "fontSize": "1em", + } + } + viewBox="0 0 24 24" + xmlns="http://www.w3.org/2000/svg" + /> + + +
    +
    - " size="1em" viewBox="0 0 24 24" > - ", - } - } - style={ - Object { - "fill": null, - "fontSize": "1em", - } - } + " + size="1em" viewBox="0 0 24 24" - xmlns="http://www.w3.org/2000/svg" - /> - - -
    -
    - + ", + } + } + style={ + Object { + "fill": null, + "fontSize": "1em", + } + } + viewBox="0 0 24 24" + xmlns="http://www.w3.org/2000/svg" + /> + + +
    +
    - " size="1em" viewBox="0 0 24 24" > - ", - } - } - style={ - Object { - "fill": null, - "fontSize": "1em", - } - } + " + size="1em" viewBox="0 0 24 24" - xmlns="http://www.w3.org/2000/svg" - /> - - -
    -
    - + ", + } + } + style={ + Object { + "fill": null, + "fontSize": "1em", + } + } + viewBox="0 0 24 24" + xmlns="http://www.w3.org/2000/svg" + /> + + +
    +
    - " size="1em" viewBox="0 0 24 24" > - ", - } - } - style={ - Object { - "fill": null, - "fontSize": "1em", - } - } + " + size="1em" viewBox="0 0 24 24" - xmlns="http://www.w3.org/2000/svg" - /> - - + > + ", + } + } + style={ + Object { + "fill": null, + "fontSize": "1em", + } + } + viewBox="0 0 24 24" + xmlns="http://www.w3.org/2000/svg" + /> + + +
    -
    -
    - - " size="1em" viewBox="0 0 24 24" > - ", - } - } - style={ - Object { - "fill": null, - "fontSize": "1em", - } - } + " + size="1em" viewBox="0 0 24 24" - xmlns="http://www.w3.org/2000/svg" - /> - - -
    -
    - + ", + } + } + style={ + Object { + "fill": null, + "fontSize": "1em", + } + } + viewBox="0 0 24 24" + xmlns="http://www.w3.org/2000/svg" + /> + + +
    +
    - " size="1em" viewBox="0 0 24 24" > - ", - } - } - style={ - Object { - "fill": null, - "fontSize": "1em", - } - } + " + size="1em" viewBox="0 0 24 24" - xmlns="http://www.w3.org/2000/svg" - /> - - -
    -
    - + ", + } + } + style={ + Object { + "fill": null, + "fontSize": "1em", + } + } + viewBox="0 0 24 24" + xmlns="http://www.w3.org/2000/svg" + /> + + +
    +
    - " size="1em" viewBox="0 0 24 24" > - ", - } - } - style={ - Object { - "fill": null, - "fontSize": "1em", - } - } + " + size="1em" viewBox="0 0 24 24" - xmlns="http://www.w3.org/2000/svg" - /> - - -
    -
    - + ", + } + } + style={ + Object { + "fill": null, + "fontSize": "1em", + } + } + viewBox="0 0 24 24" + xmlns="http://www.w3.org/2000/svg" + /> + + +
    +
    - " size="1em" viewBox="0 0 24 24" > - ", - } - } - style={ - Object { - "fill": null, - "fontSize": "1em", - } - } + " + size="1em" viewBox="0 0 24 24" - xmlns="http://www.w3.org/2000/svg" - /> - - -
    -
    - + ", + } + } + style={ + Object { + "fill": null, + "fontSize": "1em", + } + } + viewBox="0 0 24 24" + xmlns="http://www.w3.org/2000/svg" + /> + + +
    +
    - " size="1em" viewBox="0 0 24 24" > - ", - } - } - style={ - Object { - "fill": null, - "fontSize": "1em", - } - } + " + size="1em" viewBox="0 0 24 24" - xmlns="http://www.w3.org/2000/svg" - /> - - + > + ", + } + } + style={ + Object { + "fill": null, + "fontSize": "1em", + } + } + viewBox="0 0 24 24" + xmlns="http://www.w3.org/2000/svg" + /> + + +
    -
    - -
  • - - -
    +
    + + - "No Name and Title Lorem ipsum dolor sit amet, con… takimata sanctus est Lorem ipsum dolor sit amet." -
    - - + "No Name and Title Lorem ipsum dolor sit amet, con… takimata sanctus est Lorem ipsum dolor sit amet." +
    + + -
    - - - - d - - - - - -
    -
    - -
  • - - <div - className="css-1rmdcnr" - /> - - + + d + + + + + +
  • + + +
  • -
    - + + +
    -
    - - " size="1em" viewBox="0 0 24 24" > - ", - } - } - style={ - Object { - "fill": null, - "fontSize": "1em", - } - } + " + size="1em" viewBox="0 0 24 24" - xmlns="http://www.w3.org/2000/svg" - /> - - -
    -
    - + ", + } + } + style={ + Object { + "fill": null, + "fontSize": "1em", + } + } + viewBox="0 0 24 24" + xmlns="http://www.w3.org/2000/svg" + /> + + +
    +
    - " size="1em" viewBox="0 0 24 24" > - ", - } - } - style={ - Object { - "fill": null, - "fontSize": "1em", - } - } + " + size="1em" viewBox="0 0 24 24" - xmlns="http://www.w3.org/2000/svg" - /> - - -
    -
    - + ", + } + } + style={ + Object { + "fill": null, + "fontSize": "1em", + } + } + viewBox="0 0 24 24" + xmlns="http://www.w3.org/2000/svg" + /> + + +
    +
    - " size="1em" viewBox="0 0 24 24" > - ", - } - } - style={ - Object { - "fill": null, - "fontSize": "1em", - } - } + " + size="1em" viewBox="0 0 24 24" - xmlns="http://www.w3.org/2000/svg" - /> - - -
    -
    - + ", + } + } + style={ + Object { + "fill": null, + "fontSize": "1em", + } + } + viewBox="0 0 24 24" + xmlns="http://www.w3.org/2000/svg" + /> + + +
    +
    - " size="1em" viewBox="0 0 24 24" > - ", - } - } - style={ - Object { - "fill": null, - "fontSize": "1em", - } - } + " + size="1em" viewBox="0 0 24 24" - xmlns="http://www.w3.org/2000/svg" - /> - - -
    -
    - + ", + } + } + style={ + Object { + "fill": null, + "fontSize": "1em", + } + } + viewBox="0 0 24 24" + xmlns="http://www.w3.org/2000/svg" + /> + + +
    +
    - " size="1em" viewBox="0 0 24 24" > - ", - } - } - style={ - Object { - "fill": null, - "fontSize": "1em", - } - } + " + size="1em" viewBox="0 0 24 24" - xmlns="http://www.w3.org/2000/svg" - /> - - + > + ", + } + } + style={ + Object { + "fill": null, + "fontSize": "1em", + } + } + viewBox="0 0 24 24" + xmlns="http://www.w3.org/2000/svg" + /> + + +
    -
    -
    - - " size="1em" viewBox="0 0 24 24" > - ", - } - } - style={ - Object { - "fill": null, - "fontSize": "1em", - } - } + " + size="1em" viewBox="0 0 24 24" - xmlns="http://www.w3.org/2000/svg" - /> - - -
    -
    - + ", + } + } + style={ + Object { + "fill": null, + "fontSize": "1em", + } + } + viewBox="0 0 24 24" + xmlns="http://www.w3.org/2000/svg" + /> + + +
    +
    - " size="1em" viewBox="0 0 24 24" > - ", - } - } - style={ - Object { - "fill": null, - "fontSize": "1em", - } - } + " + size="1em" viewBox="0 0 24 24" - xmlns="http://www.w3.org/2000/svg" - /> - - -
    -
    - + ", + } + } + style={ + Object { + "fill": null, + "fontSize": "1em", + } + } + viewBox="0 0 24 24" + xmlns="http://www.w3.org/2000/svg" + /> + + +
    +
    - " size="1em" viewBox="0 0 24 24" > - ", - } - } - style={ - Object { - "fill": null, - "fontSize": "1em", - } - } + " + size="1em" viewBox="0 0 24 24" - xmlns="http://www.w3.org/2000/svg" - /> - - -
    -
    - + ", + } + } + style={ + Object { + "fill": null, + "fontSize": "1em", + } + } + viewBox="0 0 24 24" + xmlns="http://www.w3.org/2000/svg" + /> + + +
    +
    - " size="1em" viewBox="0 0 24 24" > - ", - } - } - style={ - Object { - "fill": null, - "fontSize": "1em", - } - } + " + size="1em" viewBox="0 0 24 24" - xmlns="http://www.w3.org/2000/svg" - /> - - -
    -
    - + ", + } + } + style={ + Object { + "fill": null, + "fontSize": "1em", + } + } + viewBox="0 0 24 24" + xmlns="http://www.w3.org/2000/svg" + /> + + +
    +
    - " size="1em" viewBox="0 0 24 24" > - ", - } - } - style={ - Object { - "fill": null, - "fontSize": "1em", - } - } + " + size="1em" viewBox="0 0 24 24" - xmlns="http://www.w3.org/2000/svg" - /> - - + > + ", + } + } + style={ + Object { + "fill": null, + "fontSize": "1em", + } + } + viewBox="0 0 24 24" + xmlns="http://www.w3.org/2000/svg" + /> + + +
    -
    - -
  • - - -
    +
    + + - "No Name and Title Lorem ipsum dolor sit amet, con… takimata sanctus est Lorem ipsum dolor sit amet." -
    - - + "No Name and Title Lorem ipsum dolor sit amet, con… takimata sanctus est Lorem ipsum dolor sit amet." +
    + + -
    - - - - d - - - - - -
    -
    - -
  • - - <div - className="css-1rmdcnr" - /> - - + + d + + + + + +
  • + + +
  • -
    +
    + + - -
    - - " size="1em" viewBox="0 0 24 24" > - ", - } - } - style={ - Object { - "fill": null, - "fontSize": "1em", - } - } + " + size="1em" viewBox="0 0 24 24" - xmlns="http://www.w3.org/2000/svg" - /> - - -
    -
    - + ", + } + } + style={ + Object { + "fill": null, + "fontSize": "1em", + } + } + viewBox="0 0 24 24" + xmlns="http://www.w3.org/2000/svg" + /> + + +
    +
    - " size="1em" viewBox="0 0 24 24" > - ", - } - } - style={ - Object { - "fill": null, - "fontSize": "1em", - } - } + " + size="1em" viewBox="0 0 24 24" - xmlns="http://www.w3.org/2000/svg" - /> - - -
    -
    - + ", + } + } + style={ + Object { + "fill": null, + "fontSize": "1em", + } + } + viewBox="0 0 24 24" + xmlns="http://www.w3.org/2000/svg" + /> + + +
    +
    - " size="1em" viewBox="0 0 24 24" > - ", - } - } - style={ - Object { - "fill": null, - "fontSize": "1em", - } - } + " + size="1em" viewBox="0 0 24 24" - xmlns="http://www.w3.org/2000/svg" - /> - - -
    -
    - + ", + } + } + style={ + Object { + "fill": null, + "fontSize": "1em", + } + } + viewBox="0 0 24 24" + xmlns="http://www.w3.org/2000/svg" + /> + + +
    +
    - " size="1em" viewBox="0 0 24 24" > - ", - } - } - style={ - Object { - "fill": null, - "fontSize": "1em", - } - } + " + size="1em" viewBox="0 0 24 24" - xmlns="http://www.w3.org/2000/svg" - /> - - -
    -
    - + ", + } + } + style={ + Object { + "fill": null, + "fontSize": "1em", + } + } + viewBox="0 0 24 24" + xmlns="http://www.w3.org/2000/svg" + /> + + +
    +
    - " size="1em" viewBox="0 0 24 24" > - ", - } - } - style={ - Object { - "fill": null, - "fontSize": "1em", - } - } + " + size="1em" viewBox="0 0 24 24" - xmlns="http://www.w3.org/2000/svg" - /> - - + > + ", + } + } + style={ + Object { + "fill": null, + "fontSize": "1em", + } + } + viewBox="0 0 24 24" + xmlns="http://www.w3.org/2000/svg" + /> + + +
    -
    -
    - - " size="1em" viewBox="0 0 24 24" > - ", - } - } - style={ - Object { - "fill": null, - "fontSize": "1em", - } - } + " + size="1em" viewBox="0 0 24 24" - xmlns="http://www.w3.org/2000/svg" - /> - - -
    -
    - + ", + } + } + style={ + Object { + "fill": null, + "fontSize": "1em", + } + } + viewBox="0 0 24 24" + xmlns="http://www.w3.org/2000/svg" + /> + + +
    +
    - " size="1em" viewBox="0 0 24 24" > - ", - } - } - style={ - Object { - "fill": null, - "fontSize": "1em", - } - } + " + size="1em" viewBox="0 0 24 24" - xmlns="http://www.w3.org/2000/svg" - /> - - -
    -
    - + ", + } + } + style={ + Object { + "fill": null, + "fontSize": "1em", + } + } + viewBox="0 0 24 24" + xmlns="http://www.w3.org/2000/svg" + /> + + +
    +
    - " size="1em" viewBox="0 0 24 24" > - ", - } - } - style={ - Object { - "fill": null, - "fontSize": "1em", - } - } + " + size="1em" viewBox="0 0 24 24" - xmlns="http://www.w3.org/2000/svg" - /> - - -
    -
    - + ", + } + } + style={ + Object { + "fill": null, + "fontSize": "1em", + } + } + viewBox="0 0 24 24" + xmlns="http://www.w3.org/2000/svg" + /> + + +
    +
    - " size="1em" viewBox="0 0 24 24" > - ", - } - } - style={ - Object { - "fill": null, - "fontSize": "1em", - } - } + " + size="1em" viewBox="0 0 24 24" - xmlns="http://www.w3.org/2000/svg" - /> - - -
    -
    - + ", + } + } + style={ + Object { + "fill": null, + "fontSize": "1em", + } + } + viewBox="0 0 24 24" + xmlns="http://www.w3.org/2000/svg" + /> + + +
    +
    - " size="1em" viewBox="0 0 24 24" > - ", - } - } - style={ - Object { - "fill": null, - "fontSize": "1em", - } - } + " + size="1em" viewBox="0 0 24 24" - xmlns="http://www.w3.org/2000/svg" - /> - - + > + ", + } + } + style={ + Object { + "fill": null, + "fontSize": "1em", + } + } + viewBox="0 0 24 24" + xmlns="http://www.w3.org/2000/svg" + /> + + +
    -
    - -
  • - - -
    +
    + + - "No Name and Title Lorem ipsum dolor sit amet, con… takimata sanctus est Lorem ipsum dolor sit amet." -
    - - + "No Name and Title Lorem ipsum dolor sit amet, con… takimata sanctus est Lorem ipsum dolor sit amet." +
    + + -
    - - - - d - - - - - -
    -
    - - - - - + + d + + + + + +
    + + + + + -
    - - - -
    - - + + reviews.button_all + + +
    + + + - - -
    - - - -
    - - -
    - - + +
    + + + +
    + + +
    + + + @@ -2151,958 +2165,967 @@ exports[` should render reviews, header, but no all reviews link 1`] ] } > - - -
    + -
    -
    -
    - -
      -
    • - - <div - className="css-1rmdcnr" - /> - - +
      + + +
        +
      • -
        +
        + + - -
        - - " size="1em" viewBox="0 0 24 24" > - ", - } - } - style={ - Object { - "fill": null, - "fontSize": "1em", - } - } + " + size="1em" viewBox="0 0 24 24" - xmlns="http://www.w3.org/2000/svg" - /> - - -
        -
        - + ", + } + } + style={ + Object { + "fill": null, + "fontSize": "1em", + } + } + viewBox="0 0 24 24" + xmlns="http://www.w3.org/2000/svg" + /> + + +
        +
        - " size="1em" viewBox="0 0 24 24" > - ", - } - } - style={ - Object { - "fill": null, - "fontSize": "1em", - } - } + " + size="1em" viewBox="0 0 24 24" - xmlns="http://www.w3.org/2000/svg" - /> - - -
        -
        - + ", + } + } + style={ + Object { + "fill": null, + "fontSize": "1em", + } + } + viewBox="0 0 24 24" + xmlns="http://www.w3.org/2000/svg" + /> + + +
        +
        - " size="1em" viewBox="0 0 24 24" > - ", - } - } - style={ - Object { - "fill": null, - "fontSize": "1em", - } - } + " + size="1em" viewBox="0 0 24 24" - xmlns="http://www.w3.org/2000/svg" - /> - - -
        -
        - + ", + } + } + style={ + Object { + "fill": null, + "fontSize": "1em", + } + } + viewBox="0 0 24 24" + xmlns="http://www.w3.org/2000/svg" + /> + + +
        +
        - " size="1em" viewBox="0 0 24 24" > - ", - } - } - style={ - Object { - "fill": null, - "fontSize": "1em", - } - } + " + size="1em" viewBox="0 0 24 24" - xmlns="http://www.w3.org/2000/svg" - /> - - -
        -
        - + ", + } + } + style={ + Object { + "fill": null, + "fontSize": "1em", + } + } + viewBox="0 0 24 24" + xmlns="http://www.w3.org/2000/svg" + /> + + +
        +
        - " size="1em" viewBox="0 0 24 24" > - ", - } - } - style={ - Object { - "fill": null, - "fontSize": "1em", - } - } + " + size="1em" viewBox="0 0 24 24" - xmlns="http://www.w3.org/2000/svg" - /> - - + > + ", + } + } + style={ + Object { + "fill": null, + "fontSize": "1em", + } + } + viewBox="0 0 24 24" + xmlns="http://www.w3.org/2000/svg" + /> + + +
        -
        -
        - - " size="1em" viewBox="0 0 24 24" > - ", - } - } - style={ - Object { - "fill": null, - "fontSize": "1em", - } - } + " + size="1em" viewBox="0 0 24 24" - xmlns="http://www.w3.org/2000/svg" - /> - - -
        -
        - + ", + } + } + style={ + Object { + "fill": null, + "fontSize": "1em", + } + } + viewBox="0 0 24 24" + xmlns="http://www.w3.org/2000/svg" + /> + + +
        +
        - " size="1em" viewBox="0 0 24 24" > - ", - } - } - style={ - Object { - "fill": null, - "fontSize": "1em", - } - } + " + size="1em" viewBox="0 0 24 24" - xmlns="http://www.w3.org/2000/svg" - /> - - -
        -
        - + ", + } + } + style={ + Object { + "fill": null, + "fontSize": "1em", + } + } + viewBox="0 0 24 24" + xmlns="http://www.w3.org/2000/svg" + /> + + +
        +
        - " size="1em" viewBox="0 0 24 24" > - ", - } - } - style={ - Object { - "fill": null, - "fontSize": "1em", - } - } + " + size="1em" viewBox="0 0 24 24" - xmlns="http://www.w3.org/2000/svg" - /> - - -
        -
        - + ", + } + } + style={ + Object { + "fill": null, + "fontSize": "1em", + } + } + viewBox="0 0 24 24" + xmlns="http://www.w3.org/2000/svg" + /> + + +
        +
        - " size="1em" viewBox="0 0 24 24" > - ", - } - } - style={ - Object { - "fill": null, - "fontSize": "1em", - } - } + " + size="1em" viewBox="0 0 24 24" - xmlns="http://www.w3.org/2000/svg" - /> - - -
        -
        - + ", + } + } + style={ + Object { + "fill": null, + "fontSize": "1em", + } + } + viewBox="0 0 24 24" + xmlns="http://www.w3.org/2000/svg" + /> + + +
        +
        - " size="1em" viewBox="0 0 24 24" > - ", - } - } - style={ - Object { - "fill": null, - "fontSize": "1em", - } - } + " + size="1em" viewBox="0 0 24 24" - xmlns="http://www.w3.org/2000/svg" - /> - - + > + ", + } + } + style={ + Object { + "fill": null, + "fontSize": "1em", + } + } + viewBox="0 0 24 24" + xmlns="http://www.w3.org/2000/svg" + /> + + +
        -
        - -
      -
      - -
      +
      + + - "No Name and Title Lorem ipsum dolor sit amet, con… takimata sanctus est Lorem ipsum dolor sit amet." -
    - - + "No Name and Title Lorem ipsum dolor sit amet, con… takimata sanctus est Lorem ipsum dolor sit amet." +
    + + -
    - - - - d - - - - - -
    -
    - -
  • - - <div - className="css-1rmdcnr" - /> - - + + d + + + + + + + +
  • +
  • -
    +
    + + - -
    - - " size="1em" viewBox="0 0 24 24" > - ", - } - } - style={ - Object { - "fill": null, - "fontSize": "1em", - } - } + " + size="1em" viewBox="0 0 24 24" - xmlns="http://www.w3.org/2000/svg" - /> - - -
    -
    - + ", + } + } + style={ + Object { + "fill": null, + "fontSize": "1em", + } + } + viewBox="0 0 24 24" + xmlns="http://www.w3.org/2000/svg" + /> + + +
    +
    - " size="1em" viewBox="0 0 24 24" > - ", - } - } - style={ - Object { - "fill": null, - "fontSize": "1em", - } - } + " + size="1em" viewBox="0 0 24 24" - xmlns="http://www.w3.org/2000/svg" - /> - - -
    -
    - + ", + } + } + style={ + Object { + "fill": null, + "fontSize": "1em", + } + } + viewBox="0 0 24 24" + xmlns="http://www.w3.org/2000/svg" + /> + + +
    +
    - " size="1em" viewBox="0 0 24 24" > - ", - } - } - style={ - Object { - "fill": null, - "fontSize": "1em", - } - } + " + size="1em" viewBox="0 0 24 24" - xmlns="http://www.w3.org/2000/svg" - /> - - -
    -
    - + ", + } + } + style={ + Object { + "fill": null, + "fontSize": "1em", + } + } + viewBox="0 0 24 24" + xmlns="http://www.w3.org/2000/svg" + /> + + +
    +
    - " size="1em" viewBox="0 0 24 24" > - ", - } - } - style={ - Object { - "fill": null, - "fontSize": "1em", - } - } + " + size="1em" viewBox="0 0 24 24" - xmlns="http://www.w3.org/2000/svg" - /> - - -
    -
    - + ", + } + } + style={ + Object { + "fill": null, + "fontSize": "1em", + } + } + viewBox="0 0 24 24" + xmlns="http://www.w3.org/2000/svg" + /> + + +
    +
    - " size="1em" viewBox="0 0 24 24" > - ", - } - } - style={ - Object { - "fill": null, - "fontSize": "1em", - } - } + " + size="1em" viewBox="0 0 24 24" - xmlns="http://www.w3.org/2000/svg" - /> - - + > + ", + } + } + style={ + Object { + "fill": null, + "fontSize": "1em", + } + } + viewBox="0 0 24 24" + xmlns="http://www.w3.org/2000/svg" + /> + + +
    -
    -
    - - " size="1em" viewBox="0 0 24 24" > - ", - } - } - style={ - Object { - "fill": null, - "fontSize": "1em", - } - } + " + size="1em" viewBox="0 0 24 24" - xmlns="http://www.w3.org/2000/svg" - /> - - -
    -
    - + ", + } + } + style={ + Object { + "fill": null, + "fontSize": "1em", + } + } + viewBox="0 0 24 24" + xmlns="http://www.w3.org/2000/svg" + /> + + +
    +
    - " size="1em" viewBox="0 0 24 24" > - ", - } - } - style={ - Object { - "fill": null, - "fontSize": "1em", - } - } + " + size="1em" viewBox="0 0 24 24" - xmlns="http://www.w3.org/2000/svg" - /> - - -
    -
    - + ", + } + } + style={ + Object { + "fill": null, + "fontSize": "1em", + } + } + viewBox="0 0 24 24" + xmlns="http://www.w3.org/2000/svg" + /> + + +
    +
    - " size="1em" viewBox="0 0 24 24" > - ", - } - } - style={ - Object { - "fill": null, - "fontSize": "1em", - } - } + " + size="1em" viewBox="0 0 24 24" - xmlns="http://www.w3.org/2000/svg" - /> - - -
    -
    - + ", + } + } + style={ + Object { + "fill": null, + "fontSize": "1em", + } + } + viewBox="0 0 24 24" + xmlns="http://www.w3.org/2000/svg" + /> + + +
    +
    - " size="1em" viewBox="0 0 24 24" > - ", - } - } - style={ - Object { - "fill": null, - "fontSize": "1em", - } - } + " + size="1em" viewBox="0 0 24 24" - xmlns="http://www.w3.org/2000/svg" - /> - - -
    -
    - + ", + } + } + style={ + Object { + "fill": null, + "fontSize": "1em", + } + } + viewBox="0 0 24 24" + xmlns="http://www.w3.org/2000/svg" + /> + + +
    +
    - " size="1em" viewBox="0 0 24 24" > - ", - } - } - style={ - Object { - "fill": null, - "fontSize": "1em", - } - } + " + size="1em" viewBox="0 0 24 24" - xmlns="http://www.w3.org/2000/svg" - /> - - + > + ", + } + } + style={ + Object { + "fill": null, + "fontSize": "1em", + } + } + viewBox="0 0 24 24" + xmlns="http://www.w3.org/2000/svg" + /> + + +
    -
    - - - - -
    +
    + + - "No Name and Title Lorem ipsum dolor sit amet, con… takimata sanctus est Lorem ipsum dolor sit amet." - - - + "No Name and Title Lorem ipsum dolor sit amet, con… takimata sanctus est Lorem ipsum dolor sit amet." + +
    + -
    - - - - d - - - - - -
    -
    -
  • - - - - + + d + + + + + + + + + + + - - - - + > + + + + + + @@ -3129,42 +3152,51 @@ exports[` should render when no reviews and rating given 1`] = ` productId="foo" reviews={null} > - - -
    + -
    -
    -
    - - - +
    + + - -
    -
    - + + + +
    +
    + +
    diff --git a/themes/theme-gmd/pages/Product/components/Content/spec.jsx b/themes/theme-gmd/pages/Product/components/Content/spec.jsx index 9a46959b4e..ca9e09864d 100644 --- a/themes/theme-gmd/pages/Product/components/Content/spec.jsx +++ b/themes/theme-gmd/pages/Product/components/Content/spec.jsx @@ -9,6 +9,7 @@ jest.mock('@shopgate/engage/a11y', () => ({ jest.mock('@shopgate/engage/product', () => ({ ProductProperties: () => null, RelationsSlider: () => null, + Description: () => null, })); jest.mock('@shopgate/pwa-core', () => ({ @@ -21,7 +22,6 @@ jest.mock('../Media', () => () => null); jest.mock('../Header', () => () => null); jest.mock('../Characteristics', () => () => null); jest.mock('../Options', () => () => null); -jest.mock('../Description', () => () => null); jest.mock('../AppBar', () => () => null); jest.mock('Components/Reviews', () => () => null); jest.mock('./connector', () => Component => Component); diff --git a/themes/theme-ios11/components/Reviews/__snapshots__/spec.jsx.snap b/themes/theme-ios11/components/Reviews/__snapshots__/spec.jsx.snap index 75347bafa2..d5a8860aad 100644 --- a/themes/theme-ios11/components/Reviews/__snapshots__/spec.jsx.snap +++ b/themes/theme-ios11/components/Reviews/__snapshots__/spec.jsx.snap @@ -56,18 +56,23 @@ exports[` should not render when feature flag is off 1`] = ` ] } > - - - + + + + + @@ -129,1983 +134,1992 @@ exports[` should render reviews, header and all reviews link 1`] = ` ] } > - - -
    + -
    -
    -
    - -
      -
    • - - <div - className="css-1rmdcnr" - /> - - +
      + + +
        +
      • -
        - + + +
        -
        - - " size="1em" viewBox="0 0 24 24" > - ", - } - } - style={ - Object { - "fill": null, - "fontSize": "1em", - } - } + " + size="1em" viewBox="0 0 24 24" - xmlns="http://www.w3.org/2000/svg" - /> - - -
        -
        - + ", + } + } + style={ + Object { + "fill": null, + "fontSize": "1em", + } + } + viewBox="0 0 24 24" + xmlns="http://www.w3.org/2000/svg" + /> + + +
        +
        - " size="1em" viewBox="0 0 24 24" > - ", - } - } - style={ - Object { - "fill": null, - "fontSize": "1em", - } - } + " + size="1em" viewBox="0 0 24 24" - xmlns="http://www.w3.org/2000/svg" - /> - - -
        -
        - + ", + } + } + style={ + Object { + "fill": null, + "fontSize": "1em", + } + } + viewBox="0 0 24 24" + xmlns="http://www.w3.org/2000/svg" + /> + + +
        +
        - " size="1em" viewBox="0 0 24 24" > - ", - } - } - style={ - Object { - "fill": null, - "fontSize": "1em", - } - } + " + size="1em" viewBox="0 0 24 24" - xmlns="http://www.w3.org/2000/svg" - /> - - -
        -
        - + ", + } + } + style={ + Object { + "fill": null, + "fontSize": "1em", + } + } + viewBox="0 0 24 24" + xmlns="http://www.w3.org/2000/svg" + /> + + +
        +
        - " size="1em" viewBox="0 0 24 24" > - ", - } - } - style={ - Object { - "fill": null, - "fontSize": "1em", - } - } + " + size="1em" viewBox="0 0 24 24" - xmlns="http://www.w3.org/2000/svg" - /> - - -
        -
        - + ", + } + } + style={ + Object { + "fill": null, + "fontSize": "1em", + } + } + viewBox="0 0 24 24" + xmlns="http://www.w3.org/2000/svg" + /> + + +
        +
        - " size="1em" viewBox="0 0 24 24" > - ", - } - } - style={ - Object { - "fill": null, - "fontSize": "1em", - } - } + " + size="1em" viewBox="0 0 24 24" - xmlns="http://www.w3.org/2000/svg" - /> - - + > + ", + } + } + style={ + Object { + "fill": null, + "fontSize": "1em", + } + } + viewBox="0 0 24 24" + xmlns="http://www.w3.org/2000/svg" + /> + + +
        -
        -
        - - " size="1em" viewBox="0 0 24 24" > - ", - } - } - style={ - Object { - "fill": null, - "fontSize": "1em", - } - } + " + size="1em" viewBox="0 0 24 24" - xmlns="http://www.w3.org/2000/svg" - /> - - -
        -
        - + ", + } + } + style={ + Object { + "fill": null, + "fontSize": "1em", + } + } + viewBox="0 0 24 24" + xmlns="http://www.w3.org/2000/svg" + /> + + +
        +
        - " size="1em" viewBox="0 0 24 24" > - ", - } - } - style={ - Object { - "fill": null, - "fontSize": "1em", - } - } + " + size="1em" viewBox="0 0 24 24" - xmlns="http://www.w3.org/2000/svg" - /> - - -
        -
        - + ", + } + } + style={ + Object { + "fill": null, + "fontSize": "1em", + } + } + viewBox="0 0 24 24" + xmlns="http://www.w3.org/2000/svg" + /> + + +
        +
        - " size="1em" viewBox="0 0 24 24" > - ", - } - } - style={ - Object { - "fill": null, - "fontSize": "1em", - } - } + " + size="1em" viewBox="0 0 24 24" - xmlns="http://www.w3.org/2000/svg" - /> - - -
        -
        - + ", + } + } + style={ + Object { + "fill": null, + "fontSize": "1em", + } + } + viewBox="0 0 24 24" + xmlns="http://www.w3.org/2000/svg" + /> + + +
        +
        - " size="1em" viewBox="0 0 24 24" > - ", - } - } - style={ - Object { - "fill": null, - "fontSize": "1em", - } - } + " + size="1em" viewBox="0 0 24 24" - xmlns="http://www.w3.org/2000/svg" - /> - - -
        -
        - + ", + } + } + style={ + Object { + "fill": null, + "fontSize": "1em", + } + } + viewBox="0 0 24 24" + xmlns="http://www.w3.org/2000/svg" + /> + + +
        +
        - " size="1em" viewBox="0 0 24 24" > - ", - } - } - style={ - Object { - "fill": null, - "fontSize": "1em", - } - } + " + size="1em" viewBox="0 0 24 24" - xmlns="http://www.w3.org/2000/svg" - /> - - + > + ", + } + } + style={ + Object { + "fill": null, + "fontSize": "1em", + } + } + viewBox="0 0 24 24" + xmlns="http://www.w3.org/2000/svg" + /> + + +
        -
        - -
      -
      - -
      +
      + + - "No Name and Title Lorem ipsum dolor sit amet, con… takimata sanctus est Lorem ipsum dolor sit amet." -
    - - + "No Name and Title Lorem ipsum dolor sit amet, con… takimata sanctus est Lorem ipsum dolor sit amet." + + + -
    - - - - d - - - - - -
    -
    - -
  • - - <div - className="css-1rmdcnr" - /> - - + + d + + + + + + + +
  • +
  • -
    - + + +
    -
    - - " size="1em" viewBox="0 0 24 24" > - ", - } - } - style={ - Object { - "fill": null, - "fontSize": "1em", - } - } + " + size="1em" viewBox="0 0 24 24" - xmlns="http://www.w3.org/2000/svg" - /> - - -
    -
    - + ", + } + } + style={ + Object { + "fill": null, + "fontSize": "1em", + } + } + viewBox="0 0 24 24" + xmlns="http://www.w3.org/2000/svg" + /> + + +
    +
    - " size="1em" viewBox="0 0 24 24" > - ", - } - } - style={ - Object { - "fill": null, - "fontSize": "1em", - } - } + " + size="1em" viewBox="0 0 24 24" - xmlns="http://www.w3.org/2000/svg" - /> - - -
    -
    - + ", + } + } + style={ + Object { + "fill": null, + "fontSize": "1em", + } + } + viewBox="0 0 24 24" + xmlns="http://www.w3.org/2000/svg" + /> + + +
    +
    - " size="1em" viewBox="0 0 24 24" > - ", - } - } - style={ - Object { - "fill": null, - "fontSize": "1em", - } - } + " + size="1em" viewBox="0 0 24 24" - xmlns="http://www.w3.org/2000/svg" - /> - - -
    -
    - + ", + } + } + style={ + Object { + "fill": null, + "fontSize": "1em", + } + } + viewBox="0 0 24 24" + xmlns="http://www.w3.org/2000/svg" + /> + + +
    +
    - " size="1em" viewBox="0 0 24 24" > - ", - } - } - style={ - Object { - "fill": null, - "fontSize": "1em", - } - } + " + size="1em" viewBox="0 0 24 24" - xmlns="http://www.w3.org/2000/svg" - /> - - -
    -
    - + ", + } + } + style={ + Object { + "fill": null, + "fontSize": "1em", + } + } + viewBox="0 0 24 24" + xmlns="http://www.w3.org/2000/svg" + /> + + +
    +
    - " size="1em" viewBox="0 0 24 24" > - ", - } - } - style={ - Object { - "fill": null, - "fontSize": "1em", - } - } + " + size="1em" viewBox="0 0 24 24" - xmlns="http://www.w3.org/2000/svg" - /> - - + > + ", + } + } + style={ + Object { + "fill": null, + "fontSize": "1em", + } + } + viewBox="0 0 24 24" + xmlns="http://www.w3.org/2000/svg" + /> + + +
    -
    -
    - - " size="1em" viewBox="0 0 24 24" > - ", - } - } - style={ - Object { - "fill": null, - "fontSize": "1em", - } - } + " + size="1em" viewBox="0 0 24 24" - xmlns="http://www.w3.org/2000/svg" - /> - - -
    -
    - + ", + } + } + style={ + Object { + "fill": null, + "fontSize": "1em", + } + } + viewBox="0 0 24 24" + xmlns="http://www.w3.org/2000/svg" + /> + + +
    +
    - " size="1em" viewBox="0 0 24 24" > - ", - } - } - style={ - Object { - "fill": null, - "fontSize": "1em", - } - } + " + size="1em" viewBox="0 0 24 24" - xmlns="http://www.w3.org/2000/svg" - /> - - -
    -
    - + ", + } + } + style={ + Object { + "fill": null, + "fontSize": "1em", + } + } + viewBox="0 0 24 24" + xmlns="http://www.w3.org/2000/svg" + /> + + +
    +
    - " size="1em" viewBox="0 0 24 24" > - ", - } - } - style={ - Object { - "fill": null, - "fontSize": "1em", - } - } + " + size="1em" viewBox="0 0 24 24" - xmlns="http://www.w3.org/2000/svg" - /> - - -
    -
    - + ", + } + } + style={ + Object { + "fill": null, + "fontSize": "1em", + } + } + viewBox="0 0 24 24" + xmlns="http://www.w3.org/2000/svg" + /> + + +
    +
    - " size="1em" viewBox="0 0 24 24" > - ", - } - } - style={ - Object { - "fill": null, - "fontSize": "1em", - } - } + " + size="1em" viewBox="0 0 24 24" - xmlns="http://www.w3.org/2000/svg" - /> - - -
    -
    - + ", + } + } + style={ + Object { + "fill": null, + "fontSize": "1em", + } + } + viewBox="0 0 24 24" + xmlns="http://www.w3.org/2000/svg" + /> + + +
    +
    - " size="1em" viewBox="0 0 24 24" > - ", - } - } - style={ - Object { - "fill": null, - "fontSize": "1em", - } - } + " + size="1em" viewBox="0 0 24 24" - xmlns="http://www.w3.org/2000/svg" - /> - - + > + ", + } + } + style={ + Object { + "fill": null, + "fontSize": "1em", + } + } + viewBox="0 0 24 24" + xmlns="http://www.w3.org/2000/svg" + /> + + +
    -
    - - - - -
    +
    + + - "No Name and Title Lorem ipsum dolor sit amet, con… takimata sanctus est Lorem ipsum dolor sit amet." - - - + "No Name and Title Lorem ipsum dolor sit amet, con… takimata sanctus est Lorem ipsum dolor sit amet." + +
    + -
    - - - - d - - - - - -
    -
    -
  • -
  • - - <div - className="css-1rmdcnr" - /> - - + + d + + + + + + + +
  • +
  • -
    - + + +
    -
    - - " size="1em" viewBox="0 0 24 24" > - ", - } - } - style={ - Object { - "fill": null, - "fontSize": "1em", - } - } + " + size="1em" viewBox="0 0 24 24" - xmlns="http://www.w3.org/2000/svg" - /> - - -
    -
    - + ", + } + } + style={ + Object { + "fill": null, + "fontSize": "1em", + } + } + viewBox="0 0 24 24" + xmlns="http://www.w3.org/2000/svg" + /> + + +
    +
    - " size="1em" viewBox="0 0 24 24" > - ", - } - } - style={ - Object { - "fill": null, - "fontSize": "1em", - } - } + " + size="1em" viewBox="0 0 24 24" - xmlns="http://www.w3.org/2000/svg" - /> - - -
    -
    - + ", + } + } + style={ + Object { + "fill": null, + "fontSize": "1em", + } + } + viewBox="0 0 24 24" + xmlns="http://www.w3.org/2000/svg" + /> + + +
    +
    - " size="1em" viewBox="0 0 24 24" > - ", - } - } - style={ - Object { - "fill": null, - "fontSize": "1em", - } - } + " + size="1em" viewBox="0 0 24 24" - xmlns="http://www.w3.org/2000/svg" - /> - - -
    -
    - + ", + } + } + style={ + Object { + "fill": null, + "fontSize": "1em", + } + } + viewBox="0 0 24 24" + xmlns="http://www.w3.org/2000/svg" + /> + + +
    +
    - " size="1em" viewBox="0 0 24 24" > - ", - } - } - style={ - Object { - "fill": null, - "fontSize": "1em", - } - } + " + size="1em" viewBox="0 0 24 24" - xmlns="http://www.w3.org/2000/svg" - /> - - -
    -
    - + ", + } + } + style={ + Object { + "fill": null, + "fontSize": "1em", + } + } + viewBox="0 0 24 24" + xmlns="http://www.w3.org/2000/svg" + /> + + +
    +
    - " size="1em" viewBox="0 0 24 24" > - ", - } - } - style={ - Object { - "fill": null, - "fontSize": "1em", - } - } + " + size="1em" viewBox="0 0 24 24" - xmlns="http://www.w3.org/2000/svg" - /> - - + > + ", + } + } + style={ + Object { + "fill": null, + "fontSize": "1em", + } + } + viewBox="0 0 24 24" + xmlns="http://www.w3.org/2000/svg" + /> + + +
    -
    -
    - - " size="1em" viewBox="0 0 24 24" > - ", - } - } - style={ - Object { - "fill": null, - "fontSize": "1em", - } - } + " + size="1em" viewBox="0 0 24 24" - xmlns="http://www.w3.org/2000/svg" - /> - - -
    -
    - + ", + } + } + style={ + Object { + "fill": null, + "fontSize": "1em", + } + } + viewBox="0 0 24 24" + xmlns="http://www.w3.org/2000/svg" + /> + + +
    +
    - " size="1em" viewBox="0 0 24 24" > - ", - } - } - style={ - Object { - "fill": null, - "fontSize": "1em", - } - } + " + size="1em" viewBox="0 0 24 24" - xmlns="http://www.w3.org/2000/svg" - /> - - -
    -
    - + ", + } + } + style={ + Object { + "fill": null, + "fontSize": "1em", + } + } + viewBox="0 0 24 24" + xmlns="http://www.w3.org/2000/svg" + /> + + +
    +
    - " size="1em" viewBox="0 0 24 24" > - ", - } - } - style={ - Object { - "fill": null, - "fontSize": "1em", - } - } + " + size="1em" viewBox="0 0 24 24" - xmlns="http://www.w3.org/2000/svg" - /> - - -
    -
    - + ", + } + } + style={ + Object { + "fill": null, + "fontSize": "1em", + } + } + viewBox="0 0 24 24" + xmlns="http://www.w3.org/2000/svg" + /> + + +
    +
    - " size="1em" viewBox="0 0 24 24" > - ", - } - } - style={ - Object { - "fill": null, - "fontSize": "1em", - } - } + " + size="1em" viewBox="0 0 24 24" - xmlns="http://www.w3.org/2000/svg" - /> - - -
    -
    - + ", + } + } + style={ + Object { + "fill": null, + "fontSize": "1em", + } + } + viewBox="0 0 24 24" + xmlns="http://www.w3.org/2000/svg" + /> + + +
    +
    - " size="1em" viewBox="0 0 24 24" > - ", - } - } - style={ - Object { - "fill": null, - "fontSize": "1em", - } - } + " + size="1em" viewBox="0 0 24 24" - xmlns="http://www.w3.org/2000/svg" - /> - - + > + ", + } + } + style={ + Object { + "fill": null, + "fontSize": "1em", + } + } + viewBox="0 0 24 24" + xmlns="http://www.w3.org/2000/svg" + /> + + +
    -
    - - - - -
    +
    + + - "No Name and Title Lorem ipsum dolor sit amet, con… takimata sanctus est Lorem ipsum dolor sit amet." - - - + "No Name and Title Lorem ipsum dolor sit amet, con… takimata sanctus est Lorem ipsum dolor sit amet." + +
    + -
    - - - - d - - - - - -
    -
    -
  • -
  • - - <div - className="css-1rmdcnr" - /> - - + + d + + + + + + + +
  • +
  • -
    +
    + + - -
    - - " size="1em" viewBox="0 0 24 24" > - ", - } - } - style={ - Object { - "fill": null, - "fontSize": "1em", - } - } + " + size="1em" viewBox="0 0 24 24" - xmlns="http://www.w3.org/2000/svg" - /> - - -
    -
    - + ", + } + } + style={ + Object { + "fill": null, + "fontSize": "1em", + } + } + viewBox="0 0 24 24" + xmlns="http://www.w3.org/2000/svg" + /> + + +
    +
    - " size="1em" viewBox="0 0 24 24" > - ", - } - } - style={ - Object { - "fill": null, - "fontSize": "1em", - } - } + " + size="1em" viewBox="0 0 24 24" - xmlns="http://www.w3.org/2000/svg" - /> - - -
    -
    - + ", + } + } + style={ + Object { + "fill": null, + "fontSize": "1em", + } + } + viewBox="0 0 24 24" + xmlns="http://www.w3.org/2000/svg" + /> + + +
    +
    - " size="1em" viewBox="0 0 24 24" > - ", - } - } - style={ - Object { - "fill": null, - "fontSize": "1em", - } - } + " + size="1em" viewBox="0 0 24 24" - xmlns="http://www.w3.org/2000/svg" - /> - - -
    -
    - + ", + } + } + style={ + Object { + "fill": null, + "fontSize": "1em", + } + } + viewBox="0 0 24 24" + xmlns="http://www.w3.org/2000/svg" + /> + + +
    +
    - " size="1em" viewBox="0 0 24 24" > - ", - } - } - style={ - Object { - "fill": null, - "fontSize": "1em", - } - } + " + size="1em" viewBox="0 0 24 24" - xmlns="http://www.w3.org/2000/svg" - /> - - -
    -
    - + ", + } + } + style={ + Object { + "fill": null, + "fontSize": "1em", + } + } + viewBox="0 0 24 24" + xmlns="http://www.w3.org/2000/svg" + /> + + +
    +
    - " size="1em" viewBox="0 0 24 24" > - ", - } - } - style={ - Object { - "fill": null, - "fontSize": "1em", - } - } + " + size="1em" viewBox="0 0 24 24" - xmlns="http://www.w3.org/2000/svg" - /> - - + > + ", + } + } + style={ + Object { + "fill": null, + "fontSize": "1em", + } + } + viewBox="0 0 24 24" + xmlns="http://www.w3.org/2000/svg" + /> + + +
    -
    -
    - - " size="1em" viewBox="0 0 24 24" > - ", - } - } - style={ - Object { - "fill": null, - "fontSize": "1em", - } - } + " + size="1em" viewBox="0 0 24 24" - xmlns="http://www.w3.org/2000/svg" - /> - - -
    -
    - + ", + } + } + style={ + Object { + "fill": null, + "fontSize": "1em", + } + } + viewBox="0 0 24 24" + xmlns="http://www.w3.org/2000/svg" + /> + + +
    +
    - " size="1em" viewBox="0 0 24 24" > - ", - } - } - style={ - Object { - "fill": null, - "fontSize": "1em", - } - } + " + size="1em" viewBox="0 0 24 24" - xmlns="http://www.w3.org/2000/svg" - /> - - -
    -
    - + ", + } + } + style={ + Object { + "fill": null, + "fontSize": "1em", + } + } + viewBox="0 0 24 24" + xmlns="http://www.w3.org/2000/svg" + /> + + +
    +
    - " size="1em" viewBox="0 0 24 24" > - ", - } - } - style={ - Object { - "fill": null, - "fontSize": "1em", - } - } + " + size="1em" viewBox="0 0 24 24" - xmlns="http://www.w3.org/2000/svg" - /> - - -
    -
    - + ", + } + } + style={ + Object { + "fill": null, + "fontSize": "1em", + } + } + viewBox="0 0 24 24" + xmlns="http://www.w3.org/2000/svg" + /> + + +
    +
    - " size="1em" viewBox="0 0 24 24" > - ", - } - } - style={ - Object { - "fill": null, - "fontSize": "1em", - } - } + " + size="1em" viewBox="0 0 24 24" - xmlns="http://www.w3.org/2000/svg" - /> - - -
    -
    - + ", + } + } + style={ + Object { + "fill": null, + "fontSize": "1em", + } + } + viewBox="0 0 24 24" + xmlns="http://www.w3.org/2000/svg" + /> + + +
    +
    - " size="1em" viewBox="0 0 24 24" > - ", - } - } - style={ - Object { - "fill": null, - "fontSize": "1em", - } - } + " + size="1em" viewBox="0 0 24 24" - xmlns="http://www.w3.org/2000/svg" - /> - - + > + ", + } + } + style={ + Object { + "fill": null, + "fontSize": "1em", + } + } + viewBox="0 0 24 24" + xmlns="http://www.w3.org/2000/svg" + /> + + +
    -
    - - - - -
    +
    + + - "No Name and Title Lorem ipsum dolor sit amet, con… takimata sanctus est Lorem ipsum dolor sit amet." - - - + "No Name and Title Lorem ipsum dolor sit amet, con… takimata sanctus est Lorem ipsum dolor sit amet." + +
    + -
    - - - - d - - - - - -
    -
    -
  • - - - - + + d + + + + + + +
    + + + + -
    - - - -
    - - + + reviews.button_all + + +
    + + + - - -
    - - - - - -
    - -
    - + + + + + + + + + + + +
    @@ -2151,958 +2165,967 @@ exports[` should render reviews, header, but no all reviews link 1`] ] } > - - -
    + -
    -
    -
    - -
      -
    • - - <div - className="css-1rmdcnr" - /> - - +
      + + +
        +
      • -
        +
        + + - -
        - - " size="1em" viewBox="0 0 24 24" > - ", - } - } - style={ - Object { - "fill": null, - "fontSize": "1em", - } - } + " + size="1em" viewBox="0 0 24 24" - xmlns="http://www.w3.org/2000/svg" - /> - - -
        -
        - + ", + } + } + style={ + Object { + "fill": null, + "fontSize": "1em", + } + } + viewBox="0 0 24 24" + xmlns="http://www.w3.org/2000/svg" + /> + + +
        +
        - " size="1em" viewBox="0 0 24 24" > - ", - } - } - style={ - Object { - "fill": null, - "fontSize": "1em", - } - } + " + size="1em" viewBox="0 0 24 24" - xmlns="http://www.w3.org/2000/svg" - /> - - -
        -
        - + ", + } + } + style={ + Object { + "fill": null, + "fontSize": "1em", + } + } + viewBox="0 0 24 24" + xmlns="http://www.w3.org/2000/svg" + /> + + +
        +
        - " size="1em" viewBox="0 0 24 24" > - ", - } - } - style={ - Object { - "fill": null, - "fontSize": "1em", - } - } + " + size="1em" viewBox="0 0 24 24" - xmlns="http://www.w3.org/2000/svg" - /> - - -
        -
        - + ", + } + } + style={ + Object { + "fill": null, + "fontSize": "1em", + } + } + viewBox="0 0 24 24" + xmlns="http://www.w3.org/2000/svg" + /> + + +
        +
        - " size="1em" viewBox="0 0 24 24" > - ", - } - } - style={ - Object { - "fill": null, - "fontSize": "1em", - } - } + " + size="1em" viewBox="0 0 24 24" - xmlns="http://www.w3.org/2000/svg" - /> - - -
        -
        - + ", + } + } + style={ + Object { + "fill": null, + "fontSize": "1em", + } + } + viewBox="0 0 24 24" + xmlns="http://www.w3.org/2000/svg" + /> + + +
        +
        - " size="1em" viewBox="0 0 24 24" > - ", - } - } - style={ - Object { - "fill": null, - "fontSize": "1em", - } - } + " + size="1em" viewBox="0 0 24 24" - xmlns="http://www.w3.org/2000/svg" - /> - - + > + ", + } + } + style={ + Object { + "fill": null, + "fontSize": "1em", + } + } + viewBox="0 0 24 24" + xmlns="http://www.w3.org/2000/svg" + /> + + +
        -
        -
        - - " size="1em" viewBox="0 0 24 24" > - ", - } - } - style={ - Object { - "fill": null, - "fontSize": "1em", - } - } + " + size="1em" viewBox="0 0 24 24" - xmlns="http://www.w3.org/2000/svg" - /> - - -
        -
        - + ", + } + } + style={ + Object { + "fill": null, + "fontSize": "1em", + } + } + viewBox="0 0 24 24" + xmlns="http://www.w3.org/2000/svg" + /> + + +
        +
        - " size="1em" viewBox="0 0 24 24" > - ", - } - } - style={ - Object { - "fill": null, - "fontSize": "1em", - } - } + " + size="1em" viewBox="0 0 24 24" - xmlns="http://www.w3.org/2000/svg" - /> - - -
        -
        - + ", + } + } + style={ + Object { + "fill": null, + "fontSize": "1em", + } + } + viewBox="0 0 24 24" + xmlns="http://www.w3.org/2000/svg" + /> + + +
        +
        - " size="1em" viewBox="0 0 24 24" > - ", - } - } - style={ - Object { - "fill": null, - "fontSize": "1em", - } - } + " + size="1em" viewBox="0 0 24 24" - xmlns="http://www.w3.org/2000/svg" - /> - - -
        -
        - + ", + } + } + style={ + Object { + "fill": null, + "fontSize": "1em", + } + } + viewBox="0 0 24 24" + xmlns="http://www.w3.org/2000/svg" + /> + + +
        +
        - " size="1em" viewBox="0 0 24 24" > - ", - } - } - style={ - Object { - "fill": null, - "fontSize": "1em", - } - } + " + size="1em" viewBox="0 0 24 24" - xmlns="http://www.w3.org/2000/svg" - /> - - -
        -
        - + ", + } + } + style={ + Object { + "fill": null, + "fontSize": "1em", + } + } + viewBox="0 0 24 24" + xmlns="http://www.w3.org/2000/svg" + /> + + +
        +
        - " size="1em" viewBox="0 0 24 24" > - ", - } - } - style={ - Object { - "fill": null, - "fontSize": "1em", - } - } + " + size="1em" viewBox="0 0 24 24" - xmlns="http://www.w3.org/2000/svg" - /> - - + > + ", + } + } + style={ + Object { + "fill": null, + "fontSize": "1em", + } + } + viewBox="0 0 24 24" + xmlns="http://www.w3.org/2000/svg" + /> + + +
        -
        - -
      -
      - -
      +
      + + - "No Name and Title Lorem ipsum dolor sit amet, con… takimata sanctus est Lorem ipsum dolor sit amet." -
    - - + "No Name and Title Lorem ipsum dolor sit amet, con… takimata sanctus est Lorem ipsum dolor sit amet." + + + -
    - - - - d - - - - - -
    -
    - -
  • - - <div - className="css-1rmdcnr" - /> - - + + d + + + + + + + +
  • +
  • -
    +
    + + - -
    - - " size="1em" viewBox="0 0 24 24" > - ", - } - } - style={ - Object { - "fill": null, - "fontSize": "1em", - } - } + " + size="1em" viewBox="0 0 24 24" - xmlns="http://www.w3.org/2000/svg" - /> - - -
    -
    - + ", + } + } + style={ + Object { + "fill": null, + "fontSize": "1em", + } + } + viewBox="0 0 24 24" + xmlns="http://www.w3.org/2000/svg" + /> + + +
    +
    - " size="1em" viewBox="0 0 24 24" > - ", - } - } - style={ - Object { - "fill": null, - "fontSize": "1em", - } - } + " + size="1em" viewBox="0 0 24 24" - xmlns="http://www.w3.org/2000/svg" - /> - - -
    -
    - + ", + } + } + style={ + Object { + "fill": null, + "fontSize": "1em", + } + } + viewBox="0 0 24 24" + xmlns="http://www.w3.org/2000/svg" + /> + + +
    +
    - " size="1em" viewBox="0 0 24 24" > - ", - } - } - style={ - Object { - "fill": null, - "fontSize": "1em", - } - } + " + size="1em" viewBox="0 0 24 24" - xmlns="http://www.w3.org/2000/svg" - /> - - -
    -
    - + ", + } + } + style={ + Object { + "fill": null, + "fontSize": "1em", + } + } + viewBox="0 0 24 24" + xmlns="http://www.w3.org/2000/svg" + /> + + +
    +
    - " size="1em" viewBox="0 0 24 24" > - ", - } - } - style={ - Object { - "fill": null, - "fontSize": "1em", - } - } + " + size="1em" viewBox="0 0 24 24" - xmlns="http://www.w3.org/2000/svg" - /> - - -
    -
    - + ", + } + } + style={ + Object { + "fill": null, + "fontSize": "1em", + } + } + viewBox="0 0 24 24" + xmlns="http://www.w3.org/2000/svg" + /> + + +
    +
    - " size="1em" viewBox="0 0 24 24" > - ", - } - } - style={ - Object { - "fill": null, - "fontSize": "1em", - } - } + " + size="1em" viewBox="0 0 24 24" - xmlns="http://www.w3.org/2000/svg" - /> - - + > + ", + } + } + style={ + Object { + "fill": null, + "fontSize": "1em", + } + } + viewBox="0 0 24 24" + xmlns="http://www.w3.org/2000/svg" + /> + + +
    -
    -
    - - " size="1em" viewBox="0 0 24 24" > - ", - } - } - style={ - Object { - "fill": null, - "fontSize": "1em", - } - } + " + size="1em" viewBox="0 0 24 24" - xmlns="http://www.w3.org/2000/svg" - /> - - -
    -
    - + ", + } + } + style={ + Object { + "fill": null, + "fontSize": "1em", + } + } + viewBox="0 0 24 24" + xmlns="http://www.w3.org/2000/svg" + /> + + +
    +
    - " size="1em" viewBox="0 0 24 24" > - ", - } - } - style={ - Object { - "fill": null, - "fontSize": "1em", - } - } + " + size="1em" viewBox="0 0 24 24" - xmlns="http://www.w3.org/2000/svg" - /> - - -
    -
    - + ", + } + } + style={ + Object { + "fill": null, + "fontSize": "1em", + } + } + viewBox="0 0 24 24" + xmlns="http://www.w3.org/2000/svg" + /> + + +
    +
    - " size="1em" viewBox="0 0 24 24" > - ", - } - } - style={ - Object { - "fill": null, - "fontSize": "1em", - } - } + " + size="1em" viewBox="0 0 24 24" - xmlns="http://www.w3.org/2000/svg" - /> - - -
    -
    - + ", + } + } + style={ + Object { + "fill": null, + "fontSize": "1em", + } + } + viewBox="0 0 24 24" + xmlns="http://www.w3.org/2000/svg" + /> + + +
    +
    - " size="1em" viewBox="0 0 24 24" > - ", - } - } - style={ - Object { - "fill": null, - "fontSize": "1em", - } - } + " + size="1em" viewBox="0 0 24 24" - xmlns="http://www.w3.org/2000/svg" - /> - - -
    -
    - + ", + } + } + style={ + Object { + "fill": null, + "fontSize": "1em", + } + } + viewBox="0 0 24 24" + xmlns="http://www.w3.org/2000/svg" + /> + + +
    +
    - " size="1em" viewBox="0 0 24 24" > - ", - } - } - style={ - Object { - "fill": null, - "fontSize": "1em", - } - } + " + size="1em" viewBox="0 0 24 24" - xmlns="http://www.w3.org/2000/svg" - /> - - + > + ", + } + } + style={ + Object { + "fill": null, + "fontSize": "1em", + } + } + viewBox="0 0 24 24" + xmlns="http://www.w3.org/2000/svg" + /> + + +
    -
    - - - - -
    +
    + + - "No Name and Title Lorem ipsum dolor sit amet, con… takimata sanctus est Lorem ipsum dolor sit amet." - - - + "No Name and Title Lorem ipsum dolor sit amet, con… takimata sanctus est Lorem ipsum dolor sit amet." + +
    + -
    - - - - d - - - - - -
    -
    -
  • - - - - + + d + + + + + + +
    + + + + - - -
    - + > + + + + + +
    @@ -3129,42 +3152,51 @@ exports[` should render when no reviews and rating given 1`] = ` productId="foo" reviews={null} > - - -
    + -
    -
    -
    - - - +
    + + - -
    -
    - + + + +
    +
    + +
    diff --git a/themes/theme-ios11/pages/Product/components/Content/spec.jsx b/themes/theme-ios11/pages/Product/components/Content/spec.jsx index 67e39d826c..139b2f96f2 100644 --- a/themes/theme-ios11/pages/Product/components/Content/spec.jsx +++ b/themes/theme-ios11/pages/Product/components/Content/spec.jsx @@ -5,9 +5,11 @@ import Content from './index'; jest.mock('@shopgate/engage/a11y', () => ({ Section: () => null, })); + jest.mock('@shopgate/engage/product', () => ({ ProductProperties: () => null, RelationsSlider: () => null, + Description: () => null, })); jest.mock('@shopgate/pwa-core', () => ({ @@ -20,7 +22,6 @@ jest.mock('../Media', () => () => null); jest.mock('../Header', () => () => null); jest.mock('../Characteristics', () => () => null); jest.mock('../Options', () => () => null); -jest.mock('../Description', () => () => null); jest.mock('../AppBar', () => () => null); jest.mock('../AddToCartBar', () => () => null); jest.mock('Components/Reviews', () => () => null); From 850ea977a7182f36276b2f8c3484f3ba90c883da Mon Sep 17 00:00:00 2001 From: devbucket Date: Fri, 11 Oct 2019 09:16:24 +0200 Subject: [PATCH 6/7] PWA-2250 Fixed range slider snapshots. --- .../common/components/RangeSlider/__snapshots__/spec.jsx.snap | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libraries/common/components/RangeSlider/__snapshots__/spec.jsx.snap b/libraries/common/components/RangeSlider/__snapshots__/spec.jsx.snap index 38558e30dd..23ffb0cb50 100644 --- a/libraries/common/components/RangeSlider/__snapshots__/spec.jsx.snap +++ b/libraries/common/components/RangeSlider/__snapshots__/spec.jsx.snap @@ -28,7 +28,7 @@ exports[` emits onChange if handle was touched (exponential) 1`] className=" css-10eto0a" style={ Object { - "left": "1.000000000000002e-198%", + "left": "1.0000000000000008e-198%", "right": "100%", "transition": null, } From 0a666f45b7d118d177fab31237442f3971331c47 Mon Sep 17 00:00:00 2001 From: devbucket Date: Fri, 11 Oct 2019 11:21:08 +0200 Subject: [PATCH 7/7] PWA-2250 Enabled caching in babel config. --- Makefile | 1 + babel.config.js | 2 +- themes/theme-gmd/babel.config.js | 2 +- themes/theme-ios11/babel.config.js | 2 +- 4 files changed, 4 insertions(+), 3 deletions(-) diff --git a/Makefile b/Makefile index 9aa91cc528..6ab87d1bb2 100644 --- a/Makefile +++ b/Makefile @@ -149,6 +149,7 @@ clean: find . -name "*debug.log" -type f -delete; lerna clean --yes; rm -rf ./node_modules/; + rm -rf ./.cache-loader/; node ./scripts/init-subtrees.js; lerna bootstrap; diff --git a/babel.config.js b/babel.config.js index 0fde6665f2..9d97a14978 100644 --- a/babel.config.js +++ b/babel.config.js @@ -1,5 +1,5 @@ module.exports = (api) => { - api.cache(api.env('test')); + api.cache(true); return { extends: './themes/theme-gmd/babel.config.js', diff --git a/themes/theme-gmd/babel.config.js b/themes/theme-gmd/babel.config.js index d158e45bd0..79f6c6f21c 100644 --- a/themes/theme-gmd/babel.config.js +++ b/themes/theme-gmd/babel.config.js @@ -1,5 +1,5 @@ module.exports = (api) => { - api.cache(false); + api.cache(true); return { compact: true, diff --git a/themes/theme-ios11/babel.config.js b/themes/theme-ios11/babel.config.js index d158e45bd0..79f6c6f21c 100644 --- a/themes/theme-ios11/babel.config.js +++ b/themes/theme-ios11/babel.config.js @@ -1,5 +1,5 @@ module.exports = (api) => { - api.cache(false); + api.cache(true); return { compact: true,