import React, { useEffect, useState } from "react"; import { Alert, Box, Button, Paper, TextField, Typography } from "@mui/material"; import { api, getApiErrorMessage } from "../api"; import { useToast } from "../toast"; import { useI18n } from "../i18n/I18nProvider"; type RuleSettings = { id: number; appliedFollowUpDays: number; appliedGhostDays: number; offerFollowUpDays: number; offerGhostDays: number; feedbackFollowUpDays: number; feedbackGhostDays: number; }; export default function RulesSettingsCard() { const { toast } = useToast(); const { t } = useI18n(); const [s, setS] = useState(null); const [saving, setSaving] = useState(false); const [loadError, setLoadError] = useState(null); useEffect(() => { api.get("/rules") .then((r) => { setS(r.data); setLoadError(null); }) .catch((e: any) => { setS(null); setLoadError(getApiErrorMessage(e, t("rulesLoadFailed"))); }); }, [t]); const save = async () => { if (!s) return; setSaving(true); try { await api.put("/rules", s); toast(t("rulesSave"), "success"); } catch { toast(t("rulesSaveFailed"), "error"); } finally { setSaving(false); } }; if (!s) { return ( {t("rulesTitle")} {loadError ? {loadError} : {t("rulesLoading")}} ); } const num = (k: keyof RuleSettings) => ({ value: s[k], onChange: (e: React.ChangeEvent) => setS((p) => (p ? { ...p, [k]: Number(e.target.value) } : p)), type: "number" as const, inputProps: { min: 1, max: 365 }, }); return ( {t("rulesTitle")} {t("rulesBody")} ); }