import classNames from "classnames"; import { ReactNode, useCallback, useEffect, useRef, useState } from "react"; import { useTranslation } from "react-i18next"; import { useAsync } from "react-use"; import { getMetaFromId } from "@/backend/metadata/getmeta"; import { MWMediaType, MWSeasonMeta } from "@/backend/metadata/types/mw"; import { Icon, Icons } from "@/components/Icon"; import { ProgressRing } from "@/components/layout/ProgressRing"; import { OverlayAnchor } from "@/components/overlays/OverlayAnchor"; import { Overlay } from "@/components/overlays/OverlayDisplay"; import { OverlayPage } from "@/components/overlays/OverlayPage"; import { OverlayRouter } from "@/components/overlays/OverlayRouter"; import { usePlayerMeta } from "@/components/player/hooks/usePlayerMeta"; import { VideoPlayerButton } from "@/components/player/internals/Button"; import { Menu } from "@/components/player/internals/ContextMenu"; import { useOverlayRouter } from "@/hooks/useOverlayRouter"; import { useBookmarkStore } from "@/stores/bookmarks"; import { PlayerMeta } from "@/stores/player/slices/source"; import { usePlayerStore } from "@/stores/player/store"; import { usePreferencesStore } from "@/stores/preferences"; import { useProgressStore } from "@/stores/progress"; import { hasAired } from "../utils/aired"; function CenteredText(props: { children: React.ReactNode }) { return (
{ if (descriptionRefs) { descriptionRefs.current[`medium-${episode.id}`] = el; } }} className={classNames( "text-sm text-white/80 mt-1.5 transition-all duration-200", !expandedEpisodes[`medium-${episode.id}`] ? "line-clamp-2" : "max-h-[200px] overflow-y-auto scrollbar-thin scrollbar-thumb-white/20 scrollbar-track-transparent pr-2", )} > {episode.overview}
{!expandedEpisodes[`medium-${episode.id}`] && truncatedEpisodes[`medium-${episode.id}`] && ( )} {expandedEpisodes[`medium-${episode.id}`] && ( )}{ if (descriptionRefs) { descriptionRefs.current[`large-${episode.id}`] = el; } }} className={classNames( "text-sm text-white/80 mt-1.5 transition-all duration-200", !expandedEpisodes[`large-${episode.id}`] ? "line-clamp-2" : "max-h-[200px] overflow-y-auto scrollbar-thin scrollbar-thumb-white/20 scrollbar-track-transparent pr-2", )} > {episode.overview}
{!expandedEpisodes[`large-${episode.id}`] && truncatedEpisodes[`large-${episode.id}`] && ( )} {expandedEpisodes[`large-${episode.id}`] && ( )}{t("player.menus.episodes.noFavorites")}
{t("player.menus.episodes.noFavorites")}
{t("player.menus.episodes.emptyState")}