import React, { useState } from 'react'; import type { MediaRequest } from '../../../server/entity/MediaRequest'; import { FormattedDate, useIntl, defineMessages } from 'react-intl'; import Badge from '../Common/Badge'; import { MediaRequestStatus } from '../../../server/constants/media'; import Button from '../Common/Button'; import axios from 'axios'; import globalMessages from '../../i18n/globalMessages'; const messages = defineMessages({ seasons: 'Seasons', }); interface RequestBlockProps { request: MediaRequest; onUpdate?: () => void; } const RequestBlock: React.FC = ({ request, onUpdate }) => { const intl = useIntl(); const [isUpdating, setIsUpdating] = useState(false); const updateRequest = async (type: 'approve' | 'decline'): Promise => { setIsUpdating(true); await axios.get(`/api/v1/request/${request.id}/${type}`); if (onUpdate) { onUpdate(); } setIsUpdating(false); }; const deleteRequest = async () => { setIsUpdating(true); await axios.delete(`/api/v1/request/${request.id}`); if (onUpdate) { onUpdate(); } setIsUpdating(false); }; return (
{request.requestedBy.username}
{request.modifiedBy && (
{request.modifiedBy?.username}
)}
{request.status === MediaRequestStatus.PENDING && ( <> )} {request.status !== MediaRequestStatus.PENDING && ( )}
{request.status === MediaRequestStatus.AVAILABLE && ( {intl.formatMessage(globalMessages.available)} )} {request.status === MediaRequestStatus.APPROVED && ( {intl.formatMessage(globalMessages.approved)} )} {request.status === MediaRequestStatus.DECLINED && ( {intl.formatMessage(globalMessages.declined)} )} {request.status === MediaRequestStatus.PENDING && ( {intl.formatMessage(globalMessages.pending)} )}
{(request.seasons ?? []).length > 0 && (
{intl.formatMessage(messages.seasons)}
{request.seasons.map((season) => ( {season.seasonNumber} ))}
)}
); }; export default RequestBlock;