import TitleCard from '@app/components/TitleCard'; import { Permission, useUser } from '@app/hooks/useUser'; import type { MovieDetails } from '@server/models/Movie'; import type { TvDetails } from '@server/models/Tv'; import { useInView } from 'react-intersection-observer'; import useSWR from 'swr'; export interface TmdbTitleCardProps { id: number; tmdbId: number; tvdbId?: number; type: 'movie' | 'tv'; canExpand?: boolean; isAddedToWatchlist?: boolean; } const isMovie = (movie: MovieDetails | TvDetails): movie is MovieDetails => { return (movie as MovieDetails).title !== undefined; }; const TmdbTitleCard = ({ id, tmdbId, tvdbId, type, canExpand, isAddedToWatchlist = false, }: TmdbTitleCardProps) => { const { hasPermission } = useUser(); const { ref, inView } = useInView({ triggerOnce: true, }); const url = type === 'movie' ? `/api/v1/movie/${tmdbId}` : `/api/v1/tv/${tmdbId}`; const { data: title, error } = useSWR( inView ? `${url}` : null ); if (!title && !error) { return (
); } if (!title) { return hasPermission(Permission.ADMIN) ? ( ) : null; } return isMovie(title) ? ( ) : ( ); }; export default TmdbTitleCard;