5 changed files with 63 additions and 21 deletions
@ -0,0 +1,23 @@ |
|||||||
|
import { MWMediaMeta } from "@/backend/metadata/types"; |
||||||
|
import { Helmet } from "react-helmet"; |
||||||
|
import { useCurrentSeriesEpisodeInfo } from "../hooks/useCurrentSeriesEpisodeInfo"; |
||||||
|
|
||||||
|
interface PageTitleControlProps { |
||||||
|
media?: MWMediaMeta; |
||||||
|
} |
||||||
|
|
||||||
|
export function PageTitleControl(props: PageTitleControlProps) { |
||||||
|
const { isSeries, humanizedEpisodeId } = useCurrentSeriesEpisodeInfo(); |
||||||
|
|
||||||
|
if (!props.media) return null; |
||||||
|
|
||||||
|
const title = isSeries |
||||||
|
? `${props.media.title} - ${humanizedEpisodeId}` |
||||||
|
: props.media.title; |
||||||
|
|
||||||
|
return ( |
||||||
|
<Helmet> |
||||||
|
<title>{title}</title> |
||||||
|
</Helmet> |
||||||
|
); |
||||||
|
} |
@ -0,0 +1,33 @@ |
|||||||
|
import { useMemo } from "react"; |
||||||
|
import { useVideoPlayerState } from "../VideoContext"; |
||||||
|
|
||||||
|
export function useCurrentSeriesEpisodeInfo() { |
||||||
|
const { videoState } = useVideoPlayerState(); |
||||||
|
|
||||||
|
const { current, seasons } = videoState.seasonData; |
||||||
|
|
||||||
|
const currentSeasonInfo = useMemo(() => { |
||||||
|
return seasons?.find((season) => season.id === current?.seasonId); |
||||||
|
}, [seasons, current]); |
||||||
|
|
||||||
|
const currentEpisodeInfo = useMemo(() => { |
||||||
|
return currentSeasonInfo?.episodes?.find( |
||||||
|
(episode) => episode.id === current?.episodeId |
||||||
|
); |
||||||
|
}, [currentSeasonInfo, current]); |
||||||
|
|
||||||
|
const isSeries = Boolean( |
||||||
|
videoState.seasonData.isSeries && videoState.seasonData.current |
||||||
|
); |
||||||
|
|
||||||
|
if (!isSeries) return { isSeries: false }; |
||||||
|
|
||||||
|
const humanizedEpisodeId = `S${currentSeasonInfo?.number} E${currentEpisodeInfo?.number}`; |
||||||
|
|
||||||
|
return { |
||||||
|
isSeries: true, |
||||||
|
humanizedEpisodeId, |
||||||
|
currentSeasonInfo, |
||||||
|
currentEpisodeInfo, |
||||||
|
}; |
||||||
|
} |
Loading…
Reference in new issue