import React, { useEffect, useState } from 'react'; import { disableBodyScroll, enableBodyScroll } from 'body-scroll-lock'; import Container from '../../shared/Container'; import { PrismicElement, PrismicImage } from '../../../typings/prismic'; import { BlockVideo, BlockMainVideo, ThumbnailVideo, ReviewWrapper } from '../../../styles/components/main/homepage/Review.style'; import ModalVideo from '../../shared/ModalVideo'; import { TextualReview, HomePageVideoReview } from '../../../typings/entities'; import RichText from '../../RichText'; import PrismicLink from '../../PrismicLink'; import { BlockReview } from '../../../styles/components/main/Review.style'; import { Flex } from '../../../styles/components/shared/Flex.style'; import { Avatar } from '../../../styles/components/shared/Avatar.style'; interface Props { title: string; description: PrismicElement; mainVideo: { id: string; illustration: PrismicImage }; tagline: string; videoReviews: HomePageVideoReview[]; textualReviews: TextualReview[]; } const Review: React.FC = ({ title, description, mainVideo, tagline, videoReviews, textualReviews }) => { const [youtubeID, setYoutubeID] = useState(); useEffect(() => { if (youtubeID) { disableBodyScroll(undefined, { reserveScrollBarGap: true }); } else { enableBodyScroll(); } }, [youtubeID]); function renderVideoReviews (): React.ReactElement[] { return videoReviews.map((review: HomePageVideoReview, index: number) => (
setYoutubeID(review.video_review_id)}> {review.video_review_illustration.alt}
{review.video_review_author} {review.video_review_author_company}
{review.video_review_author_logo.alt}
)); } function renderStars (grade: number): string { let stars = ''; for (let i = 0; i < grade; i++) { stars += '★'; } for (let i = grade; i < 5; i++) { stars += '☆'; } return stars; } function renderTextualReviews (): React.ReactElement { return (
{textualReviews.map((review: TextualReview, index: number) => ( {renderStars(review.review_grade)} {review.review_platform_logo?.url && {review.review_platform_logo.alt}} {review.review_author_avatar?.url && } {review.review_author} ))}
) } return ( <> {youtubeID && setYoutubeID(null)} />}

{title}

setYoutubeID(mainVideo.id)}> {mainVideo.illustration.alt}

{tagline}

{renderVideoReviews()} {renderTextualReviews()}
); }; export default Review;