import {useWatchPageVideo} from '@app/videos/requests/use-watch-page-video'; import {TitlePoster} from '@app/titles/title-poster/title-poster'; import {TitleLink} from '@app/titles/title-link'; import React, {Fragment, ReactNode, useState} from 'react'; import {Skeleton} from '@common/ui/skeleton/skeleton'; import {AnimatePresence, m} from 'framer-motion'; import {opacityAnimation} from '@common/ui/animation/opacity-animation'; import {ThumbButtons} from '@common/votes/thumb-buttons'; import {IconButton} from '@common/ui/buttons/icon-button'; import {ShareIcon} from '@common/icons/material/Share'; import {FlagIcon} from '@common/icons/material/Flag'; import {Tooltip} from '@common/ui/tooltip/tooltip'; import {Trans} from '@common/i18n/trans'; import {useSubmitReport} from '@common/reports/requests/use-submit-report'; import {useDeleteReport} from '@common/reports/requests/use-delete-report'; import {Video} from '@app/titles/models/video'; import {useIsStreamingMode} from '@app/videos/use-is-streaming-mode'; import {EpisodeLink} from '@app/episodes/episode-link'; import {CompactSeasonEpisode} from '@app/episodes/compact-season-episode'; import {ShareMenuTrigger} from '@app/sharing/share-menu-trigger'; import {getWatchLink} from '@app/videos/watch-page/get-watch-link'; export function WatchPageTitleDetails() { const {data} = useWatchPageVideo(); const isStreamingMode = useIsStreamingMode(); const content = !data ? ( } titleLink={} videoName={} description={ } rate={
} /> ) : ( } titleLink={} videoName={!isStreamingMode ? data.video.name : undefined} episodeName={ data.episode ? ( {data.episode.name} ( ) ) : undefined } description={data.episode?.description || data.title.description} rate={
} /> ); return ( {content} ); } interface ShareButtonProps { video: Video; } function ShareButton({video}: ShareButtonProps) { const link = getWatchLink(video, {absolute: true}); return ( }> ); } interface ReportButtonProps { video: Video; } function ReportButton({video}: ReportButtonProps) { const report = useSubmitReport(video); const deleteReport = useDeleteReport(video); const [isReported, setIsReported] = useState(video.current_user_reported); return ( }> { if (isReported) { deleteReport.mutate(); } else { report.mutate({}); } setIsReported(!isReported); }} > ); } interface LayoutProps { poster?: ReactNode; titleLink: ReactNode; videoName: ReactNode; episodeName?: ReactNode; description: ReactNode; rate?: ReactNode; } function Layout({ poster, titleLink, videoName, episodeName, description, rate, }: LayoutProps) { return ( {poster}

{titleLink}

{episodeName && (
{episodeName}
)} {videoName &&
{videoName}
}
{rate}
{description && (

{description}

)}
); }