import React, { useEffect, useState } from 'react'; import { defineMessages, useIntl } from 'react-intl'; const messages = defineMessages({ movieRequests: '{quotaLimit} {movies} per {quotaDays} {days}', tvRequests: '{quotaLimit} {seasons} per {quotaDays} {days}', movies: '{count, plural, one {movie} other {movies}}', seasons: '{count, plural, one {season} other {seasons}}', days: '{count, plural, one {day} other {days}}', unlimited: 'Unlimited', }); interface QuotaSelectorProps { mediaType: 'movie' | 'tv'; defaultDays?: number; defaultLimit?: number; dayOverride?: number; limitOverride?: number; dayFieldName: string; limitFieldName: string; isDisabled?: boolean; onChange: (fieldName: string, value: number) => void; } const QuotaSelector = ({ mediaType, dayFieldName, limitFieldName, defaultDays = 7, defaultLimit = 0, dayOverride, limitOverride, isDisabled = false, onChange, }: QuotaSelectorProps) => { const initialDays = defaultDays ?? 7; const initialLimit = defaultLimit ?? 0; const [quotaDays, setQuotaDays] = useState(initialDays); const [quotaLimit, setQuotaLimit] = useState(initialLimit); const intl = useIntl(); useEffect(() => { onChange(dayFieldName, quotaDays); }, [dayFieldName, onChange, quotaDays]); useEffect(() => { onChange(limitFieldName, quotaLimit); }, [limitFieldName, onChange, quotaLimit]); return (
{intl.formatMessage( mediaType === 'movie' ? messages.movieRequests : messages.tvRequests, { quotaLimit: ( ), quotaDays: ( ), movies: intl.formatMessage(messages.movies, { count: quotaLimit }), seasons: intl.formatMessage(messages.seasons, { count: quotaLimit }), days: intl.formatMessage(messages.days, { count: quotaDays }), quotaUnits: function quotaUnits(msg) { return ( {msg} ); }, } )}
); }; export default React.memo(QuotaSelector);