{"version":3,"file":"js/9417-ce9a33b9e90114b860ce.chunk.js","mappings":"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","sources":["webpack://sniffspot/./frontend/src/components/listing-reviews/all-reviews-ssr.jsx","webpack://sniffspot/./frontend/src/services/hooks/useGetSpotReviews.js","webpack://sniffspot/./frontend/src/services/hooks/useOnScreen.js"],"sourcesContent":["import React, { useEffect, useRef, useState } from 'react';\nimport { formatRating, formatReviewCount } from '../../helpers/rating';\nimport useOnScreen from '../../services/hooks/useOnScreen';\nimport SortReviews from './sort-reviews';\nimport Review from '../review';\nimport SvgStar from 'src/assets/svg/SvgStar.svg';\n\nconst useGetSpotReviews = require('../../services/hooks/useGetSpotReviews');\n\nconst perPage = 10;\n\nconst AllReviews = ({\n reviewsCount,\n rating,\n userDetails,\n spotId,\n host,\n sortReviews,\n onChangeSort,\n sortOpen,\n toggleSortOpen,\n isMobile,\n useAddReplySSR,\n useDeleteReplySSR,\n useHandleUpvoteSSR,\n changeSort,\n sortBy,\n isSpotDetail,\n handleSniffpassReviewBadge,\n handleMembershipReviewBadge,\n spot,\n noRichText,\n}) => {\n const { getSpotReviews, reviews, loading } = typeof window === 'undefined' ? {} : useGetSpotReviews.default();\n const [limit, setLimit] = useState(perPage);\n const [allReviews, setAllReviews] = useState([]);\n const myRef = useRef(null);\n const isVisible = useOnScreen(myRef);\n\n useEffect(() => {\n if (!isVisible || limit === reviewsCount) {\n return;\n }\n const newLimit = limit + perPage >= reviewsCount ? reviewsCount : limit + perPage;\n getSpotReviews({\n variables: {\n id: spotId,\n first: newLimit,\n sortBy: sortReviews.sortBy,\n sortOrder: sortReviews.sortOrder,\n },\n });\n setLimit(newLimit);\n }, [isVisible]);\n\n useEffect(() => {\n if (reviews) {\n setAllReviews(reviews);\n }\n }, [reviews]);\n\n useEffect(() => {\n setLimit(perPage);\n getSpotReviews({\n variables: {\n id: spotId,\n first: perPage,\n sortBy: sortReviews.sortBy,\n sortOrder: sortReviews.sortOrder,\n },\n });\n }, [sortReviews]);\n\n return (\n <div className=\"comments\">\n <div className=\"rev-head\">\n <div className=\"snif-m1 snif-semibold mt-2 mb-3\">\n <SvgStar className=\"star-reviews\" /> {formatRating(rating)}\n <span className=\"reviews-count snif-medium\">{` (${formatReviewCount(reviewsCount)} Reviews)`}</span>\n </div>\n </div>\n <SortReviews {...{ toggleSortOpen, sortOpen, onChangeSort, sortReviews }} />\n {allReviews.length > 0 &&\n allReviews.map((review, i) => (\n <Review\n key={i}\n {...{\n ...review,\n host,\n spot,\n sortBy,\n spotId,\n isMobile,\n changeSort,\n userDetails,\n isSpotDetail,\n useAddReplySSR,\n useDeleteReplySSR,\n useHandleUpvoteSSR,\n handleSniffpassReviewBadge,\n handleMembershipReviewBadge,\n noRichText,\n }}\n />\n ))}\n <div ref={myRef} />\n {loading && (\n <div className=\"col-md-12 mb-3 text-center\">\n <div className=\"loading\" />\n </div>\n )}\n </div>\n );\n};\n\nexport default AllReviews;\n","import { useLazyQuery } from '@apollo/client';\nimport { SPOT_REVIEWS } from '../../graphql/spots.queries';\n\nexport default function useGetSpotReviews() {\n const [getSpotReviews, { data, loading }] = useLazyQuery(SPOT_REVIEWS);\n return { getSpotReviews, reviews: data?.dogParkOrSpot?.reviews, loading };\n}\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":["useGetSpotReviews","require","_ref","reviewsCount","rating","userDetails","spotId","host","sortReviews","onChangeSort","sortOpen","toggleSortOpen","isMobile","useAddReplySSR","useDeleteReplySSR","useHandleUpvoteSSR","changeSort","sortBy","isSpotDetail","handleSniffpassReviewBadge","handleMembershipReviewBadge","spot","noRichText","_ref2","window","getSpotReviews","reviews","loading","_useState2","_slicedToArray","useState","limit","setLimit","_useState4","allReviews","setAllReviews","myRef","useRef","isVisible","useOnScreen","useEffect","newLimit","variables","id","first","sortOrder","React","className","SvgStar","formatRating","concat","formatReviewCount","SortReviews","length","map","review","i","Review","Object","assign","key","_objectSpread","ref","_data$dogParkOrSpot","_useLazyQuery2","useLazyQuery","SPOT_REVIEWS","_useLazyQuery2$","data","dogParkOrSpot","isIntersecting","setIntersecting","observer","useMemo","IntersectionObserver","entry","current","observe","disconnect"],"sourceRoot":""}