import React, { useState, useCallback, useEffect } from 'react'; import type { MediaType } from '../../../server/models/Search'; import { withProperties } from '../../utils/typeHelpers'; import Transition from '../Transition'; import Placeholder from './Placeholder'; import Link from 'next/link'; import { MediaStatus } from '../../../server/constants/media'; import RequestModal from '../RequestModal'; import { defineMessages, useIntl } from 'react-intl'; import { useIsTouch } from '../../hooks/useIsTouch'; const messages = defineMessages({ movie: 'Movie', tvshow: 'Series', }); interface TitleCardProps { id: number; image?: string; summary?: string; year?: string; title: string; userScore: number; mediaType: MediaType; status?: MediaStatus; canExpand?: boolean; } const TitleCard: React.FC = ({ id, image, summary, year, title, status, mediaType, canExpand = false, }) => { const isTouch = useIsTouch(); const intl = useIntl(); const [isUpdating, setIsUpdating] = useState(false); const [currentStatus, setCurrentStatus] = useState(status); const [showDetail, setShowDetail] = useState(false); const [showRequestModal, setShowRequestModal] = useState(false); // Just to get the year from the date if (year) { year = year.slice(0, 4); } useEffect(() => { setCurrentStatus(status); }, [status]); const requestComplete = useCallback((newStatus: MediaStatus) => { setCurrentStatus(newStatus); setShowRequestModal(false); }, []); const requestUpdating = useCallback( (status: boolean) => setIsUpdating(status), [] ); const closeModal = useCallback(() => setShowRequestModal(false), []); return (
{ if (!isTouch) { setShowDetail(true); } }} onMouseLeave={() => setShowDetail(false)} onClick={() => setShowDetail(true)} onKeyDown={(e) => { if (e.key === 'Enter') { setShowDetail(true); } }} role="link" tabIndex={0} >
{mediaType === 'movie' ? intl.formatMessage(messages.movie) : intl.formatMessage(messages.tvshow)}
{(currentStatus === MediaStatus.AVAILABLE || currentStatus === MediaStatus.PARTIALLY_AVAILABLE) && (
)} {currentStatus === MediaStatus.PENDING && (
)} {currentStatus === MediaStatus.PROCESSING && (
)}
{year &&
{year}
}

{title}

{summary}
{(!currentStatus || currentStatus === MediaStatus.UNKNOWN) && ( )} {currentStatus === MediaStatus.PENDING && ( )} {currentStatus === MediaStatus.PROCESSING && ( )} {(currentStatus === MediaStatus.AVAILABLE || currentStatus === MediaStatus.PARTIALLY_AVAILABLE) && ( )}
); }; export default withProperties(TitleCard, { Placeholder });