{"version":3,"sources":["webpack:///./src/frontend/components/carousels/view-item-carousel/index.js","webpack:///./src/EbaySweden.TouchWeb/static/script/components/modals/simple-modal.jsx","webpack:///./src/frontend/components/quick-view/quick-view-modal.jsx","webpack:///./src/frontend/components/quick-view/module.js","webpack:///./src/frontend/components/carousels/arrows.jsx","webpack:///./src/frontend/components/carousels/basic/basic.jsx","webpack:///./src/frontend/components/carousels/view-item-carousel/view-item-video.module.scss","webpack:///./src/frontend/components/carousels/view-item-carousel/view-item-video.jsx","webpack:///./src/EbaySweden.TouchWeb/static/script/components/modals/image-gallery-modal/image-gallery-modal.jsx","webpack:///./src/frontend/components/carousels/view-item-carousel/view-item-image.jsx","webpack:///./src/frontend/components/carousels/view-item-carousel/view-item-carousel-zoom.jsx"],"names":["SimpleModal","children","className","classNameBody","closeModalCallback","style","styleBody","closeOnEscape","useCallback","e","keyCode","preventDefault","useEffect","window","addEventListener","removeEventListener","allowPinchZoom","forwardProps","role","propTypes","defaultProps","QuickView","dispatch","itemIds","open","isLoggedIn","item","currentItem","loading","existsInWishList","toLocalizedUrl","useUrlLocalizer","t","useTranslator","imageFormats","shortDescription","url","handleModalDismiss","uiActions","closeQuickView","disableNext","indexOf","length","disablePrev","mediaQuery","minWidth","onDismiss","onKeyDown","prevItem","nextItem","openQuickView","itemId","openedFrom","top","right","zIndex","onClick","images","pageType","fixedHeight","carouselStyle","width","itemActions","wishlist","href","GtmService","trackAction","bottom","left","connect","state","ui","quickView","member","items","cache","wishListItemIds","includes","warnIfDevBuild","El","document","querySelectorAll","render","logger","mountQuickView","NextArrow","props","arrowClassName","display","PreviousArrow","BasicCarousel","React","Component","next","this","slider","slickNext","previous","slickPrev","goTo","imageIndex","slickGoTo","settings","actionButtons","defaults","dots","dotsClass","nextArrow","prevArrow","infinite","speed","slidesToShow","slidesToScroll","lazyLoad","ref","c","ViewItemVideo","autoPlay","playsInline","controls","loop","muted","image","isInView","normal","video","videoRef","useRef","current","play","pause","styles","poster","type","src","ImageGalleryModal","initialSlideIndex","isVideoEnabled","rest","carouselRef","closeButtonRef","isMobileDevice","useSelector","environment","useState","activeSlideIndex","setActiveSlideIndex","handleCloseModalClick","event","stopPropagation","stopClickEventsFromImage","navigate","focus","initialSlide","adaptiveHeight","fade","useCss","useTransform","responsive","breakpoint","BREAKPOINT_SIZES","BREAKPOINTS","MD","min","arrows","afterChange","index","map","key","alt","title","ViewItemImage","constructor","super","imageContainer","createRef","zoomImage","bounds","hover","zoomImageLargeEnough","handleMouseHover","hoverState","setState","prevState","handleMouseMove","getBounds","containerWidth","containerHeight","zoomImageWidth","zoomImageHeight","widthDiff","heightDiff","widthRatio","nativeEvent","offsetX","heightRatio","offsetY","translateXValue","translateYValue","transform","zoomImageElement","getBoundingClientRect","height","enableZoom","handleZoomClick","smallFit","mediumFit","largeFit","srcSet","sizes","maxWidth","SM","max","onMouseMove","onMouseLeave","ViewItemCarouselZoom","showZoomModal","basicCarousel","id","onMouseUp","customPaging","imageThumbnail","multiThumbnail","onMouseOver","accessibility","i"],"mappings":"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","file":"script/chunks/chunk.quick-view.52b27d073d.js","sourcesContent":["export { default as ViewItemCarouselZoom } from './view-item-carousel-zoom';\n","import React, { useEffect, useCallback } from 'react';\nimport PropType from 'prop-types';\nimport { RemoveScroll } from 'react-remove-scroll';\nimport './modal.scss';\n\nconst SimpleModal = ({\n children,\n className,\n classNameBody,\n closeModalCallback,\n style,\n styleBody\n}) => {\n const closeOnEscape = useCallback(\n e => {\n if (e.keyCode === 27) {\n e.preventDefault();\n closeModalCallback(e);\n }\n },\n [closeModalCallback]\n );\n\n useEffect(() => {\n window.addEventListener('keydown', closeOnEscape);\n return () => {\n window.removeEventListener('keydown', closeOnEscape);\n };\n }, [closeOnEscape]);\n\n return (\n \n \n \n {children}\n \n \n \n );\n};\n\nSimpleModal.propTypes = {\n children: PropType.node.isRequired,\n className: PropType.string,\n classNameBody: PropType.string,\n closeModalCallback: PropType.func.isRequired,\n style: PropType.object,\n styleBody: PropType.object\n};\nSimpleModal.defaultProps = {\n className: '',\n classNameBody: '',\n style: {},\n styleBody: {}\n};\n\nexport default SimpleModal;\n","import React from 'react';\nimport { connect } from 'react-redux';\nimport PropTypes from 'prop-types';\nimport { useUrlLocalizer, useTranslator } from 'tradera-lang/translate';\nimport GtmService from 'static/script/app/ui/google-tagmanager-service';\nimport { ViewItemCarouselZoom } from 'tradera-components/carousels/view-item-carousel';\nimport { LocalLoader } from 'tradera-components/loader';\nimport HeartIcon from '@tradera/blueprint/theme/icons2/heart.svg?jsx';\nimport HeartFillIcon from '@tradera/blueprint/theme/icons2/heart-fill.svg?jsx';\nimport CloseIcon from '@tradera/blueprint/theme/icons2/close.svg?jsx';\n\nimport uiActions from 'tradera-state/ui/actions';\nimport itemActions from 'tradera-state/items/actions';\n\nimport './quick-view-modal.scss';\nimport DialogModal from 'tradera-components/dialog/dialog-modal';\n\nconst QuickView = ({\n dispatch,\n itemIds,\n open,\n isLoggedIn,\n item,\n currentItem,\n loading,\n existsInWishList\n}) => {\n const { toLocalizedUrl } = useUrlLocalizer();\n const { t } = useTranslator();\n\n if (open !== 'open') {\n return null;\n }\n\n const { imageFormats, shortDescription, url } = item;\n\n const handleModalDismiss = () => {\n dispatch(uiActions.closeQuickView());\n };\n\n const handleWishlistClick = () => {\n if (!isLoggedIn) {\n handleModalDismiss();\n }\n dispatch(itemActions.wishlist(item.itemId));\n };\n\n const handlePreviousClick = () => {\n const prevItem = itemIds[itemIds.indexOf(currentItem) - 1];\n dispatch(\n uiActions.openQuickView({\n itemId: prevItem,\n openedFrom: 'Quick View'\n })\n );\n };\n\n const handleNextClick = () => {\n const nextItem = itemIds[itemIds.indexOf(currentItem) + 1];\n dispatch(\n uiActions.openQuickView({\n itemId: nextItem,\n openedFrom: 'Quick View'\n })\n );\n };\n\n const disableNext = itemIds.indexOf(currentItem) === itemIds.length - 1;\n const disablePrev = itemIds.indexOf(currentItem) < 1;\n\n return (\n \n {\n if (e.keyCode === 39 && !disableNext) {\n handleNextClick();\n } else if (e.keyCode === 37 && !disablePrev) {\n handlePreviousClick();\n }\n }}>\n \n handleModalDismiss()}>\n \n \n \n
\n {!imageFormats ? (\n
\n \n
\n ) : (\n \n )}\n
\n
\n
\n

\n {shortDescription}\n

\n
\n
\n
\n
\n handleWishlistClick()}>\n {existsInWishList ? (\n \n ) : (\n \n )}\n {existsInWishList\n ? t('mytQuickView_savedInWishlist')\n : t('mytQuickView_saveInWishlist')}\n \n {\n GtmService.trackAction(\n 'Quick View',\n 'Navigation',\n 'View full listing'\n );\n }}>\n {t('mytQuickView_viewFullListing')}\n \n
\n
\n \n {loading && (\n \n \n \n )}\n \n );\n};\n\nQuickView.propTypes = {\n itemIds: PropTypes.array.isRequired,\n open: PropTypes.string,\n item: PropTypes.object,\n currentItem: PropTypes.number,\n dispatch: PropTypes.func,\n loading: PropTypes.bool,\n existsInWishList: PropTypes.bool\n};\n\nconst mapStateToProps = state => ({\n itemIds: state.ui.quickView.itemIds,\n open: state.ui.quickView.open,\n isLoggedIn: state.member.isLoggedIn,\n item: state.items.cache[state.ui.quickView.currentItem] || null,\n currentItem: state.ui.quickView.currentItem,\n loading: state.ui.quickView.loading,\n existsInWishList: state.items.wishListItemIds.includes(\n state.ui.quickView.currentItem\n )\n});\n\nexport default connect(mapStateToProps)(QuickView);\n","import { render } from 'react-dom';\nimport React from 'react';\n\nimport { ProviderWithGlobalStore } from 'tradera-state/configure-store';\nimport { warnIfDevBuild } from 'utils/environment';\nimport { logger } from 'packages';\nimport QuickView from './quick-view-modal';\nimport './quick-view-modal.scss';\n\nwarnIfDevBuild('quick-view');\n\nconst mountQuickView = El => {\n if (El) {\n try {\n render(\n \n \n ,\n El\n );\n } catch (e) {\n logger(e);\n }\n }\n};\nexport default () => {\n const El = Array.from(document.querySelectorAll('#quick-view'));\n if (El) {\n mountQuickView(El[0]);\n }\n};\n","import React from 'react';\nimport ArrowLeftIcon from '@tradera/blueprint/theme/icons2/arrow-left.svg?jsx';\nimport ArrowRightIcon from '@tradera/blueprint/theme/icons2/arrow-right.svg?jsx';\n\nexport const NextArrow = props => {\n const { className, arrowClassName = '', style, onClick } = props;\n return (\n {\n onClick();\n }}>\n \n {\n onClick();\n }}\n />\n \n );\n};\nexport const PreviousArrow = props => {\n const { className, arrowClassName = '', style, onClick } = props;\n return (\n {\n onClick();\n }}>\n \n {\n onClick();\n }}\n />\n \n );\n};\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport Slider from 'react-slick';\nimport { NextArrow, PreviousArrow } from '../arrows';\nimport './basic.scss';\n\n/**\n * BasicCarousel\n * Usage:\n * loopThroughSlides()} />\n */\nclass BasicCarousel extends React.Component {\n next() {\n if (this.slider) {\n this.slider.slickNext();\n }\n }\n\n previous() {\n if (this.slider) {\n this.slider.slickPrev();\n }\n }\n\n goTo(imageIndex) {\n if (this.slider) {\n const skipAnimation = true;\n this.slider.slickGoTo(imageIndex, skipAnimation);\n }\n }\n\n render() {\n const {\n render,\n pageType = '',\n settings,\n className,\n arrowClassName,\n children,\n actionButtons\n } = this.props;\n const defaults = {\n dots: true,\n dotsClass: 'slick-dots slick-thumb mb-1 mb-md-2',\n nextArrow: (\n \n ),\n prevArrow: (\n \n ),\n infinite: true,\n speed: 500,\n slidesToShow: 1,\n slidesToScroll: 1,\n lazyLoad: true,\n ...settings\n };\n\n return (\n \n (this.slider = c)} {...defaults}>\n {render ? render() : children}\n \n {actionButtons}\n \n );\n }\n}\n\nBasicCarousel.propTypes = {\n className: PropTypes.string,\n settings: PropTypes.object,\n render: PropTypes.func,\n pageType: PropTypes.string\n};\n\nexport default BasicCarousel;\n","// extracted by mini-css-extract-plugin\nexport default {\"view-item-video\":\"view-item-video--1f-Fp\",\"viewItemVideo\":\"view-item-video--1f-Fp\"};","import React, { useEffect, useRef } from 'react';\nimport styles from './view-item-video.module.scss';\n\nexport const ViewItemVideo = ({\n className,\n autoPlay,\n playsInline,\n controls,\n loop,\n muted,\n image,\n isInView\n}) => {\n const { normal, video } = image;\n\n const videoRef = useRef(null);\n\n useEffect(() => {\n const video = videoRef.current;\n if (isInView) {\n video.play();\n } else {\n video.pause();\n }\n }, [isInView]);\n\n return (\n \n \n \n );\n};\n\nViewItemVideo.defaultProps = {\n className: '',\n autoPlay: true,\n playsInline: true,\n muted: true,\n loop: true,\n controls: false\n};\n","import React, { useCallback, useEffect, useRef, useState } from 'react';\nimport PropTypes from 'prop-types';\nimport { useSelector } from 'react-redux';\nimport { useTranslator } from 'tradera-lang/translate';\nimport SimpleModal from 'components/modals/simple-modal';\nimport { BasicCarousel } from 'tradera-components/carousels/basic';\nimport { BREAKPOINT_SIZES, BREAKPOINTS } from 'tradera-constants/breakpoints';\nimport CloseIcon from '@tradera/blueprint/theme/icons2/close.svg?jsx';\nimport { ViewItemVideo } from 'tradera-components/carousels/view-item-carousel/view-item-video';\nimport './image-gallery-modal.scss';\n\nconst ImageGalleryModal = props => {\n const {\n images,\n initialSlideIndex,\n closeModalCallback,\n isVideoEnabled,\n ...rest\n } = props;\n\n const { t } = useTranslator();\n const carouselRef = useRef(null);\n const closeButtonRef = useRef(null);\n\n const environment = useSelector(state => state.environment);\n\n const { isMobileDevice } = environment;\n\n const [activeSlideIndex, setActiveSlideIndex] = useState(initialSlideIndex);\n\n const handleCloseModalClick = event => {\n event.stopPropagation();\n closeModalCallback();\n };\n\n const stopClickEventPropagationFromCarousel = event =>\n event.stopPropagation();\n\n const stopClickEventsFromImage = event => event.stopPropagation();\n\n const navigate = useCallback(e => {\n if (e.keyCode === 37) {\n // left\n carouselRef.current.previous();\n e.preventDefault();\n } else if (e.keyCode === 39) {\n // right\n carouselRef.current.next();\n e.preventDefault();\n }\n }, []);\n\n useEffect(() => {\n closeButtonRef.current.focus();\n window.addEventListener('keydown', navigate);\n return () => {\n window.removeEventListener('keydown', navigate);\n };\n }, [navigate]);\n\n const settings = {\n initialSlide: initialSlideIndex,\n adaptiveHeight: true,\n lazyLoad: 'progressive',\n fade: !isMobileDevice,\n useCss: false,\n useTransform: false,\n responsive: [\n {\n breakpoint: BREAKPOINT_SIZES[BREAKPOINTS.MD].min,\n settings: {\n arrows: false\n }\n }\n ],\n afterChange: index => {\n setActiveSlideIndex(index);\n }\n };\n\n return (\n \n
\n \n images.map((image, index) => (\n \n \n {isVideoEnabled && image.video ? (\n \n ) : (\n \n )}\n
\n \n ))\n }\n />\n \n \n \n \n \n );\n};\n\nImageGalleryModal.propTypes = {\n images: PropTypes.array.isRequired,\n initialSlideIndex: PropTypes.number\n};\nImageGalleryModal.defaultProps = {\n initialSlideIndex: 0\n};\n\nexport { ImageGalleryModal };\n","import React, { Component } from 'react';\nimport PropTypes from 'prop-types';\nimport MediaQuery from 'react-responsive';\nimport { BREAKPOINTS, BREAKPOINT_SIZES } from 'tradera-utils/breakpoints';\n\nclass ViewItemImage extends Component {\n constructor(props) {\n super(props);\n\n this.imageContainer = React.createRef();\n this.zoomImage = React.createRef();\n\n this.bounds = null;\n\n this.state = {\n hover: false,\n zoomImageLargeEnough: true\n };\n }\n\n static defaultProps = {\n enableZoom: false\n };\n\n handleMouseHover(hoverState) {\n this.setState(prevState => ({\n ...prevState,\n hover: hoverState\n }));\n }\n\n handleMouseMove(e) {\n // this check is here because the mobile version does not have a zoomImageElement in the DOM.\n if (this.zoomImage.current === null) {\n return;\n }\n const {\n containerWidth,\n containerHeight,\n zoomImageWidth,\n zoomImageHeight,\n widthDiff,\n heightDiff\n } = this.getBounds();\n\n const zoomImageLargeEnough = widthDiff > 0 || heightDiff > 0;\n this.setState({\n zoomImageLargeEnough\n });\n\n if (!zoomImageLargeEnough) {\n return;\n }\n\n const widthRatio = e.nativeEvent.offsetX / containerWidth;\n const heightRatio = e.nativeEvent.offsetY / containerHeight;\n\n const translateXValue =\n widthDiff > 0\n ? widthRatio * widthDiff\n : zoomImageWidth / 2 - containerWidth / 2;\n const translateYValue =\n heightDiff > 0\n ? heightRatio * heightDiff\n : zoomImageHeight / 2 - containerHeight / 2;\n\n const zoomImageElement = this.zoomImage.current;\n zoomImageElement.style.transform = `translate(${-translateXValue}px,\n ${-translateYValue}px)`;\n\n this.handleMouseHover(true);\n }\n\n getBounds() {\n if (this.bounds) {\n return this.bounds;\n }\n\n const zoomImageElement = this.zoomImage.current;\n const imageContainerElement = this.imageContainer.current;\n\n const {\n width: containerWidth,\n height: containerHeight\n } = imageContainerElement.getBoundingClientRect();\n const {\n width: zoomImageWidth,\n height: zoomImageHeight\n } = zoomImageElement.getBoundingClientRect();\n\n const widthDiff = zoomImageWidth - containerWidth;\n const heightDiff = zoomImageHeight - containerHeight;\n\n if (zoomImageWidth <= 0 || zoomImageHeight <= 0) {\n return {};\n }\n this.bounds = {\n containerWidth,\n containerHeight,\n zoomImageWidth,\n zoomImageHeight,\n widthDiff,\n heightDiff\n };\n\n return this.bounds;\n }\n\n render() {\n const { image, enableZoom, handleZoomClick } = this.props;\n const { hover, zoomImageLargeEnough } = this.state;\n const { alt, normal, smallFit, mediumFit, largeFit } = image;\n return (\n \n \n \n \n \n \n \n \n {\n this.handleMouseMove(e);\n }}\n onMouseLeave={() => this.handleMouseHover(false)}\n />\n \n );\n }\n}\n\nViewItemImage.propTypes = {\n image: PropTypes.shape({\n alt: PropTypes.string.isRequired,\n normal: PropTypes.string.isRequired,\n medium: PropTypes.string.isRequired\n }).isRequired,\n enableZoom: PropTypes.bool,\n handleZoomClick: PropTypes.func\n};\n\nexport default ViewItemImage;\n","import React from 'react';\nimport PropTypes from 'prop-types';\n\nimport { BREAKPOINTS, BREAKPOINT_SIZES } from 'tradera-utils/breakpoints';\nimport { BasicCarousel } from '../basic';\nimport { ImageGalleryModal } from 'components/modals/image-gallery-modal/image-gallery-modal';\nimport ViewItemImage from './view-item-image';\nimport { ViewItemVideo } from './view-item-video';\nimport './view-item-carousel.scss';\nimport './cursor.scss';\n\nclass ViewItemCarouselZoom extends React.Component {\n static propTypes = {\n carouselStyle: PropTypes.object,\n className: PropTypes.string,\n enableZoom: PropTypes.bool,\n fixedHeight: PropTypes.bool,\n id: PropTypes.string,\n images: PropTypes.array.isRequired,\n pageType: PropTypes.string,\n actionButtons: PropTypes.object,\n isVideoEnabled: PropTypes.bool\n };\n\n static defaultProps = {\n carouselStyle: {},\n className: '',\n id: '',\n enableZoom: false,\n fixedHeight: true\n };\n\n state = {\n showZoomModal: false,\n activeSlideIndex: 0\n };\n\n constructor(props) {\n super(props);\n this.basicCarousel = React.createRef();\n }\n\n render() {\n const {\n carouselStyle,\n className,\n enableZoom,\n fixedHeight,\n id,\n images,\n actionButtons,\n isVideoEnabled,\n ...rest\n } = this.props;\n const { showZoomModal, activeSlideIndex } = this.state;\n\n const onMouseUp = () => {\n if (enableZoom) {\n this.setState({\n showZoomModal: true\n });\n }\n };\n\n const settings = {\n customPaging: imageIndex => {\n const imageThumbnail = images[imageIndex].video\n ? images[imageIndex].normal\n : images[imageIndex].multiThumbnail;\n return (\n \n this.basicCarousel.current.goTo(imageIndex)\n }>\n \n
\n
\n );\n },\n afterChange: index => {\n this.setState({ activeSlideIndex: index });\n },\n initialSlide: activeSlideIndex,\n accessibility: false,\n responsive: [\n {\n breakpoint: BREAKPOINT_SIZES[BREAKPOINTS.MD].min,\n settings: {\n customPaging: function(i) {\n return ;\n }\n }\n }\n ]\n };\n\n return (\n
\n \n {images.map((image, index) => {\n if (isVideoEnabled && image.video) {\n return (\n {\n if (enableZoom) {\n this.setState({\n showZoomModal: true\n });\n }\n }}>\n \n
\n );\n } else {\n return (\n {\n if (enableZoom) {\n this.setState({\n showZoomModal: true\n });\n }\n }}\n />\n );\n }\n })}\n
\n {enableZoom && showZoomModal && (\n {\n this.setState({ showZoomModal: false });\n }}\n images={images}\n isVideoEnabled={isVideoEnabled}\n />\n )}\n \n );\n }\n}\n\nexport default ViewItemCarouselZoom;\n"],"sourceRoot":""}