import { CalendarIcon, CheckIcon, EyeIcon, PencilIcon, TrashIcon, UserIcon, XIcon, } from '@heroicons/react/solid'; import axios from 'axios'; import React, { useState } from 'react'; import { defineMessages, useIntl } from 'react-intl'; import { MediaRequestStatus } from '../../../server/constants/media'; import type { MediaRequest } from '../../../server/entity/MediaRequest'; import useRequestOverride from '../../hooks/useRequestOverride'; import globalMessages from '../../i18n/globalMessages'; import Badge from '../Common/Badge'; import Button from '../Common/Button'; import RequestModal from '../RequestModal'; const messages = defineMessages({ seasons: '{seasonCount, plural, one {Season} other {Seasons}}', requestoverrides: 'Request Overrides', server: 'Destination Server', profilechanged: 'Quality Profile', rootfolder: 'Root Folder', }); interface RequestBlockProps { request: MediaRequest; onUpdate?: () => void; } const RequestBlock: React.FC = ({ request, onUpdate }) => { const intl = useIntl(); const [isUpdating, setIsUpdating] = useState(false); const [showEditModal, setShowEditModal] = useState(false); const { profile, rootFolder, server } = useRequestOverride(request); const updateRequest = async (type: 'approve' | 'decline'): Promise => { setIsUpdating(true); await axios.post(`/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 (
setShowEditModal(false)} onComplete={() => { if (onUpdate) { onUpdate(); } setShowEditModal(false); }} />
{request.requestedBy.displayName}
{request.modifiedBy && (
{request.modifiedBy?.displayName}
)}
{request.status === MediaRequestStatus.PENDING && ( <> )} {request.status !== MediaRequestStatus.PENDING && ( )}
{request.is4k && ( 4K )} {request.status === MediaRequestStatus.APPROVED && ( {intl.formatMessage(globalMessages.approved)} )} {request.status === MediaRequestStatus.DECLINED && ( {intl.formatMessage(globalMessages.declined)} )} {request.status === MediaRequestStatus.PENDING && ( {intl.formatMessage(globalMessages.pending)} )}
{intl.formatDate(request.createdAt, { year: 'numeric', month: 'long', day: 'numeric', })}
{(request.seasons ?? []).length > 0 && (
{intl.formatMessage(messages.seasons, { seasonCount: request.seasons.length, })}
{request.seasons.map((season) => ( {season.seasonNumber} ))}
)} {(server || profile || rootFolder) && ( <>
{intl.formatMessage(messages.requestoverrides)}
    {server && (
  • {intl.formatMessage(messages.server)} {server}
  • )} {profile !== null && (
  • {intl.formatMessage(messages.profilechanged)} ID {profile}
  • )} {rootFolder && (
  • {intl.formatMessage(messages.rootfolder)} {rootFolder}
  • )}
)}
); }; export default RequestBlock;