import React, { useState } from 'react'; import type { MediaType } from '../../../server/models/Search'; import Available from '../../assets/available.svg'; import Requested from '../../assets/requested.svg'; import Unavailable from '../../assets/unavailable.svg'; import { withProperties } from '../../utils/typeHelpers'; import Transition from '../Transition'; import Placeholder from './Placeholder'; import Modal from '../Common/Modal'; import { useUser, Permission } from '../../hooks/useUser'; import axios from 'axios'; import { MediaRequest } from '../../../server/entity/MediaRequest'; interface TitleCardProps { id: number; image?: string; summary: string; year: string; title: string; userScore: number; mediaType: MediaType; status?: MediaRequestStatus; } enum MediaRequestStatus { PENDING, APPROVED, DECLINED, AVAILABLE, } const TitleCard: React.FC = ({ id, image, summary, year, title, status, mediaType, }) => { const [currentStatus, setCurrentStatus] = useState(status); const { hasPermission } = useUser(); const [showDetail, setShowDetail] = useState(false); const [showRequestModal, setShowRequestModal] = useState(false); const request = async () => { const response = await axios.post('/api/v1/request', { mediaId: id, mediaType, }); if (response.data) { setCurrentStatus(response.data.status); } }; // Just to get the year from the date if (year) { year = year.slice(0, 4); } return (
setShowRequestModal(false)} onOk={() => request()} title={`Request ${title}`} okText="Request" iconSvg={ } > {hasPermission(Permission.MANAGE_REQUESTS) ? 'Your request will be immediately approved. Do you wish to continue?' : undefined}
setShowDetail(true)} onMouseLeave={() => setShowDetail(false)} >
{mediaType === 'movie' ? 'MOVIE' : 'TV SHOW'}
{currentStatus === MediaRequestStatus.AVAILABLE && ( )} {currentStatus === MediaRequestStatus.PENDING && ( )} {currentStatus === MediaRequestStatus.APPROVED && ( )}
{year}

{title}

{summary}
); }; export default withProperties(TitleCard, { Placeholder });