import ProgressCircle from '@app/components/Common/ProgressCircle'; import { ChevronDownIcon, ChevronUpIcon } from '@heroicons/react/solid'; import type { QuotaStatus } from '@server/interfaces/api/userInterfaces'; import Link from 'next/link'; import { useState } from 'react'; import { defineMessages, useIntl } from 'react-intl'; 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 = ({ quota, mediaType, userOverride, remaining, overLimit, }: QuotaDisplayProps) => { 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: remaining ?? quota?.remaining ?? 0, type: intl.formatMessage( mediaType === 'movie' ? messages.movie : messages.season ), strong: (msg: React.ReactNode) => {msg}, })}
{showDetails ? ( ) : ( )}
{showDetails && (
{overLimit !== undefined && (
{intl.formatMessage( userOverride ? messages.requiredquotaUser : messages.requiredquota, { seasons: overLimit, strong: (msg: React.ReactNode) => {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: (msg: React.ReactNode) => {msg}, } )}
{intl.formatMessage( userOverride ? messages.quotaLinkUser : messages.quotaLink, { ProfileLink: (msg: React.ReactNode) => ( {msg} ), } )}
)}
); }; export default QuotaDisplay;