{"version":3,"file":"src_components_modules_reviews_ProductReview_jsx.js","mappings":"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","sources":["webpack://ecommerce/./src/components/modules/reviews/ProductReview.jsx","webpack://ecommerce/./src/deferredImagesLoader.js"],"sourcesContent":["require('flickity-fullscreen');\r\nimport React, { useState, useRef, useEffect } from 'react';\r\nimport Flickity from 'react-flickity-component';\r\nimport { isEmpty, isNil, map } from 'lodash';\r\nimport Globalizer from '../../../globalizer';\r\nimport common from '../../../common/common';\r\nimport translateService from '../../../common/translateService';\r\nimport {\r\n userVoteYes,\r\n userVoteNo,\r\n reportAbuse,\r\n} from '../../../services/reviews/reviewsService';\r\nimport {\r\n toggleNextElementVisibility,\r\n handleAbuseTypeChange,\r\n} from '../../../services/product/productInteraction';\r\nimport ReviewStars from './ReviewStars.jsx';\r\nimport ProductFullScreenHandler from '../products/ProductFullScreenHandler.jsx';\r\nimport deferredImagesLoader from '../../../deferredImagesLoader';\r\n\r\nconst ProductReview = ({ review, isAuthenticated, isMobile, slug }) => {\r\n Globalizer.init();\r\n const reviewRef = useRef(null);\r\n const flktyHtmlRef = useRef(null);\r\n const reportAbuseFormRef = useRef(null);\r\n const [reviewState, setReviewState] = useState(review);\r\n const [flktyRef, setFlktyRef] = useState();\r\n const [abuseType, setAbuseType] = useState('');\r\n const [fullScreenActive, setFullScreenActive] = useState(false);\r\n const [indexZoom, setIndexZoom] = useState(0);\r\n\r\n useEffect(() => {\r\n setReviewState(review);\r\n\r\n deferredImagesLoader.observeReviewGallery({\r\n element: reviewRef.current,\r\n cb: (imageToLazyLoad) => {\r\n if (imageToLazyLoad) {\r\n setReviewState({ ...review, renderImages: true });\r\n }\r\n },\r\n });\r\n }, [review]);\r\n\r\n const handleRadioButtonClick = (e) => {\r\n handleAbuseTypeChange(e, reportAbuseFormRef);\r\n const type = e.currentTarget.value;\r\n setAbuseType(type);\r\n };\r\n\r\n async function handleReviewIsUseful() {\r\n if (!isAuthenticated) {\r\n window.location = common.getSiteUrl(\r\n `${\r\n window.$pathBase\r\n }Account/LogOn?returnUrl=${encodeURIComponent(\r\n window.$pathBase + slug + window.location.search\r\n )}`\r\n );\r\n return;\r\n }\r\n if (isAuthenticated && !reviewState.userAlreadyVotedForUseful) {\r\n const result = await userVoteYes(reviewState.id, slug);\r\n if (result.isSuccess) {\r\n setReviewState((prevState) => {\r\n const uselessCount = prevState.userAlreadyVotedForUseless\r\n ? prevState.uselessCount - 1\r\n : prevState.uselessCount;\r\n const usefulCount = prevState.usefulCount + 1;\r\n\r\n return {\r\n ...prevState,\r\n userAlreadyVotedForUseful: true,\r\n userAlreadyVotedForUseless: false,\r\n usefulCount: usefulCount,\r\n uselessCount: uselessCount,\r\n };\r\n });\r\n }\r\n }\r\n }\r\n\r\n async function handleReviewIsUseless() {\r\n if (!isAuthenticated) {\r\n window.location = common.getSiteUrl(\r\n `${\r\n window.$pathBase\r\n }Account/LogOn?returnUrl=${encodeURIComponent(\r\n window.$pathBase + slug + window.location.search\r\n )}`\r\n );\r\n return;\r\n }\r\n if (isAuthenticated && !reviewState.userAlreadyVotedForUseless) {\r\n const result = await userVoteNo(reviewState.id, slug);\r\n if (result.isSuccess) {\r\n setReviewState((prevState) => {\r\n const usefulCount = prevState.userAlreadyVotedForUseful\r\n ? prevState.usefulCount - 1\r\n : prevState.usefulCount;\r\n const uselessCount = prevState.uselessCount + 1;\r\n\r\n return {\r\n ...prevState,\r\n userAlreadyVotedForUseful: false,\r\n userAlreadyVotedForUseless: true,\r\n usefulCount: usefulCount,\r\n uselessCount: uselessCount,\r\n };\r\n });\r\n }\r\n }\r\n }\r\n\r\n async function handleSendReportAbuse() {\r\n const result = await reportAbuse(reviewState.id, slug, abuseType);\r\n\r\n if (result.isSuccess) {\r\n reportAbuseFormRef.current.classList.remove('open');\r\n }\r\n }\r\n\r\n const handleImageClick = (e, index) => {\r\n setFullScreenActive(!fullScreenActive);\r\n setIndexZoom(index);\r\n };\r\n\r\n const images = map(reviewState.images, (image, idx) => (\r\n
\r\n handleImageClick(e, idx)} src={image} />\r\n
\r\n ));\r\n\r\n if (flktyRef) {\r\n flktyRef.on('fullscreenChange', (isFullscreen) => {\r\n const body = document.querySelector('body');\r\n\r\n if (isFullscreen) {\r\n body.classList.add('no-scroll');\r\n } else {\r\n body.classList.remove('no-scroll');\r\n }\r\n });\r\n }\r\n\r\n return (\r\n
\r\n
\r\n

{reviewState.title}

\r\n
\r\n
\r\n

\r\n \r\n {translateService.get(`reviews.ratingLabel`)}\r\n {' '}\r\n \r\n

\r\n

\r\n \r\n {translateService.get(\r\n `reviews.qualityPriceRatio`\r\n )}\r\n {' '}\r\n \r\n

\r\n
\r\n

\r\n {`${\r\n reviewState.user.nickname\r\n } | ${Globalizer.formatDateLong(\r\n reviewState.creationDate\r\n )}`}\r\n

\r\n
\r\n

\r\n {!isEmpty(reviewState.images) &&\r\n reviewState.renderImages === true && (\r\n {\r\n setFlktyRef(c);\r\n }}>\r\n {images}\r\n \r\n )}\r\n {fullScreenActive && (\r\n {},\r\n },\r\n startIndex: indexZoom,\r\n }}\r\n items={reviewState.images.map((i) => ({\r\n src: i,\r\n type: 'image',\r\n }))}>\r\n )}\r\n {!isNil(reviewState.answer) && (\r\n

\r\n \r\n

\r\n {reviewState.answer.userNickname}\r\n

\r\n
\r\n )}\r\n
\r\n
\r\n
\r\n

\r\n {translateService.get(`productDetail.isUseful`)}{' '}\r\n \r\n {' '}\r\n {reviewState.usefulCount}\r\n {' '}\r\n \r\n {' '}\r\n {reviewState.uselessCount}\r\n \r\n

\r\n {isAuthenticated && (\r\n
\r\n \r\n {translateService.get(`reviews.reportAbuse`)}\r\n

\r\n \r\n

\r\n {translateService.get(`reviews.abuseKind`)}\r\n

\r\n \r\n \r\n \r\n

\r\n \r\n {translateService.get(\r\n `productDetail.send`\r\n )}\r\n \r\n

\r\n
\r\n
\r\n )}\r\n
\r\n
\r\n \r\n );\r\n};\r\n\r\nexport default ProductReview;\r\n","require('intersection-observer');\r\nimport { each, some } from 'lodash';\r\n\r\n// https://developers.google.com/web/updates/2016/04/intersectionobserver\r\nconst _observeItem = function ({ element, threshold = 0.5, callback }) {\r\n // \"10% visible for more than a continuous second\"\r\n\r\n const isVisible = function (boundingClientRect, intersectionRect) {\r\n return (\r\n (intersectionRect.width * intersectionRect.height) /\r\n (boundingClientRect.width * boundingClientRect.height) >=\r\n threshold\r\n );\r\n };\r\n\r\n const visibleTimerCallback = function (element, observer) {\r\n delete element.visibleTimeout;\r\n // Process any pending observations\r\n processChanges(observer.takeRecords());\r\n if ('isVisible' in element) {\r\n delete element.isVisible;\r\n observer.unobserve(element);\r\n }\r\n };\r\n\r\n function processChanges(changes) {\r\n each(changes, function (changeRecord) {\r\n var element = changeRecord.target;\r\n element.isVisible = isVisible(\r\n changeRecord.boundingClientRect,\r\n changeRecord.intersectionRect\r\n );\r\n if (element.isVisible) {\r\n // Transitioned from hidden to visible\r\n // console.log(\"Became visibile\");\r\n callback(element);\r\n element.visibleTimeout = setTimeout(\r\n visibleTimerCallback,\r\n 1000,\r\n element,\r\n observer\r\n );\r\n } else {\r\n // Transitioned from visible to hidden\r\n // console.log(\"invisible\");\r\n if ('visibleTimeout' in element) {\r\n clearTimeout(element.visibleTimeout);\r\n delete element.visibleTimeout;\r\n }\r\n }\r\n });\r\n }\r\n\r\n var observer = new IntersectionObserver(processChanges, {\r\n threshold: [threshold],\r\n });\r\n\r\n observer.observe(element);\r\n};\r\n\r\nconst _observeItems = ({ items, imageIdentifier, sourceAttribute, cb }) => {\r\n each(items, (item) => {\r\n const itm = item;\r\n const imagesToLazyLoad = itm.getElementsByClassName(imageIdentifier);\r\n\r\n each(imagesToLazyLoad, (imageToLazyLoad) => {\r\n if (imageToLazyLoad !== undefined) {\r\n const url =\r\n imageToLazyLoad.getAttribute(sourceAttribute) ||\r\n imageToLazyLoad.getAttribute('data-src');\r\n const shouldLazyLoad =\r\n (url !== '' &&\r\n url !== null &&\r\n url !== undefined &&\r\n imageToLazyLoad.isSrcAlreadySet === undefined) ||\r\n imageToLazyLoad.getAttribute('data-src') !==\r\n imageToLazyLoad.getAttribute('src');\r\n\r\n _observeItem({\r\n element: itm,\r\n threshold: 0.1,\r\n callback: function () {\r\n imageToLazyLoad.isSrcAlreadySet =\r\n imageToLazyLoad.getAttribute('data-src') ===\r\n imageToLazyLoad.getAttribute('src');\r\n if (shouldLazyLoad) {\r\n if (!imageToLazyLoad.isSrcAlreadySet) {\r\n imageToLazyLoad.setAttribute('src', url);\r\n\r\n if (cb) {\r\n cb(imageToLazyLoad);\r\n }\r\n imageToLazyLoad.isSrcAlreadySet =\r\n imageToLazyLoad.getAttribute('data-src') ===\r\n imageToLazyLoad.getAttribute('src');\r\n imageToLazyLoad.classList.add(\r\n 'image-lazyloaded'\r\n );\r\n }\r\n }\r\n },\r\n });\r\n }\r\n });\r\n });\r\n};\r\n\r\nconst setIntervalX = function (callback, delay, repetitions) {\r\n var x = 0;\r\n var intervalID = window.setInterval(function () {\r\n callback();\r\n\r\n if (++x === repetitions) {\r\n window.clearInterval(intervalID);\r\n }\r\n }, delay);\r\n return intervalID;\r\n};\r\n\r\nconst observeArticleImages = () => {\r\n // Per ogni .article__image visibile per almeno 10% della superficie,\r\n // richiedo al server la immagine.\r\n // Se l'utente ha in viewport l'immagine per + di 1 secondo, non la richiedo piĆ¹\r\n // e sgancio l'observer\r\n var intervalTryId = setIntervalX(\r\n function () {\r\n var items = document.getElementsByClassName('article');\r\n if (items && items.length > 0) {\r\n _observeItems({\r\n items: items,\r\n imageIdentifier: 'article__image',\r\n });\r\n window.clearInterval(intervalTryId);\r\n }\r\n },\r\n //1000,\r\n 300,\r\n 8\r\n );\r\n};\r\n\r\nconst observeBannerImages = () => {\r\n var items = document.getElementsByClassName('banner__link');\r\n\r\n each(items, (item) => {\r\n const itm = item;\r\n const sourcesToLazyLoad = itm.getElementsByTagName('source');\r\n const imageToLazyLoad = itm.getElementsByClassName('banner__img')[0];\r\n\r\n if (imageToLazyLoad !== undefined) {\r\n const url = imageToLazyLoad.getAttribute('data-src') || '';\r\n const shouldLazyLoad =\r\n url !== '' &&\r\n some(\r\n sourcesToLazyLoad,\r\n (s) => (s.getAttribute('data-srcset') || '') !== ''\r\n );\r\n\r\n _observeItem({\r\n element: itm,\r\n threshold: 0.1,\r\n callback: function () {\r\n if (shouldLazyLoad) {\r\n if (!imageToLazyLoad.isSrcAlreadySet) {\r\n each(sourcesToLazyLoad, (s) => {\r\n const srcset =\r\n s.getAttribute('data-srcset') || '';\r\n s.setAttribute('srcset', srcset);\r\n });\r\n\r\n imageToLazyLoad.setAttribute('src', url);\r\n imageToLazyLoad.isSrcAlreadySet = true;\r\n imageToLazyLoad.classList.add('image-lazyloaded');\r\n }\r\n }\r\n },\r\n });\r\n }\r\n });\r\n};\r\n\r\nexport default {\r\n observeArticleImages,\r\n observeBannerImages,\r\n observeReviewGallery: function ({ element, cb }) {\r\n if (element) {\r\n _observeItem({\r\n element,\r\n callback: (imageToLazyLoad) => {\r\n if (imageToLazyLoad) {\r\n return cb(imageToLazyLoad);\r\n }\r\n return undefined;\r\n },\r\n });\r\n }\r\n return undefined;\r\n },\r\n observeQuestionGallery: function ({ element, cb }) {\r\n if (element) {\r\n _observeItem({\r\n element,\r\n callback: (imageToLazyLoad) => {\r\n if (imageToLazyLoad) {\r\n return cb(imageToLazyLoad);\r\n }\r\n return undefined;\r\n },\r\n });\r\n }\r\n return undefined;\r\n },\r\n};\r\n"],"names":["require","_ref","review","isAuthenticated","isMobile","slug","Globalizer","init","reviewRef","useRef","flktyHtmlRef","reportAbuseFormRef","_useState","useState","_useState2","_slicedToArray","reviewState","setReviewState","_useState3","_useState4","flktyRef","setFlktyRef","_useState5","_useState6","abuseType","setAbuseType","_useState7","_useState8","fullScreenActive","setFullScreenActive","_useState9","_useState10","indexZoom","setIndexZoom","useEffect","deferredImagesLoader","observeReviewGallery","element","current","cb","imageToLazyLoad","_objectSpread","renderImages","handleRadioButtonClick","e","handleAbuseTypeChange","type","currentTarget","value","_handleReviewIsUseful","_asyncToGenerator","_regeneratorRuntime","_callee","_context","prev","next","window","location","common","getSiteUrl","concat","$pathBase","encodeURIComponent","search","abrupt","userAlreadyVotedForUseful","userVoteYes","id","sent","isSuccess","prevState","uselessCount","userAlreadyVotedForUseless","usefulCount","stop","apply","arguments","_handleReviewIsUseless","_callee2","_context2","userVoteNo","_handleSendReportAbuse","_callee3","_context3","reportAbuse","classList","remove","images","map","image","idx","React","className","key","onClick","index","src","on","isFullscreen","body","document","querySelector","add","ref","title","translateService","get","ReviewStars","average","rating","maxRating","qualityPriceRatio","user","nickname","formatDateLong","creationDate","dangerouslySetInnerHTML","__html","isEmpty","Flickity","options","autoPlay","cellAlign","contain","draggable","fullscreen","groupCells","pageDots","prevNextButtons","wrapAround","flickityRef","c","ProductFullScreenHandler","infinite","closing","fancybox","slide","startIndex","items","i","isNil","answer","description","userNickname","contentFromCdn","path","keepUrlAsIs","alt","toggleNextElementVisibility","htmlFor","onMouseUp","name","_observeItem","_ref$threshold","threshold","callback","visibleTimerCallback","observer","visibleTimeout","processChanges","takeRecords","isVisible","unobserve","changes","each","changeRecord","boundingClientRect","intersectionRect","target","width","height","setTimeout","clearTimeout","IntersectionObserver","observe","observeArticleImages","delay","repetitions","x","intervalID","intervalTryId","getElementsByClassName","length","_ref2","imageIdentifier","sourceAttribute","item","itm","imagesToLazyLoad","undefined","url","getAttribute","shouldLazyLoad","isSrcAlreadySet","setAttribute","_observeItems","clearInterval","setInterval","observeBannerImages","sourcesToLazyLoad","getElementsByTagName","some","s","srcset","_ref3","observeQuestionGallery","_ref4"],"sourceRoot":""}