import { Component, FormEventHandler, linkEvent } from "inferno"; import { EditSite, LocalSiteRateLimit } from "lemmy-js-client"; import { i18n } from "../../i18next"; import { capitalizeFirstLetter, myAuthRequired } from "../../utils"; import { Spinner } from "../common/icon"; import Tabs from "../common/tabs"; const rateLimitTypes = [ "message", "post", "image", "comment", "search", "register", ] as const; interface RateLimitsProps { handleRateLimit: FormEventHandler; handleRateLimitPerSecond: FormEventHandler; rateLimitValue?: number; rateLimitPerSecondValue?: number; } interface RateLimitFormProps { rateLimits: LocalSiteRateLimit; onSaveSite(form: EditSite): void; loading: boolean; } interface RateLimitFormState { form: { message?: number; message_per_second?: number; post?: number; post_per_second?: number; comment?: number; comment_per_second?: number; image?: number; image_per_second?: number; search?: number; search_per_second?: number; register?: number; register_per_second?: number; }; } function RateLimits({ handleRateLimit, handleRateLimitPerSecond, rateLimitPerSecondValue, rateLimitValue, }: RateLimitsProps) { return (
); } function handleRateLimitChange( { rateLimitType, ctx }: { rateLimitType: string; ctx: RateLimitsForm }, event: any ) { ctx.setState(prev => ({ ...prev, form: { ...prev.form, [rateLimitType]: Number(event.target.value), }, })); } function handlePerSecondChange( { rateLimitType, ctx }: { rateLimitType: string; ctx: RateLimitsForm }, event: any ) { ctx.setState(prev => ({ ...prev, form: { ...prev.form, [`${rateLimitType}_per_second`]: Number(event.target.value), }, })); } function submitRateLimitForm(i: RateLimitsForm, event: any) { event.preventDefault(); const auth = myAuthRequired(); const form: EditSite = Object.entries(i.state.form).reduce( (acc, [key, val]) => { acc[`rate_limit_${key}`] = val; return acc; }, { auth, } ); i.props.onSaveSite(form); } export default class RateLimitsForm extends Component< RateLimitFormProps, RateLimitFormState > { state: RateLimitFormState = { form: this.props.rateLimits, }; constructor(props: RateLimitFormProps, context: any) { super(props, context); } render() { return (
{i18n.t("rate_limit_header")}
({ key: rateLimitType, label: i18n.t(`rate_limit_${rateLimitType}`), getNode: () => ( ), }))} />
); } }