{"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":""}