import { gql } from '@apollo/client'; import { BookOverviewTabs } from '@app/client/components/BookOverviewTabs'; import { Pagination } from '@app/client/components/Pagination'; import { reviewFragment } from '@app/client/fragments'; import { useIdentity } from '@app/client/hooks/identity'; import { usePaginatedQuery } from '@app/client/hooks/usePaginatedQuery'; import { useToastMutation } from '@app/client/hooks/useToastMutation'; import { Skeleton, Stack, Text } from '@chakra-ui/react'; import { BookReviewCreateMutation, BookReviewsQuery } from '@generated/types'; import { createFileRoute } from '@tanstack/react-router'; import { useState } from 'react'; import { bookQuery } from '../overview'; import { ReviewInput } from '@app/client/components/ReviewInput'; import { ReviewCard } from '@app/client/components/ReviewCard'; export const Route = createFileRoute('/work/book/$bookId/overview/reviews')({ component: RouteComponent }); function RouteComponent() { const { bookId: id } = Route.useParams(); const identity = useIdentity(); const [reviewsPage, setChaptersListPage] = useState(1); const [reviewsPageSize, setChaptersListPageSize] = useState(10); const startIndex = (reviewsPage - 1) * reviewsPageSize; const { data } = usePaginatedQuery({ query: bookReviewsQuery, input: { bookId: id, filter: { offset: startIndex, size: reviewsPageSize } } }); const { update: reviewCreate } = useToastMutation({ mutation: bookReviewCreateMutation, successMsg: 'Review posted!', refetchQueries: [bookReviewsQuery, bookQuery] }); if (data == null) return ; return ( <> {identity != null && reviewsPage === 1 && ( { await reviewCreate({ variables: { input: { bookId: id, text } } }); }} /> )} {data.reviewMany.items.length === 0 ? ( No reviews here yet! ) : ( data.reviewMany.items.map(item => ( )) )} {data.reviewMany.total > reviewsPageSize && ( )} ); } const bookReviewsQuery = gql` query BookReviews($input: ReviewManyInput!) { reviewMany(input: $input) { items { ...Review } total } } ${reviewFragment} `; const bookReviewCreateMutation = gql` mutation BookReviewCreate($input: ReviewCreateInput!) { reviewCreate(input: $input) { ...Review } } ${reviewFragment} `;