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);