{"version":3,"file":"js/4362-2e58bc61dabd7ed7b17c.chunk.js","mappings":"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","sources":["webpack://sniffspot/./frontend/src/components/listing-reviews/all-reviews.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 useGetSpotReviews from '../../services/hooks/useGetSpotReviews';\nimport useOnScreen from '../../services/hooks/useOnScreen';\nimport SortReviews from './sort-reviews';\nimport Review from '../review';\nimport SvgStar from 'src/assets/svg/SvgStar.svg';\nimport { formatRating, formatReviewCount } from '../../helpers/rating';\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    isSpotDetail,\n    handleSniffpassReviewBadge,\n    handleMembershipReviewBadge,\n    spot,\n    noRichText,\n}) => {\n    const { getSpotReviews, reviews, loading } = useGetSpotReviews();\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                            spotId,\n                            userDetails,\n                            isSpotDetail,\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":["_ref","reviewsCount","rating","userDetails","spotId","host","sortReviews","onChangeSort","sortOpen","toggleSortOpen","isSpotDetail","handleSniffpassReviewBadge","handleMembershipReviewBadge","spot","noRichText","_useGetSpotReviews","useGetSpotReviews","getSpotReviews","reviews","loading","_useState2","_slicedToArray","useState","limit","setLimit","_useState4","allReviews","setAllReviews","myRef","useRef","isVisible","useOnScreen","useEffect","newLimit","variables","id","first","sortBy","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":""}