import {PageStatus} from '@common/http/page-status'; import {Title} from '@app/titles/models/title'; import {PageMetaTags} from '@common/http/page-meta-tags'; import React, {Fragment} from 'react'; import {TitlePageHeaderImage} from '@app/titles/pages/title-page/title-page-header-image'; import { GetEpisodeResponse, useEpisode, } from '@app/episodes/requests/use-episode'; import {ChipList} from '@common/ui/forms/input-field/chip-field/chip-list'; import {Chip} from '@common/ui/forms/input-field/chip-field/chip'; import {Link} from 'react-router-dom'; import {TitlePageCast} from '@app/titles/pages/title-page/sections/title-page-cast'; import {RelatedTitlesPanel} from '@app/titles/related-titles-panel'; import {CompactCredits} from '@app/titles/compact-credits'; import {TitlePageAsideLayout} from '@app/titles/pages/title-page/title-page-aside-layout'; import {WatchlistButton} from '@app/user-lists/watchlist-button'; import {TitlePoster} from '@app/titles/title-poster/title-poster'; import {getGenreLink} from '@app/titles/genre-link'; import {SitePageLayout} from '@app/site-page-layout'; import {EpisodePageHeader} from '@app/episodes/episode-page-header'; import {TruncatedDescription} from '@common/ui/truncated-description'; import {TitlePageVideoGrid} from '@app/titles/pages/title-page/sections/title-page-video-grid'; import {useIsStreamingMode} from '@app/videos/use-is-streaming-mode'; import {WatchNowButton} from '@app/titles/pages/title-page/watch-now-button'; import {Episode} from '@app/titles/models/episode'; import {TitlePageSections} from '@app/titles/pages/title-page/sections/title-page-sections'; import {TitlePageEpisodeGrid} from '@app/titles/pages/title-page/sections/title-page-episode-grid'; import {Trans} from '@common/i18n/trans'; import {useSettings} from '@common/core/settings/use-settings'; export function EpisodePage() { const query = useEpisode('episodePage'); const content = query.data ? ( ) : ( ); return {content}; } interface PageContentProps { data: GetEpisodeResponse; } function PageContent({data}: PageContentProps) { const {episode, title} = data; return (
); } interface MainContentProps { data: GetEpisodeResponse; } function MainContent({data}: MainContentProps) { const {episode, title, credits} = data; const {title_page} = useSettings(); return (
{title.genres?.length ? ( {title.genres.map(genre => ( {genre.display_name || genre.name} ))} ) : null} {title_page?.sections.map(name => ( ))}
); } interface EpisodePageSectionProps { data: GetEpisodeResponse; name: (typeof TitlePageSections)[number]; } function EpisodePageSection({name, data}: EpisodePageSectionProps) { switch (name) { case 'videos': return ; case 'cast': return ; case 'related': return ; case 'episodes': return ( } /> ); default: return null; } } interface AsideProps { title: Title; episode: Episode; } function Aside({title, episode}: AsideProps) { const isStreamingMode = useIsStreamingMode(); return ( } > {isStreamingMode && episode.primary_video && ( )} ); }