{"version":3,"file":"index-40U8ICeu.js","sources":["../../../app/javascript/queries/books/getReviewsForBook.ts","../../../app/javascript/features/books/components/BookReviews.tsx","../../../app/javascript/pages/clientverse/books/reviews/index.tsx"],"sourcesContent":["import { gql } from \"graphql-tag\";\n\nexport const findReviewsForBook = gql`\n query FindReviewsForBook(\n $filter: user_books_bool_exp!\n $userId: Int\n $includeCurrentUser: Boolean!\n ) {\n reviews: user_books(\n limit: 100\n where: $filter\n order_by: { likes_count: desc }\n ) {\n ...UserBookFullFragment\n user {\n ...UserBylineFragment\n }\n\n currentUserLike: likes(limit: 1, where: { user_id: { _eq: $userId } })\n @include(if: $includeCurrentUser) {\n ...LikeFragment\n }\n likes(limit: 5, order_by: { created_at: desc }) {\n ...LikeFragment\n user {\n ...UserBylineFragment\n }\n }\n }\n }\n`;\n","import { useEffect, useState } from \"react\";\nimport { useQuery } from \"lib/apollo/client\";\nimport BookReviewsList from \"components/BookReview/BookReviews\";\nimport { findReviewsForBook } from \"queries/books/getReviewsForBook\";\nimport BookType from \"types/BookType\";\nimport InteractiveStars from \"components/BookReview/InteractiveStars\";\nimport LoadingSpinner from \"hardcover-ui/components/LoadingSpinner\";\nimport useCurrentUserId from \"hooks/user/useCurrentUserId\";\nimport { BookSerializersBookByline, UserBookSerializersUserBookReview } from \"types/serializers\";\n\nexport interface Props {\n book: BookType;\n}\n\nconst generateFilter = (book, userId, minRating, maxRating, searchTerm) => {\n const newFilter = {\n book_id: { _eq: book.id },\n has_review: { _eq: true },\n user: { onboarded: { _eq: true }, status_id: { _in: [1, 2] } },\n };\n\n const ratingFilter: any = {};\n if (minRating !== 0.5 || maxRating !== 5) {\n ratingFilter.rating = {\n _gte: minRating,\n _lte: maxRating,\n };\n }\n\n const reviewFilter: any = {};\n if (searchTerm && searchTerm.length > 0) {\n reviewFilter.review = { _ilike: `%${searchTerm}%` };\n }\n\n const userFilter: any = {};\n if (userId) {\n userFilter.user_id = { _neq: userId };\n }\n\n return {\n ...newFilter,\n ...reviewFilter,\n ...userFilter,\n ...ratingFilter,\n };\n};\n\nexport default function BookReviews({ book, reviews: initialReviews }:{book: BookSerializersBookByline; reviews: UserBookSerializersUserBookReview[]}) {\n const [reviews, setReviews] = useState(initialReviews);\n const [minRating, setMinRating] = useState(0.5);\n const [maxRating, setMaxRating] = useState(5);\n const [searchTerm, setSearchTerm] = useState(null);\n const [changes, setChanges] = useState(false);\n const currentUserId = useCurrentUserId();\n const [filter, setFilter] = useState(\n generateFilter(book, currentUserId, minRating, maxRating, searchTerm)\n );\n\n const { loading } = useQuery(findReviewsForBook, {\n variables: {\n filter,\n userId: currentUserId,\n includeCurrentUser: currentUserId > 0,\n },\n skip: !changes,\n fetchPolicy: \"no-cache\",\n onCompleted: (data) => {\n setReviews(data.reviews);\n },\n });\n\n useEffect(() => {\n setFilter(\n generateFilter(book, currentUserId, minRating, maxRating, searchTerm)\n );\n }, [book, currentUserId, minRating, maxRating, searchTerm]);\n\n return (\n <>\n
\n
\n
\n {/*

Filter reviews

*/}\n setSearchTerm(e.currentTarget.value)}\n className=\"w-full focus:ring-indigo-500 focus:border-indigo-500 block min-w-0 rounded-md sm:text-sm border-gray-300 dark:bg-gray-600 dark:border-gray-500 dark:placeholder:text-gray-300 placeholder:text-gray-600\"\n />\n
\n\n
\n Filter by rating\n { setMinRating(newRating); setChanges(true); }}\n />\n -\n { setMaxRating(newRating); setChanges(true); }}\n />\n
\n
\n\n {loading ? (\n \n ) : (\n <>\n {reviews.length === 0 ? (\n

\n There are no reviews for this book.\n

\n ) : (\n \n )}\n \n )}\n
\n \n );\n}\n","import Container from \"hardcover-ui/components/Container\";\nimport { DefaultLayoutWrapper } from \"layouts/DefaultLayout\";\nimport BookLayout from \"features/books/layouts/BookLayout/BookLayout\";\nimport { usePage } from \"@inertiajs/react\";\nimport { BookReviewsPageProps } from \"./index.props\";\nimport BookReviews from \"features/books/components/BookReviews\";\nimport Pagination from \"components/shared/Pagination\";\nimport { BookSerializersBookByline } from \"types/serializers\";\n\nfunction ReviewsIndex() {\n const { book, reviews } = usePage().props;\n\n return (\n \n \n \n \n \n \n );\n}\n\nReviewsIndex.layout = DefaultLayoutWrapper;\nexport default ReviewsIndex;"],"names":["findReviewsForBook","gql","generateFilter","book","userId","minRating","maxRating","searchTerm","newFilter","ratingFilter","reviewFilter","userFilter","BookReviews","initialReviews","reviews","setReviews","useState","setMinRating","setMaxRating","setSearchTerm","changes","setChanges","currentUserId","useCurrentUserId","filter","setFilter","loading","useQuery","data","useEffect","jsx","Fragment","jsxs","e","InteractiveStars","newRating","LoadingSpinner","BookReviewsList","ReviewsIndex","usePage","BookLayout","Container","Pagination","DefaultLayoutWrapper"],"mappings":"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"}