import {Video} from '@app/titles/models/video'; import {PlayCircleIcon} from '@common/icons/material/PlayCircle'; import {ReactNode} from 'react'; import {Link} from 'react-router-dom'; import {getWatchLink} from '@app/videos/watch-page/get-watch-link'; import {Skeleton} from '@common/ui/skeleton/skeleton'; import clsx from 'clsx'; import {useIsMobileMediaQuery} from '@common/utils/hooks/is-mobile-media-query'; import {VideoThumbnail} from '@app/videos/video-thumbnail'; import {Title} from '@app/titles/models/title'; import {Episode} from '@app/titles/models/episode'; interface Props { videos?: Video[]; heading?: ReactNode; count?: number; title?: Title; episode?: Episode; } export function VideoGrid({videos, heading, count, title, episode}: Props) { const isMobile = useIsMobileMediaQuery(); if (!videos?.length) return null; if (!count) { count = isMobile ? 4 : 3; } return (
{heading}
{videos.slice(0, count).map(video => ( ))}
); } interface VideoGridItemProps { video: Video; className?: string; title?: Title; episode?: Episode; name?: ReactNode; showCategory?: boolean; forceTitleBackdrop?: boolean; } export function VideoGridItem({ video, className, title, episode, name, showCategory = true, forceTitleBackdrop = false, }: VideoGridItemProps) { const link = getWatchLink(video); return (
{showCategory && {video.category}} {name || video.name}
); } interface VideoGridItemSkeletonProps { className?: string; } export function VideoGridItemSkeleton({className}: VideoGridItemSkeletonProps) { return (
); } export function VideoGridItemBottomGradient() { return (
); }