{"version":3,"file":"js/5083-ec670e02eda0f67b3c3a.chunk.js","mappings":"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","sources":["webpack://sniffspot/./frontend/src/pages/spot-view-page/desktop-photo-gallery.jsx","webpack://sniffspot/./frontend/src/services/hooks/useOnScreen.js"],"sourcesContent":["import React, { useCallback, useEffect, useMemo, useRef, useState } from 'react';\nimport moment from 'moment-timezone';\nimport useOnScreen from '../../services/hooks/useOnScreen';\nimport { IMG_RESIZES } from '../../consts/resizer.consts';\nimport { ImageHelper } from '../../classes/image-helper.class';\nimport { SPOT_MIN_REQ_PHOTOS } from '../../consts/spot.consts';\nimport RequestMorePhotos from '../../components/request-more-photos';\nimport ModalMobile from '../../components/modal-mobile';\nimport PictureSet from '../../components/picture-set';\nimport SvgChevronRight from 'src/assets/svg/SvgChevronRight.svg';\nimport SvgChevronLeft from 'src/assets/svg/SvgChevronLeft.svg';\nimport SvgCross2 from 'src/assets/svg/SvgCross2.svg';\nimport './desktop-photo-gallery.scss';\n\nconst perPage = 10;\n\nconst DesktopPhotoGallery = ({\n photos = [],\n currentPhoto,\n isOpen,\n toggle,\n hostId,\n spotId,\n handleNext,\n handleBack,\n title,\n state,\n city,\n setDesktopPhotoCount,\n guestReq = true,\n}) => {\n const [loading, setLoading] = useState(false);\n const photo = photos[currentPhoto];\n const altImg = title ? `${title} - ${city}, ${state}` : 'Spot thumbnail';\n const photosBelowMin = guestReq && photos.length < SPOT_MIN_REQ_PHOTOS;\n const length = photosBelowMin ? photos.length + 1 : photos.length;\n const showReq = photosBelowMin && currentPhoto == photos.length;\n const nextPhoto = currentPhoto < photos.length - 1 ? photos[currentPhoto + 1] : null;\n const nextPhoto2 = currentPhoto < photos.length - 2 ? photos[currentPhoto + 2] : null;\n let submittedBy = '';\n\n if (!showReq && photo?.providedById !== null && photo?.providedBy && hostId !== photo?.providedBy.id) {\n const monthYear = moment(photo?.createdAt).format('MMM YYYY');\n submittedBy = `Submitted by: ${photo?.providedBy.firstname} ${photo?.providedBy.lastInitial}. - ${monthYear}`;\n }\n\n const myRef = useRef(null);\n const [thumbRefNode, setThumbRefNode] = useState({});\n const myThumbRef = useCallback((node) => isOpen && setThumbRefNode({ current: node }), [isOpen]);\n const isVisible = useOnScreen(myRef);\n const isThumbVisible = useOnScreen(thumbRefNode);\n const [limit, setLimit] = useState(perPage > photos.length ? photos.length : perPage);\n const [limitThumb, setLimitThumb] = useState(perPage > photos.length ? photos.length : perPage);\n\n const limitPhotos = useMemo(() => photos.slice(0, limit), [photos, limit]);\n const limitThumbPhotos = useMemo(() => photos.slice(0, limitThumb), [photos, limitThumb]);\n\n useEffect(() => {\n if (!isVisible || limit == photos.length) {\n return;\n }\n const newLimit = limit + perPage > photos.length ? photos.length : limit + perPage;\n setLimit(newLimit);\n }, [isVisible]);\n\n useEffect(() => {\n if (!isThumbVisible || limitThumb == photos.length) {\n return;\n }\n const newLimit = limitThumb + perPage > photos.length ? photos.length : limitThumb + perPage;\n setLimitThumb(newLimit);\n }, [isThumbVisible]);\n\n useEffect(() => {\n if (currentPhoto > -1) {\n setLoading(true);\n setTimeout(() => setLoading(false), 20);\n const myThumb = document.querySelector('.desktop-photo-carousel-modal__content__thumbnail .active');\n myThumb?.scrollIntoView({ behavior: 'smooth', block: 'center' });\n }\n }, [currentPhoto]);\n\n if (!showReq && !photo) {\n return '';\n }\n\n return (\n \n
\n
\n \n
\n
\n {limitThumbPhotos.map((p, i) => (\n
setDesktopPhotoCount(i)}>\n \n
\n ))}\n {photosBelowMin && (\n setDesktopPhotoCount(photos.length)}\n >\n Photo Request\n
\n )}\n {limitThumb < photos.length &&
}\n
\n
\n {currentPhoto > 0 && (\n
\n \n
\n )}\n {limitPhotos.map((p, i) => {\n const pMonthYear = moment(p.createdAt).format('MMM YYYY');\n const pSubmittedBy = `Submitted by: ${p.providedBy?.firstname} ${p.providedBy?.lastInitial}. - ${pMonthYear}`;\n const isLastIdx = limitPhotos.length - 1 == i;\n\n return (\n
\n {!loading ? (\n <>\n \n {p.providedBy?.id && (\n
\n

\n {pSubmittedBy}\n

\n
\n )}\n {p.caption &&

{p.caption}

}\n \n ) : (\n ''\n )}\n
\n );\n })}\n {photosBelowMin && (\n
\n \n
\n )}\n
\n {showReq ? (\n \n ) : !loading ? (\n <>\n
\n \n {photo.caption &&

{photo.caption}

}\n
\n
\n {nextPhoto && (\n \n )}\n {nextPhoto2 && (\n \n )}\n
\n {submittedBy && (\n
\n

\n {submittedBy}\n

\n
\n )}\n \n ) : (\n ''\n )}\n

\n {`${currentPhoto + 1} of ${length}`}\n

\n
\n {currentPhoto < length - 1 && (\n
\n \n
\n )}\n
\n
\n
\n );\n};\n\nexport default DesktopPhotoGallery;\n","import { useEffect, useMemo, useState } from 'react';\n\nexport default function useOnScreen(ref) {\n const [isIntersecting, setIntersecting] = useState(false);\n\n const observer = useMemo(() => new IntersectionObserver(([entry]) => setIntersecting(entry.isIntersecting)), [ref]);\n\n useEffect(() => {\n if (!ref?.current) {\n return;\n }\n\n observer.observe(ref.current);\n return () => {\n observer.disconnect();\n };\n }, [ref?.current]);\n\n return isIntersecting;\n}\n"],"names":["perPage","_ref","_ref$photos","photos","currentPhoto","isOpen","toggle","hostId","spotId","handleNext","handleBack","title","state","city","setDesktopPhotoCount","_ref$guestReq","guestReq","_useState2","_slicedToArray","useState","loading","setLoading","photo","altImg","concat","photosBelowMin","length","SPOT_MIN_REQ_PHOTOS","showReq","nextPhoto","nextPhoto2","submittedBy","providedById","providedBy","id","monthYear","moment","createdAt","format","firstname","lastInitial","myRef","useRef","_useState4","thumbRefNode","setThumbRefNode","myThumbRef","useCallback","node","current","isVisible","useOnScreen","isThumbVisible","_useState6","limit","setLimit","_useState8","limitThumb","setLimitThumb","limitPhotos","useMemo","slice","limitThumbPhotos","useEffect","newLimit","setTimeout","myThumb","document","querySelector","scrollIntoView","behavior","block","React","ModalMobile","className","onClick","SvgCross2","map","p","i","key","PictureSet","imgs","ImageHelper","getUrlFromOptions","imageAws","IMG_RESIZES","x256","width","height","alt","ref","SvgChevronLeft","_p$providedBy","_p$providedBy2","_p$providedBy3","pMonthYear","pSubmittedBy","isLastIdx","undefined","x1024","caption","RequestMorePhotos","x1536","method","SvgChevronRight","isIntersecting","setIntersecting","observer","IntersectionObserver","entry","observe","disconnect"],"sourceRoot":""}