import Link from 'next/link'; import React, { useState } from 'react'; import { defineMessages, useIntl } from 'react-intl'; import { QuotaStatus } from '../../../../server/interfaces/api/userInterfaces'; import ProgressCircle from '../../Common/ProgressCircle'; const messages = defineMessages({ requestsremaining: '{remaining, plural, =0 {No} other {#}} {type} {remaining, plural, one {request} other {requests}} remaining', movielimit: '{limit, plural, one {movie} other {movies}}', seasonlimit: '{limit, plural, one {season} other {seasons}}', allowedRequests: 'You are allowed to request {limit} {type} every {days} days.', allowedRequestsUser: 'This user is allowed to request {limit} {type} every {days} days.', quotaLink: 'You can view a summary of your request limits on your profile page.', quotaLinkUser: "You can view a summary of this user's request limits on their profile page.", movie: 'movie', season: 'season', notenoughseasonrequests: 'Not enough season requests remaining', requiredquota: 'You need to have at least {seasons} {seasons, plural, one {season request} other {season requests}} remaining in order to submit a request for this series.', requiredquotaUser: 'This user needs to have at least {seasons} {seasons, plural, one {season request} other {season requests}} remaining in order to submit a request for this series.', }); interface QuotaDisplayProps { quota?: QuotaStatus; mediaType: 'movie' | 'tv'; userOverride?: number | null; remaining?: number; overLimit?: number; } const QuotaDisplay: React.FC = ({ quota, mediaType, userOverride, remaining, overLimit, }) => { const intl = useIntl(); const [showDetails, setShowDetails] = useState(false); return (
setShowDetails((s) => !s)} onKeyDown={(e) => { if (e.key === 'Enter') { setShowDetails((s) => !s); } }} role="button" tabIndex={0} >
{overLimit !== undefined ? intl.formatMessage(messages.notenoughseasonrequests) : intl.formatMessage(messages.requestsremaining, { remaining: Math.max(0, remaining ?? quota?.remaining ?? 0), type: intl.formatMessage( mediaType === 'movie' ? messages.movie : messages.season ), strong: function strong(msg) { return {msg}; }, })}
{showDetails ? ( ) : ( )}
{showDetails && (
{overLimit !== undefined && (
{intl.formatMessage( userOverride ? messages.requiredquota : messages.requiredquotaUser, { seasons: overLimit, strong: function strong(msg) { return {msg}; }, } )}
)}
{intl.formatMessage( userOverride ? messages.allowedRequestsUser : messages.allowedRequests, { limit: quota?.limit, days: quota?.days, type: intl.formatMessage( mediaType === 'movie' ? messages.movielimit : messages.seasonlimit, { limit: quota?.limit } ), strong: function strong(msg) { return {msg}; }, } )}
{intl.formatMessage( userOverride ? messages.quotaLinkUser : messages.quotaLink, { ProfileLink: function ProfileLink(msg) { return ( {msg} ); }, } )}
)}
); }; export default QuotaDisplay;