import React, {Fragment, useState} from 'react'; import {MainNavbar} from '@app/main-navbar'; import {useDarkThemeVariables} from '@common/ui/themes/use-dark-theme-variables'; import { useWatchPageVideo, UseWatchPageVideoResponse, } from '@app/videos/requests/use-watch-page-video'; import {Footer} from '@common/ui/footer/footer'; import {PageErrorMessage} from '@common/errors/page-error-message'; import {CommentList} from '@common/comments/comment-list/comment-list'; import {NewCommentForm} from '@common/comments/new-comment-form'; import {WatchPageTitleDetails} from '@app/videos/watch-page/watch-page-title-details'; import {WatchPageAside} from '@app/videos/watch-page/watch-page-aside'; import {AnimatePresence, m} from 'framer-motion'; import {opacityAnimation} from '@common/ui/animation/opacity-animation'; import {useScrollToTop} from '@common/ui/navigation/use-scroll-to-top'; import {VideoPlayerSkeleton} from '@app/videos/video-player-skeleton'; import {SiteVideoPlayer} from '@app/videos/site-video-player'; import {useSettings} from '@common/core/settings/use-settings'; import {useAuth} from '@common/auth/use-auth'; import {useIsStreamingMode} from '@app/videos/use-is-streaming-mode'; import {WatchPageAlternativeVideos} from '@app/videos/watch-page/watch-page-alternative-videos'; import {AdHost} from '@common/admin/ads/ad-host'; import {Episode} from '@app/titles/models/episode'; import {Title} from '@app/titles/models/title'; import {Video} from '@app/titles/models/video'; import {PageMetaTags} from '@common/http/page-meta-tags'; import {useLayoutEffect} from '@react-aria/utils'; import {VideoThumbnail} from '@app/videos/video-thumbnail'; import {Trans} from '@common/i18n/trans'; import {Button} from '@common/ui/buttons/button'; import {Link} from 'react-router-dom'; export function WatchPage() { const darkThemeVars = useDarkThemeVariables(); useScrollToTop(); return (
); } function Content() { const {titles, comments} = useSettings(); const {isLoggedIn, hasPermission} = useAuth(); const query = useWatchPageVideo(); const {data, isLoading} = query; const title = data?.title; const episode = data?.episode; const video = data?.video; let commentable: Episode | Title | Video | undefined = video; if (!comments?.per_video) { commentable = episode || title; } const shouldShowComments = title && video && titles.enable_comments && hasPermission('comments.view'); if (data || isLoading) { return (
{shouldShowComments && ( {isLoggedIn && hasPermission('comments.create') && ( )} )}
); } return ; } interface VideoWrapperProps { data?: UseWatchPageVideoResponse; } function VideoWrapper({data}: VideoWrapperProps) { const isStreamingMode = useIsStreamingMode(); const {hasPermission} = useAuth(); const [isVisible, setIsVisible] = useState(false); useLayoutEffect(() => { setIsVisible(true); }, []); return ( {data?.video && isVisible ? ( {hasPermission('videos.play') ? ( ) : ( )} ) : ( )} ); } interface UpgradeMessageProps { video: Video; } function UpgradeMessage({video}: UpgradeMessageProps) { return (
); }