import {useTrans} from '@common/i18n/use-trans'; import {message} from '@common/i18n/message'; import clsx from 'clsx'; import {Title} from '@app/titles/models/title'; import { ImageSize, useImageSrc, useImageSrcSet, } from '@app/images/use-image-src'; import {Episode} from '@app/titles/models/episode'; import {TitleLink} from '@app/titles/title-link'; import {EpisodeLink} from '@app/episodes/episode-link'; import {IconButton} from '@common/ui/buttons/icon-button'; import {Link} from 'react-router-dom'; import {getWatchLink} from '@app/videos/watch-page/get-watch-link'; import {MediaPlayIcon} from '@common/icons/media/media-play'; import {MovieIcon} from '@common/icons/material/Movie'; // can provide either url for backdrop directly or // title/episode object if main backdrop for it should be used interface Props { src?: string; title?: Title; episode?: Episode; className?: string; size?: string; lazy?: boolean; srcSize?: ImageSize; wrapWithLink?: boolean; showPlayButton?: boolean; wrapperClassName?: string; } export function TitleBackdrop({ src: initialSrc, title, episode, className, size, srcSize, lazy = true, wrapWithLink = false, showPlayButton, wrapperClassName, }: Props) { const {trans} = useTrans(); const primaryVideo = episode?.primary_video || title?.primary_video; if (!primaryVideo) { showPlayButton = false; } if (!initialSrc && episode) { initialSrc = episode?.poster; } if (!initialSrc && title) { initialSrc = title.backdrop; } const src = useImageSrc(initialSrc, {size: srcSize}); const item = episode || title; const srcset = useImageSrcSet(initialSrc); const imageClassName = clsx( className, size, 'aspect-video bg-fg-base/4 object-cover', !src ? 'flex items-center justify-center' : 'block', ); let img = src ? ( { ) : ( ); const playButton = showPlayButton ? (
) : null; if (wrapWithLink) { if (episode) { img = ( {img} ); } else if (title) { img = ( {img} ); } } return (
{img} {playButton} {wrapWithLink && (
)}
); }