import React from "react"; import { Alert, Box, Button, TextField, Typography } from "@mui/material"; import { PageSection } from "../layout/PageLayout"; import { useI18n } from "../i18n/I18nProvider"; export type RuleSettings = { id: number; appliedFollowUpDays: number; appliedGhostDays: number; offerFollowUpDays: number; offerGhostDays: number; feedbackFollowUpDays: number; feedbackGhostDays: number; }; export const RULE_FIELDS = ["appliedFollowUpDays", "appliedGhostDays", "offerFollowUpDays", "offerGhostDays", "feedbackFollowUpDays", "feedbackGhostDays"] as const; export type RuleField = typeof RULE_FIELDS[number]; export type RuleDraft = Record; type Props = { draft: RuleDraft | null; loadError: string | null; saveError: boolean; invalid: RuleField[]; saving: boolean; dirty: boolean; onChange: (field: RuleField, value: string) => void; onSave: () => void; onDiscard: () => void; onRetry: () => void; }; export default function RulesSettingsCard({ draft, loadError, saveError, invalid, saving, dirty, onChange, onSave, onDiscard, onRetry }: Props) { const { t } = useI18n(); if (!draft) { return ( {loadError ? {t("retry")}}>{loadError} : {t("rulesLoading")}} ); } const num = (k: RuleField) => ({ value: draft[k], onChange: (e: React.ChangeEvent) => onChange(k, e.target.value), type: "number" as const, error: invalid.includes(k), helperText: invalid.includes(k) ? t("rulesDaysInvalid") : undefined, inputProps: { min: 1, max: 365, step: 1, required: true }, }); return ( { event.preventDefault(); onSave(); }}> {saveError ? {t("rulesSaveFailed")} : null} ); }